]> git.ipfire.org Git - thirdparty/bash.git/blobdiff - flags.c
Bash-5.2-rc4 release
[thirdparty/bash.git] / flags.c
diff --git a/flags.c b/flags.c
index eaec9aae86d0e2f0d15fef6e5f0e8ef8d821b342..30f6c13d4262c14643eb786125955e6f09138d80 100644 (file)
--- a/flags.c
+++ b/flags.c
@@ -1,7 +1,7 @@
 /* flags.c -- Everything about flags except the `set' command.  That
    is in builtins.c */
 
-/* Copyright (C) 1987-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,6 +25,7 @@
 #endif
 
 #include "shell.h"
+#include "execute_cmd.h"
 #include "flags.h"
 
 #if defined (BANG_HISTORY)
 #endif
 
 #if defined (JOB_CONTROL)
-extern int set_job_control __P((int));
+extern int set_job_control PARAMS((int));
 #endif
 
-#if defined (RESTRICTED_SHELL)
-extern char *shell_name;
-#endif
-
-extern int shell_initialized;
-extern int builtin_ignoring_errexit;
-
-/* -c, -s invocation options -- not really flags, but they show up in $- */
-extern int want_pending_command, read_from_stdin;
-
 /* **************************************************************** */
 /*                                                                 */
 /*                     The Standard sh Flags.                      */
@@ -90,6 +81,7 @@ int unbound_vars_is_error = 0;
 
 /* Non-zero means type out input lines after you read them. */
 int echo_input_at_read = 0;
+int verbose_flag = 0;
 
 /* Non-zero means type out the command definition after reading, but
    before executing. */
@@ -120,20 +112,14 @@ int no_symbolic_links = 0;
 int lexical_scoping = 0;
 #endif
 
-/* Non-zero means no such thing as invisible variables. */
-int no_invisible_vars = 0;
-
 /* Non-zero means look up and remember command names in a hash table, */
 int hashing_enabled = 1;
 
 #if defined (BANG_HISTORY)
 /* Non-zero means that we are doing history expansion.  The default.
    This means !22 gets the 22nd line of history. */
-#  if defined (STRICT_POSIX)
-int history_expansion = 0;
-#  else
-int history_expansion = 1;
-#  endif
+int history_expansion = HISTEXPAND_DEFAULT;
+int histexp_flag = 0;
 #endif /* BANG_HISTORY */
 
 /* Non-zero means that we allow comments to appear in interactive commands. */
@@ -197,7 +183,7 @@ const struct flags_alist shell_flags[] = {
 #endif /* RESTRICTED_SHELL */
   { 't', &just_one_command },
   { 'u', &unbound_vars_is_error },
-  { 'v', &echo_input_at_read },
+  { 'v', &verbose_flag },
   { 'x', &echo_command_at_execute },
 
   /* New flags that control non-standard things. */
@@ -210,9 +196,8 @@ const struct flags_alist shell_flags[] = {
   { 'C', &noclobber },
   { 'E', &error_trace_mode },
 #if defined (BANG_HISTORY)
-  { 'H', &history_expansion },
+  { 'H', &histexp_flag },
 #endif /* BANG_HISTORY */
-  { 'I', &no_invisible_vars },
   { 'P', &no_symbolic_links },
   { 'T', &function_trace_mode },
   {0, (int *)NULL}
@@ -264,6 +249,7 @@ change_flag (flag, on_or_off)
     {
 #if defined (BANG_HISTORY)
     case 'H':
+      history_expansion = histexp_flag;
       if (on_or_off == FLAG_ON)
        bash_initialize_history ();
       break;
@@ -297,6 +283,9 @@ change_flag (flag, on_or_off)
       break;
 #endif
 
+    case 'v':
+      echo_input_at_read = verbose_flag;
+      break;
     }
 
   return (old_value);
@@ -324,14 +313,45 @@ which_set_flags ()
   return (temp);
 }
 
+char *
+get_current_flags ()
+{
+  char *temp;
+  int i;
+
+  temp = (char *)xmalloc (1 + NUM_SHELL_FLAGS);
+  for (i = 0; shell_flags[i].name; i++)
+    temp[i] = *(shell_flags[i].value);
+  temp[i] = '\0';
+  return (temp);
+}
+
+void
+set_current_flags (bitmap)
+     const char *bitmap;
+{
+  int i;
+
+  if (bitmap == 0)
+    return;
+  for (i = 0; shell_flags[i].name; i++)
+    *(shell_flags[i].value) = bitmap[i];
+}
+
 void
 reset_shell_flags ()
 {
-  mark_modified_vars = exit_immediately_on_error = disallow_filename_globbing = 0;
+  mark_modified_vars = disallow_filename_globbing = 0;
   place_keywords_in_env = read_but_dont_execute = just_one_command = 0;
-  noclobber = unbound_vars_is_error = echo_input_at_read = 0;
+  noclobber = unbound_vars_is_error = 0;
   echo_command_at_execute = jobs_m_flag = forced_interactive = 0;
-  no_symbolic_links = no_invisible_vars = privileged_mode = pipefail_opt = 0;
+  no_symbolic_links = 0;
+  privileged_mode = pipefail_opt = 0;
+
+  error_trace_mode = function_trace_mode = 0;
+
+  exit_immediately_on_error = errexit_flag = 0;
+  echo_input_at_read = verbose_flag = 0;
 
   hashing_enabled = interactive_comments = 1;
 
@@ -340,7 +360,7 @@ reset_shell_flags ()
 #endif
 
 #if defined (BANG_HISTORY)
-  history_expansion = 1;
+  histexp_flag = 0;
 #endif
 
 #if defined (BRACE_EXPANSION)