]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
use size_t for string indices; document rl_reparse_colors
authorChet Ramey <chet.ramey@case.edu>
Fri, 22 Sep 2023 13:50:33 +0000 (09:50 -0400)
committerChet Ramey <chet.ramey@case.edu>
Fri, 22 Sep 2023 13:50:33 +0000 (09:50 -0400)
12 files changed:
CWRU/CWRU.chlog
arrayfunc.c
braces.c
externs.h
general.c
general.h
lib/readline/doc/rltech.texi
lib/readline/readline.h
lib/sh/oslib.c
parse.y
subst.c
subst.h

index 5ea0e26aac9ad7b13528f033caa4c848fe3f4b79..88ddf9c948fc3a14a9f1dbce06fe51cce4698ff5 100644 (file)
@@ -7608,3 +7608,47 @@ execute_cmd.c
 doc/bash.1,doc/bashref.texi
        - hash: add some text about the mutual exclusivity of the -t, -p, and
          -d options
+
+                                  9/14
+                                  ----
+subst.c,subst.h,externs.h
+       - string_extract,string_extract_verbatim,string_extract_double_quoted,
+         string_extract_single_quoted,skip_single_quoted,skip_double_quoted,
+         extract_delimited_string,extract_heredoc_dolbrace_string,
+         extract_dollar_brace_string,parameter_brace_expand,param_expand,
+         extract_command_subst,extract_function_subst,extract_arithmetic_subst,
+         extract_process_subst,extract_array_assignment_list,
+         expand_array_subscript
+         change function signatures to take size_t * instead of int * for
+         arguments that are string indices or lengths, change callers
+       - unquoted_substring,unquoted_member,string_extract,
+         string_extract_double_quoted,skip_double_quoted,
+         string_extract_single_quoted,skip_single_quoted,
+         string_extract_verbatim,extract_delimited_string,
+         extract_heredoc_dolbrace_string,extract_dollar_brace_string,
+         parameter_brace_expand,param_expand,skip_matched_pair,skip_to_delim,
+         skip_to_histexp,list_string,expand_string_dollar_quote,
+         parameter_brace_expand_rhs,expand_array_subscript,shouldexp_replacement,
+         expand_array_subscript,string_quote_removal: change variables used
+         for string indexes to size_t
+         [merge from size_t branch]
+
+arrayfunc.c
+       - expand_compound_array_assignment: use size_t for string indices
+
+braces.c
+       - brace_gobbler: use size_t for string indices
+
+parse.y
+       - xparse_dolparen: change function signature to use size_t *
+         instead of int * for string index, use size_t for string indices
+
+general.c, general.h
+       - bash_tilde_find_word: change function signature to use size_t *
+         instead of int * for string index
+
+lib/readline/readline.h
+       - rl_reparse_colors: extern declaration
+
+lib/readline/doc/rltech.texi
+       - rl_reparse_colors: document as public function
index 6dcb02504978eb00403a63c3076e6c2069e03caa..b5033fadf1c832ab839057bab4ad2ff399a541ae 100644 (file)
@@ -555,7 +555,7 @@ expand_compound_array_assignment (SHELL_VAR *var, char *value, int flags)
 {
   WORD_LIST *list, *nlist;
   char *val;
-  int ni;
+  size_t ni;
 
   /* This condition is true when invoked from the declare builtin with a
      command like
index e21160c1c5d51dd00bd329458541ce359b424dd5..a4476868c17820a3e60968456fabdd139aeb6a30 100644 (file)
--- a/braces.c
+++ b/braces.c
@@ -580,7 +580,7 @@ brace_gobbler (char *text, size_t tlen, int *indx, int satisfy)
 {
   register int i, c, quoted, level, commas, pass_next;
 #if defined (SHELL)
-  int si;
+  size_t si;
   char *t;
 #endif
   DECLARE_MBSTATE;
index c4a21e74e301b37cbb0bd895caff5990846bc7bd..34e76059a5a8f1f4f37a4aca75c69bee9e50a802 100644 (file)
--- a/externs.h
+++ b/externs.h
@@ -109,7 +109,7 @@ extern char **brace_expand (char *);
 extern int yyparse (void);
 extern int return_EOF (void);
 extern void push_token (int);
-extern char *xparse_dolparen (const char *, char *, int *, int);
+extern char *xparse_dolparen (const char *, char *, size_t *, int);
 extern COMMAND *parse_string_to_command (char *, int);
 extern void reset_parser (void);
 extern void reset_readahead_token (void);
index da59f9c0fbc6eb3251f5b4a77d17199ffbd1faa9..0ca51b7d1104781567f06d3c9902cef5e7363fb0 100644 (file)
--- a/general.c
+++ b/general.c
@@ -1162,7 +1162,7 @@ unquoted_tilde_word (const char *s)
    *LENP.  FLAGS tells whether or not we're in an assignment context --
    if so, `:' delimits the end of the tilde prefix as well. */
 char *
-bash_tilde_find_word (const char *s, int flags, int *lenp)
+bash_tilde_find_word (const char *s, int flags, size_t *lenp)
 {
   const char *r;
   char *ret;
index 6426c3c6c4d79e8561b8ed52dfc473e3a327d7db..2979b9bf072ad6d59fdf05d608821e8972a47149 100644 (file)
--- a/general.h
+++ b/general.h
@@ -344,7 +344,7 @@ extern char *printable_filename (char *, int);
 extern char *extract_colon_unit (char *, int *);
 
 extern void tilde_initialize (void);
-extern char *bash_tilde_find_word (const char *, int, int *);
+extern char *bash_tilde_find_word (const char *, int, size_t *);
 extern char *bash_tilde_expand (const char *, int);
 
 extern int group_member (gid_t);
index c83d99d51a481602974f7a3842a20ccc566642c2..3e136789d869056e0c7779d905b7d10eeafa4cff 100644 (file)
@@ -1377,7 +1377,6 @@ If the application has assigned a value to @code{rl_macro_display_hook},
 @code{rl_macro_dumper} calls it instead of printing anything.
 If @var{readable} is greater than zero, the list is formatted in such a way
 that it can be made part of an @code{inputrc} file and re-read.
-
 @end deftypefun
 
 @deftypefun int rl_variable_bind (const char *variable, const char *value)
@@ -1413,6 +1412,10 @@ use all of a terminal's capabilities, and this function will return
 values for only those capabilities Readline uses.
 @end deftypefun
 
+@deftypefun {void} rl_reparse_colors (void)
+Read or re-read color definitions from @env{LS_COLORS}.
+@end deftypefun
+
 @deftypefun {void} rl_clear_history (void)
 Clear the history list by deleting all of the entries, in the same manner
 as the History library's @code{clear_history()} function.
index 828a42a626a6170fbc4a07080d61011002720eba..0810f97d77fd21f430397d79706cce5adcf8bea2 100644 (file)
@@ -439,6 +439,7 @@ extern void rl_get_screen_size (int *, int *);
 extern void rl_reset_screen_size (void);
 
 extern char *rl_get_termcap (const char *);
+extern void rl_reparse_colors (void);
 
 /* Functions for character input. */
 extern int rl_stuff_char (int);
index 85f7b4914787fc90620edd1dca5f56b127cf6494..6c5052d032f521e5e876526c2bd55c428fe553d8 100644 (file)
@@ -231,6 +231,7 @@ mkfifo (char *path, mode_t mode)
 #endif /* !HAVE_MKFIFO && PROCESS_SUBSTITUTION */
 
 #define DEFAULT_MAXGROUPS 64
+#define MIN_MAXGROUPS 32       /* work around macOS issue */
 
 int
 getmaxgroups (void)
@@ -257,6 +258,9 @@ getmaxgroups (void)
   if (maxgroups <= 0)
     maxgroups = DEFAULT_MAXGROUPS;
 
+  if (maxgroups < MIN_MAXGROUPS)
+    maxgroups = MIN_MAXGROUPS;
+
   return maxgroups;
 }
 
diff --git a/parse.y b/parse.y
index 90bc55f54e79ca2dbe5934e72b1fb4ebf7d06ff3..3e5b814f23755435345282b19cb79e0a8147809b 100644 (file)
--- a/parse.y
+++ b/parse.y
@@ -4562,11 +4562,12 @@ INTERNAL_DEBUG(("current_token (%d) != shell_eof_token (%c)", current_token, she
    called by the word expansion code and so does not have to reset as much
    parser state before calling yyparse(). */
 char *
-xparse_dolparen (const char *base, char *string, int *indp, int flags)
+xparse_dolparen (const char *base, char *string, size_t *indp, int flags)
 {
   sh_parser_state_t ps;
   sh_input_line_state_t ls;
-  int orig_ind, nc, sflags, start_lineno, local_extglob, funsub, closer;
+  size_t orig_ind;
+  int nc, sflags, start_lineno, local_extglob, funsub, closer;
   int save_lineno;
   char *ret, *ep, *ostring;
 
diff --git a/subst.c b/subst.c
index d8791d1bc24c6405ee5f51f8533a41b6afcff6b0..855ff745087ff9342963a99a9137c7d9bc4e2d82 100644 (file)
--- a/subst.c
+++ b/subst.c
@@ -261,15 +261,15 @@ static SHELL_VAR *do_compound_assignment (const char *, char *, int);
 #endif
 static int do_assignment_internal (const WORD_DESC *, int);
 
-static char *string_extract_verbatim (const char *, size_t, int *, char *, int);
-static char *string_extract (const char *, int *, const char *, int);
-static char *string_extract_double_quoted (const char *, int *, int);
-static inline char *string_extract_single_quoted (const char *, int *, int);
-static inline int skip_single_quoted (const char *, size_t, int, int);
-static int skip_double_quoted (const char *, size_t, int, int);
-static char *extract_delimited_string (const char *, int *, char *, char *, char *, int);
-static char *extract_heredoc_dolbrace_string (const char *, int *, int, int);
-static char *extract_dollar_brace_string (const char *, int *, int, int);
+static char *string_extract_verbatim (const char *, size_t, size_t *, char *, int);
+static char *string_extract (const char *, size_t *, const char *, int);
+static char *string_extract_double_quoted (const char *, size_t *, int);
+static inline char *string_extract_single_quoted (const char *, size_t *, int);
+static inline size_t skip_single_quoted (const char *, size_t, size_t, int);
+static int skip_double_quoted (const char *, size_t, size_t, int);
+static char *extract_delimited_string (const char *, size_t *, char *, char *, char *, int);
+static char *extract_heredoc_dolbrace_string (const char *, size_t *, int, int);
+static char *extract_dollar_brace_string (const char *, size_t *, int, int);
 static int skip_matched_pair (const char *, int, int, int, int);
 
 static char *pos_params (const char *, int, int, int, int);
@@ -349,8 +349,8 @@ static char *parameter_brace_patsub (char *, char *, array_eltstate_t *, char *,
 static char *pos_params_casemod (char *, char *, int, int);
 static char *parameter_brace_casemod (char *, char *, array_eltstate_t *, int, char *, int, int, int);
 
-static WORD_DESC *parameter_brace_expand (char *, int *, int, int, int *, int *);
-static WORD_DESC *param_expand (char *, int *, int, int *, int *, int *, int *, int);
+static WORD_DESC *parameter_brace_expand (char *, size_t *, int, int, int *, int *);
+static WORD_DESC *param_expand (char *, size_t *, int, int *, int *, int *, int *, int);
 
 static WORD_LIST *expand_word_internal (WORD_DESC *, int, int, int *, int *);
 
@@ -641,8 +641,8 @@ quoted_strchr (char *s, int c, int flags)
 static int
 unquoted_member (int character, const char *string)
 {
-  size_t slen;
-  int sindex, c;
+  size_t slen, sindex;
+  int c;
   DECLARE_MBSTATE;
 
   slen = strlen (string);
@@ -680,8 +680,8 @@ unquoted_member (int character, const char *string)
 static int
 unquoted_substring (const char *substr, const char *string)
 {
-  size_t slen;
-  int sindex, c, sublen;
+  size_t sindex, slen, sublen;
+  int c;
   DECLARE_MBSTATE;
 
   if (substr == 0 || *substr == '\0')
@@ -779,11 +779,11 @@ sub_append_number (intmax_t number, char *target, size_t *indx, size_t *size)
    update SINDEX.  If (flags & SX_REQMATCH) is non-zero, the string must
    contain a closing character from CHARLIST. */
 static char *
-string_extract (const char *string, int *sindex, const char *charlist, int flags)
+string_extract (const char *string, size_t *sindex, const char *charlist, int flags)
 {
-  register int c, i;
+  int c;
   int found;
-  size_t slen;
+  size_t i, slen;
   char *temp;
   DECLARE_MBSTATE;
 
@@ -840,14 +840,13 @@ string_extract (const char *string, int *sindex, const char *charlist, int flags
    Backslashes between the embedded double quotes are processed.  If STRIPDQ
    is zero, an unquoted `"' terminates the string. */
 static char *
-string_extract_double_quoted (const char *string, int *sindex, int flags)
+string_extract_double_quoted (const char *string, size_t *sindex, int flags)
 {
-  size_t slen;
+  size_t i, j, t, si, slen;
   const char *send;
-  int j, i, t;
   unsigned char c;
   char *temp, *ret;            /* The new string we return. */
-  int pass_next, backquote, si;        /* State variables for the machine. */
+  int pass_next, backquote;    /* State variables for the machine. */
   int dquote;
   int stripdq;
   DECLARE_MBSTATE;
@@ -1003,11 +1002,12 @@ add_one_character:
 
 /* This should really be another option to string_extract_double_quoted. */
 static int
-skip_double_quoted (const char *string, size_t slen, int sind, int flags)
+skip_double_quoted (const char *string, size_t slen, size_t sind, int flags)
 {
-  int c, i;
+  int c;
+  size_t i, si;
   char *ret;
-  int pass_next, backquote, si;
+  int pass_next, backquote;
   DECLARE_MBSTATE;
 
   pass_next = backquote = 0;
@@ -1076,10 +1076,9 @@ skip_double_quoted (const char *string, size_t slen, int sind, int flags)
    the closing single quote. ALLOWESC allows the single quote to be quoted by
    a backslash; it's not used yet. */
 static inline char *
-string_extract_single_quoted (const char *string, int *sindex, int allowesc)
+string_extract_single_quoted (const char *string, size_t *sindex, int allowesc)
 {
-  register int i;
-  size_t slen;
+  size_t i, slen;
   char *t;
   int pass_next;
   DECLARE_MBSTATE;
@@ -1115,36 +1114,35 @@ string_extract_single_quoted (const char *string, int *sindex, int allowesc)
 /* Skip over a single-quoted string.  We overload the SX_COMPLETE flag to mean
    that we are splitting out words for completion and have encountered a $'...'
    string, which allows backslash-escaped single quotes. */
-static inline int
-skip_single_quoted (const char *string, size_t slen, int sind, int flags)
+static inline size_t
+skip_single_quoted (const char *string, size_t slen, size_t sind, int flags)
 {
-  register int c;
+  size_t si;
   DECLARE_MBSTATE;
 
-  c = sind;
-  while (string[c] && string[c] != '\'')
+  si = sind;
+  while (string[si] && string[si] != '\'')
     {
-      if ((flags & SX_COMPLETE) && string[c] == '\\' && string[c+1] == '\'' && string[c+2])
-       ADVANCE_CHAR (string, slen, c);
-      ADVANCE_CHAR (string, slen, c);
+      if ((flags & SX_COMPLETE) && string[si] == '\\' && string[si+1] == '\'' && string[si+2])
+       ADVANCE_CHAR (string, slen, si);
+      ADVANCE_CHAR (string, slen, si);
     }
 
-  if (string[c])
-    c++;
-  return c;
+  if (string[si])
+    si++;
+  return si;
 }
 
 /* Just like string_extract, but doesn't hack backslashes or any of
    that other stuff.  Obeys CTLESC quoting.  Used to do splitting on $IFS. */
 static char *
-string_extract_verbatim (const char *string, size_t slen, int *sindex, char *charlist, int flags)
+string_extract_verbatim (const char *string, size_t slen, size_t *sindex, char *charlist, int flags)
 {
-  register int i;
+  size_t i, c;
 #if defined (HANDLE_MULTIBYTE)
   wchar_t *wcharlist;
   mbstate_t mbstmp;
 #endif
-  int c;
   char *temp;
   DECLARE_MBSTATE;
 
@@ -1250,7 +1248,7 @@ string_extract_verbatim (const char *string, size_t slen, int *sindex, char *cha
    Make (SINDEX) get the position of the matching ")". )
    XFLAGS is additional flags to pass to other extraction functions. */
 char *
-extract_command_subst (const char *string, int *sindex, int xflags)
+extract_command_subst (const char *string, size_t *sindex, int xflags)
 {
   char *ret;
   char *xstr;
@@ -1269,7 +1267,7 @@ extract_command_subst (const char *string, int *sindex, int xflags)
 /* Take a ${Ccommand} where C is a character that introduces a function
    substitution and extract the string. */
 char *
-extract_function_subst (const char *string, int *sindex, int quoted, int xflags)
+extract_function_subst (const char *string, size_t *sindex, int quoted, int xflags)
 {
   char *ret;
   char *xstr;
@@ -1289,7 +1287,7 @@ extract_function_subst (const char *string, int *sindex, int quoted, int xflags)
    Start extracting at (SINDEX) as if we had just seen "$[".
    Make (SINDEX) get the position of the matching "]". */
 char *
-extract_arithmetic_subst (const char *string, int *sindex)
+extract_arithmetic_subst (const char *string, size_t *sindex)
 {
   return (extract_delimited_string (string, sindex, "$[", "[", "]", 0)); /*]*/
 }
@@ -1299,7 +1297,7 @@ extract_arithmetic_subst (const char *string, int *sindex)
    Start extracting at (SINDEX) as if we had just seen "<(".
    Make (SINDEX) get the position of the matching ")". */ /*))*/
 char *
-extract_process_subst (const char *string, char *starter, int *sindex, int xflags)
+extract_process_subst (const char *string, char *starter, size_t *sindex, int xflags)
 {
 #if 0
   /* XXX - check xflags&SX_COMPLETE here? */
@@ -1319,9 +1317,9 @@ extract_process_subst (const char *string, char *starter, int *sindex, int xflag
    each caller verifies that the last character in STRING is a right paren,
    we don't even need to call extract_delimited_string. */
 char *
-extract_array_assignment_list (const char *string, int *sindex)
+extract_array_assignment_list (const char *string, size_t *sindex)
 {
-  int slen;
+  size_t slen;
   char *ret;
 
   slen = strlen (string);
@@ -1344,10 +1342,10 @@ extract_array_assignment_list (const char *string, int *sindex)
    contains a character string that can also match CLOSER and thus
    needs to be skipped. */
 static char *
-extract_delimited_string (const char *string, int *sindex, char *opener, char *alt_opener, char *closer, int flags)
+extract_delimited_string (const char *string, size_t *sindex, char *opener, char *alt_opener, char *closer, int flags)
 {
-  int i, c, si;
-  size_t slen;
+  int c;
+  size_t i, si, slen;
   char *t, *result;
   int pass_character, nesting_level, in_comment;
   size_t len_closer, len_opener, len_alt_opener;
@@ -1371,7 +1369,6 @@ extract_delimited_string (const char *string, int *sindex, char *opener, char *a
         the end of the string, catch it and cut the loop. */
       if (i > slen)
        {
-         i = slen;
          c = string[i = slen];
          break;
        }
@@ -1522,11 +1519,11 @@ extract_delimited_string (const char *string, int *sindex, char *opener, char *a
    This needs to match the logic in parse.y:parse_matched_pair so we get
    consistent behavior between here-documents and double-quoted strings. */
 static char *
-extract_heredoc_dolbrace_string (const char *string, int *sindex, int quoted, int flags)
+extract_heredoc_dolbrace_string (const char *string, size_t *sindex, int quoted, int flags)
 {
-  register int i, c;
-  size_t slen, tlen, result_index, result_size;
-  int pass_character, nesting_level, si, dolbrace_state;
+  register int c;
+  size_t i, si, slen, tlen, result_index, result_size;
+  int pass_character, nesting_level, dolbrace_state;
   char *result, *t;
   const char *send;
   DECLARE_MBSTATE;
@@ -1809,11 +1806,11 @@ static int dbstate[PARAMEXPNEST_MAX];
    occurs inside double quotes. */
 /* XXX -- this is very similar to extract_delimited_string -- XXX */
 static char *
-extract_dollar_brace_string (const char *string, int *sindex, int quoted, int flags)
+extract_dollar_brace_string (const char *string, size_t *sindex, int quoted, int flags)
 {
   register int i, c;
-  size_t slen;
-  int pass_character, nesting_level, si, dolbrace_state;
+  size_t si, slen;
+  int pass_character, nesting_level, dolbrace_state;
   char *result, *t;
   DECLARE_MBSTATE;
 
@@ -2009,7 +2006,7 @@ char *
 de_backslash (char *string, int qflags)
 {
   register size_t slen;
-  register int i, j, prev_i;
+  register size_t i, j, prev_i;
   DECLARE_MBSTATE;
 
   slen = strlen (string);
@@ -2072,8 +2069,8 @@ unquote_bang (char *string)
 static int
 skip_matched_pair (const char *string, int start, int open, int close, int flags)
 {
-  int i, pass_next, backq, si, c, count, oldjmp;
-  size_t slen;
+  int pass_next, backq, c, count, oldjmp;
+  size_t i, si, slen;
   char *temp;
   DECLARE_MBSTATE;
 
@@ -2185,10 +2182,10 @@ skipsubscript (const char *string, int start, int flags)
 int
 skip_to_delim (const char *string, int start, const char *delims, int flags)
 {
-  int i, pass_next, backq, dquote, si, c, oldjmp;
+  int pass_next, backq, dquote, c, oldjmp;
   int invert, skipquote, skipcmd, noprocsub, completeflag;
   int arithexp, skipcol;
-  size_t slen;
+  size_t i, si, slen;
   char *temp, open[3];
   DECLARE_MBSTATE;
 
@@ -2363,9 +2360,9 @@ skip_to_delim (const char *string, int start, const char *delims, int flags)
 int
 skip_to_histexp (const char *string, int start, const char *delims, int flags)
 {
-  int i, pass_next, backq, dquote, c, oldjmp;
+  int pass_next, backq, dquote, c, oldjmp;
   int histexp_comsub, histexp_backq, old_dquote;
-  size_t slen;
+  size_t i, slen;
   DECLARE_MBSTATE;
 
   slen = strlen (string + start) + start;
@@ -3108,7 +3105,8 @@ list_string (char *string, char *separators, int quoted)
   WORD_LIST *result;
   WORD_DESC *t;
   char *current_word, *s;
-  int sindex, sh_style_split, whitesep, xflags, free_word;
+  int sh_style_split, whitesep, xflags, free_word;
+  size_t sindex;
   size_t slen;
 
   if (!string || !*string)
@@ -3149,7 +3147,8 @@ list_string (char *string, char *separators, int quoted)
        skip sequences of whitespace characters as long as they are separators
      This obeys the field splitting rules in Posix.2. */
   slen = STRLEN (string);
-  for (result = (WORD_LIST *)NULL, sindex = 0; string[sindex]; )
+  result = NULL;
+  for (sindex = 0; sindex < slen; )
     {
       /* Don't need string length in ADVANCE_CHAR unless multibyte chars are
         possible, but need it in string_extract_verbatim for bounds checking */
@@ -3254,8 +3253,9 @@ get_word_from_string (char **stringp, char *separators, char **endptr)
 {
   register char *s;
   char *current_word;
-  int sindex, sh_style_split, whitesep, xflags;
+  int sh_style_split, whitesep, xflags;
   unsigned char local_cmap[UCHAR_MAX+1];       /* really only need single-byte chars here */
+  size_t sindex;
   size_t slen;
 
   if (!stringp || !*stringp || !**stringp)
@@ -3369,7 +3369,7 @@ list_string_with_quotes (char *string)
 {
   WORD_LIST *list;
   char *token, *s;
-  size_t s_len;
+  size_t slen;
   int c, i, tokstart, len;
 
   for (s = string; s && *s && spctabnl (*s); s++)
@@ -3377,7 +3377,7 @@ list_string_with_quotes (char *string)
   if (s == 0 || *s == 0)
     return ((WORD_LIST *)NULL);
 
-  s_len = strlen (s);
+  slen = strlen (s);
   tokstart = i = 0;
   list = (WORD_LIST *)NULL;
   while (1)
@@ -3390,9 +3390,9 @@ list_string_with_quotes (char *string)
            i++;
        }
       else if (c == '\'')
-       i = skip_single_quoted (s, s_len, ++i, 0);
+       i = skip_single_quoted (s, slen, ++i, 0);
       else if (c == '"')
-       i = skip_double_quoted (s, s_len, ++i, 0);
+       i = skip_double_quoted (s, slen, ++i, 0);
       else if (c == 0 || spctabnl (c))
        {
          /* We have found the end of a token.  Make a word out of it and
@@ -3515,7 +3515,7 @@ do_assignment_internal (const WORD_DESC *word, int expand)
   SHELL_VAR *entry;
 #if defined (ARRAY_VARS)
   char *t;
-  int ni;
+  size_t ni;
 #endif
   char *string;
 
@@ -3542,7 +3542,8 @@ do_assignment_internal (const WORD_DESC *word, int expand)
 #if defined (ARRAY_VARS)
       if (expand && (word->flags & W_COMPASSIGN))
        {
-         assign_list = ni = 1;
+         assign_list = 1;
+         ni = 1;
          value = extract_array_assignment_list (temp, &ni);
        }
       else
@@ -4119,7 +4120,8 @@ char *
 expand_string_dollar_quote (const char *string, int flags)
 {
   size_t slen, retind, retsize;
-  int sindex, c, peekc, news, tlen;
+  size_t sindex, news;
+  int c, peekc;
   char *ret, *trans, *t;
   size_t translen;
   const char *send;
@@ -7565,7 +7567,8 @@ parameter_brace_expand_word (char *name, int var_is_special, int quoted, int pfl
     }
   else if (var_is_special)      /* ${@} */
     {
-      int sindex;
+      size_t sindex;
+
       tt = (char *)xmalloc (2 + strlen (name));
       tt[sindex = 0] = '$';
       strcpy (tt + 1, name);
@@ -7845,7 +7848,8 @@ parameter_brace_expand_rhs (char *name, char *value,
   WORD_DESC *w;
   WORD_LIST *l, *tl;
   char *t, *t1, *temp, *vname, *newval;
-  int l_hasdollat, sindex, arrayref;
+  int l_hasdollat, arrayref;
+  size_t sindex;
   SHELL_VAR *v;
   array_eltstate_t es;
 
@@ -9013,8 +9017,8 @@ parameter_brace_substring (char *varname, char *value, array_eltstate_t *estatep
 static int
 shouldexp_replacement (const char *s)
 {
-  size_t slen;
-  int sindex, c;
+  size_t sindex, slen;
+  int c;
   DECLARE_MBSTATE;
 
   sindex = 0;
@@ -9636,13 +9640,14 @@ chk_arithsub (const char *s, int len)
 
 /* ${[#][!]name[[:][^[^]][,[,]]#[#]%[%]-=?+[word][:e1[:e2]]]} */
 static WORD_DESC *
-parameter_brace_expand (char *string, int *indexp, int quoted, int pflags, int *quoted_dollar_atp, int *contains_dollar_at)
+parameter_brace_expand (char *string, size_t *indexp, int quoted, int pflags, int *quoted_dollar_atp, int *contains_dollar_at)
 {
   int check_nullness, var_is_set, var_is_null, var_is_special;
   int want_substring, want_indir, want_patsub, want_casemod, want_attributes;
   char *name, *value, *temp, *temp1;
   WORD_DESC *tdesc, *ret;
-  int t_index, sindex, c, tflag, modspec, local_pflags, all_element_arrayref;
+  size_t t_index, sindex;
+  int c, tflag, modspec, local_pflags, all_element_arrayref;
   intmax_t number;
   array_eltstate_t es;
 
@@ -10322,12 +10327,13 @@ bad_substitution:
    the braces are used, parameter_brace_expand() does the work,
    possibly calling param_expand recursively. */
 static WORD_DESC *
-param_expand (char *string, int *sindex, int quoted,
+param_expand (char *string, size_t *sindex, int quoted,
              int *expanded_something, int *contains_dollar_at, int *quoted_dollar_at_p,
              int *had_quoted_null_p, int pflags)
 {
   char *temp, *temp1, uerror[3], *savecmd;
-  int zindex, t_index, expok, eflag;
+  size_t zindex, t_index;
+  int expok, eflag;
   unsigned char c;
   intmax_t number;
   SHELL_VAR *var;
@@ -10952,11 +10958,11 @@ expand_subscript_string (const char *string, int quoted)
    only expand it once, we quote the characters that would start another
    expansion and the bracket characters that are special to array subscripts. */
 static char *
-expand_array_subscript (const char *string, int *sindex, int quoted, int flags)
+expand_array_subscript (const char *string, size_t *sindex, int quoted, int flags)
 {
   char *ret, *exp, *t;
-  size_t slen;
-  int si, ni;
+  size_t si, slen;
+  int ni;
 
   si = *sindex;
   slen = STRLEN (string);
@@ -11070,7 +11076,7 @@ expand_word_internal (WORD_DESC *word, int quoted, int isexp, int *contains_doll
   size_t string_size;
 
   /* The index into STRING. */
-  int sindex;
+  size_t sindex;
 
   /* This gets 1 if we see a $@ while quoted. */
   int quoted_dollar_at;
@@ -11093,7 +11099,7 @@ expand_word_internal (WORD_DESC *word, int quoted, int isexp, int *contains_doll
   int assignoff;               /* If assignment, offset of `=' */
 
   register unsigned char c;    /* Current character. */
-  int t_index;                 /* For calls to string_extract_xxx. */
+  size_t t_index;              /* For calls to string_extract_xxx. */
 
   char twochars[2];
 
@@ -12002,10 +12008,10 @@ set_word_flags:
 char *
 string_quote_removal (const char *string, int quoted)
 {
-  size_t slen;
+  size_t slen, sindex, tindex;
   char *r, *result_string, *temp;
   const char *send;
-  int sindex, tindex, dquote;
+  int dquote;
   unsigned char c;
   DECLARE_MBSTATE;
 
@@ -12678,7 +12684,8 @@ static void
 expand_compound_assignment_word (WORD_LIST *tlist, int atype)
 {
   WORD_LIST *l;
-  int wlen, oind, t;
+  size_t wlen, oind;
+  int t;
   char *value, *temp;
 
 /*itrace("expand_compound_assignment_word: original word = -%s-", tlist->word->word);*/
diff --git a/subst.h b/subst.h
index 58ab077b57fe1ba334383e7ec7db2824fd1feb5b..4ac602fb605cbafad736d8e69bde053ebc8bdbaa 100644 (file)
--- a/subst.h
+++ b/subst.h
@@ -85,21 +85,21 @@ extern void unquote_bang (char *);
    Start extracting at (SINDEX) as if we had just seen "$(".
    Make (SINDEX) get the position just after the matching ")".
    XFLAGS is additional flags to pass to other extraction functions, */
-extern char *extract_command_subst (const char *, int *, int);
+extern char *extract_command_subst (const char *, size_t *, int);
 
 /* Placeholder */
-extern char *extract_function_subst (const char *, int *, int, int);
+extern char *extract_function_subst (const char *, size_t *, int, int);
 
 /* Extract the $[ construct in STRING, and return a new string.
    Start extracting at (SINDEX) as if we had just seen "$[".
    Make (SINDEX) get the position just after the matching "]". */
-extern char *extract_arithmetic_subst (const char *, int *);
+extern char *extract_arithmetic_subst (const char *, size_t *);
 
 #if defined (PROCESS_SUBSTITUTION)
 /* Extract the <( or >( construct in STRING, and return a new string.
    Start extracting at (SINDEX) as if we had just seen "<(".
    Make (SINDEX) get the position just after the matching ")". */
-extern char *extract_process_subst (const char *, char *, int *, int);
+extern char *extract_process_subst (const char *, char *, size_t *, int);
 #endif /* PROCESS_SUBSTITUTION */
 
 /* Extract the name of the variable to bind to from the assignment string. */
@@ -303,7 +303,7 @@ extern void reap_procsubs (void);
 extern WORD_LIST *list_string_with_quotes (char *);
 
 #if defined (ARRAY_VARS)
-extern char *extract_array_assignment_list (const char *, int *);
+extern char *extract_array_assignment_list (const char *, size_t *);
 #endif
 
 #if defined (COND_COMMAND)