diff options
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ash.c | 81 |
1 files changed, 21 insertions, 60 deletions
diff --git a/shell/ash.c b/shell/ash.c index dcac4fe04..6befe0fd3 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -5687,7 +5687,7 @@ removerecordregions(int endoff) return; if (ifsfirst.endoff > endoff) { - while (ifsfirst.next != NULL) { + while (ifsfirst.next) { struct ifsregion *ifsp; INT_OFF; ifsp = ifsfirst.next->next; @@ -5695,9 +5695,9 @@ removerecordregions(int endoff) ifsfirst.next = ifsp; INT_ON; } - if (ifsfirst.begoff > endoff) + if (ifsfirst.begoff > endoff) { ifslastp = NULL; - else { + } else { ifslastp = &ifsfirst; ifsfirst.endoff = endoff; } @@ -5706,8 +5706,8 @@ removerecordregions(int endoff) ifslastp = &ifsfirst; while (ifslastp->next && ifslastp->next->begoff < endoff) - ifslastp=ifslastp->next; - while (ifslastp->next != NULL) { + ifslastp = ifslastp->next; + while (ifslastp->next) { struct ifsregion *ifsp; INT_OFF; ifsp = ifslastp->next->next; @@ -5884,9 +5884,9 @@ expbackq(union node *cmd, int quoted, int quotes) if (quoted == 0) recordregion(startloc, dest - (char *)stackblock(), 0); - TRACE(("evalbackq: size=%d: \"%.*s\"\n", - (dest - (char *)stackblock()) - startloc, - (dest - (char *)stackblock()) - startloc, + TRACE(("evalbackq: size:%d:'%.*s'\n", + (int)((dest - (char *)stackblock()) - startloc), + (int)((dest - (char *)stackblock()) - startloc), stackblock() + startloc)); } @@ -6105,42 +6105,16 @@ argstr(char *p, int flags, struct strlist *var_str_list) } static char * -scanleft(char *startp, char *rmesc, char *rmescend UNUSED_PARAM, char *str, int quotes, - int zero) -{ -// This commented out code was added by James Simmons <jsimmons@infradead.org> -// as part of a larger change when he added support for ${var/a/b}. -// However, it broke # and % operators: -// -//var=ababcdcd -// ok bad -//echo ${var#ab} abcdcd abcdcd -//echo ${var##ab} abcdcd abcdcd -//echo ${var#a*b} abcdcd ababcdcd (!) -//echo ${var##a*b} cdcd cdcd -//echo ${var#?} babcdcd ababcdcd (!) -//echo ${var##?} babcdcd babcdcd -//echo ${var#*} ababcdcd babcdcd (!) -//echo ${var##*} -//echo ${var%cd} ababcd ababcd -//echo ${var%%cd} ababcd abab (!) -//echo ${var%c*d} ababcd ababcd -//echo ${var%%c*d} abab ababcdcd (!) -//echo ${var%?} ababcdc ababcdc -//echo ${var%%?} ababcdc ababcdcd (!) -//echo ${var%*} ababcdcd ababcdcd -//echo ${var%%*} -// -// Commenting it back out helped. Remove it completely if it really -// is not needed. - - char *loc, *loc2; //, *full; +scanleft(char *startp, char *rmesc, char *rmescend UNUSED_PARAM, + char *pattern, int quotes, int zero) +{ + char *loc, *loc2; char c; loc = startp; loc2 = rmesc; do { - int match; // = strlen(str); + int match; const char *s = loc2; c = *loc2; @@ -6148,35 +6122,22 @@ scanleft(char *startp, char *rmesc, char *rmescend UNUSED_PARAM, char *str, int *loc2 = '\0'; s = rmesc; } - match = pmatch(str, s); // this line was deleted - -// // chop off end if its '*' -// full = strrchr(str, '*'); -// if (full && full != str) -// match--; -// -// // If str starts with '*' replace with s. -// if ((*str == '*') && strlen(s) >= match) { -// full = xstrdup(s); -// strncpy(full+strlen(s)-match+1, str+1, match-1); -// } else -// full = xstrndup(str, match); -// match = strncmp(s, full, strlen(full)); -// free(full); -// + match = pmatch(pattern, s); + *loc2 = c; - if (match) // if (!match) + if (match) return loc; if (quotes && (unsigned char)*loc == CTLESC) loc++; loc++; loc2++; } while (c); - return 0; + return NULL; } static char * -scanright(char *startp, char *rmesc, char *rmescend, char *pattern, int quotes, int match_at_start) +scanright(char *startp, char *rmesc, char *rmescend, + char *pattern, int quotes, int match_at_start) { #if !ENABLE_ASH_OPTIMIZE_FOR_SIZE int try2optimize = match_at_start; @@ -6242,7 +6203,7 @@ scanright(char *startp, char *rmesc, char *rmescend, char *pattern, int quotes, } } } - return 0; + return NULL; } static void varunset(const char *, const char *, const char *, int) NORETURN; @@ -6262,7 +6223,7 @@ varunset(const char *end, const char *var, const char *umsg, int varflags) msg = umsg; } } - ash_msg_and_raise_error("%.*s: %s%s", end - var - 1, var, msg, tail); + ash_msg_and_raise_error("%.*s: %s%s", (int)(end - var - 1), var, msg, tail); } #if ENABLE_ASH_BASH_COMPAT |