From d18a3a20dbafc4023b1c636b4e9b4bb80902c1e8 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Wed, 25 Oct 2006 12:46:03 +0000 Subject: [PATCH] use skip_whitespace where appropriate --- editors/awk.c | 2 +- editors/sed.c | 167 +++++++++++++++++++++--------------------- miscutils/dc.c | 6 +- modutils/modprobe.c | 12 +-- networking/ifupdown.c | 9 +-- networking/wget.c | 2 +- shell/bbsh.c | 2 +- util-linux/mount.c | 3 +- 8 files changed, 98 insertions(+), 105 deletions(-) diff --git a/editors/awk.c b/editors/awk.c index e91c37678..b776dd796 100644 --- a/editors/awk.c +++ b/editors/awk.c @@ -1470,7 +1470,7 @@ static int awk_split(char *s, node *spl, char **slist) } } else { /* space split */ while (*s) { - while (isspace(*s)) s++; + s = skip_whitespace(s); if (! *s) break; n++; while (*s && !isspace(*s)) diff --git a/editors/sed.c b/editors/sed.c index 30f35ce22..e26141571 100644 --- a/editors/sed.c +++ b/editors/sed.c @@ -63,29 +63,29 @@ /* Each sed command turns into one of these structures. */ typedef struct sed_cmd_s { - /* Ordered by alignment requirements: currently 36 bytes on x86 */ + /* Ordered by alignment requirements: currently 36 bytes on x86 */ - /* address storage */ - regex_t *beg_match; /* sed -e '/match/cmd' */ - regex_t *end_match; /* sed -e '/match/,/end_match/cmd' */ - regex_t *sub_match; /* For 's/sub_match/string/' */ - int beg_line; /* 'sed 1p' 0 == apply commands to all lines */ - int end_line; /* 'sed 1,3p' 0 == one line only. -1 = last line ($) */ + /* address storage */ + regex_t *beg_match; /* sed -e '/match/cmd' */ + regex_t *end_match; /* sed -e '/match/,/end_match/cmd' */ + regex_t *sub_match; /* For 's/sub_match/string/' */ + int beg_line; /* 'sed 1p' 0 == apply commands to all lines */ + int end_line; /* 'sed 1,3p' 0 == one line only. -1 = last line ($) */ - FILE *file; /* File (sw) command writes to, -1 for none. */ - char *string; /* Data string for (saicytb) commands. */ + FILE *file; /* File (sw) command writes to, -1 for none. */ + char *string; /* Data string for (saicytb) commands. */ - unsigned short which_match; /* (s) Which match to replace (0 for all) */ + unsigned short which_match; /* (s) Which match to replace (0 for all) */ - /* Bitfields (gcc won't group them if we don't) */ - unsigned int invert:1; /* the '!' after the address */ - unsigned int in_match:1; /* Next line also included in match? */ - unsigned int no_newline:1; /* Last line written by (sw) had no '\n' */ - unsigned int sub_p:1; /* (s) print option */ + /* Bitfields (gcc won't group them if we don't) */ + unsigned int invert:1; /* the '!' after the address */ + unsigned int in_match:1; /* Next line also included in match? */ + unsigned int no_newline:1; /* Last line written by (sw) had no '\n' */ + unsigned int sub_p:1; /* (s) print option */ - /* GENERAL FIELDS */ - char cmd; /* The command char: abcdDgGhHilnNpPqrstwxy:={} */ - struct sed_cmd_s *next; /* Next command (linked list, NULL terminated) */ + /* GENERAL FIELDS */ + char cmd; /* The command char: abcdDgGhHilnNpPqrstwxy:={} */ + struct sed_cmd_s *next; /* Next command (linked list, NULL terminated) */ } sed_cmd_t; static const char *const semicolon_whitespace = "; \n\r\t\v"; @@ -162,7 +162,7 @@ void sed_free_and_close_stuff(void) static void cleanup_outname(void) { - if(bbg.outname) unlink(bbg.outname); + if(bbg.outname) unlink(bbg.outname); } /* strdup, replacing "\n" with '\n', and "\delimiter" with 'delimiter' */ @@ -343,36 +343,36 @@ static int parse_subst_cmd(sed_cmd_t *sed_cmd, char *substr) if(isspace(substr[idx])) continue; switch (substr[idx]) { - /* Replace all occurrences */ - case 'g': - if (match[0] != '^') sed_cmd->which_match = 0; - break; - /* Print pattern space */ - case 'p': - sed_cmd->sub_p = 1; - break; - /* Write to file */ - case 'w': - { - char *temp; - idx+=parse_file_cmd(sed_cmd,substr+idx,&temp); + /* Replace all occurrences */ + case 'g': + if (match[0] != '^') sed_cmd->which_match = 0; + break; + /* Print pattern space */ + case 'p': + sed_cmd->sub_p = 1; + break; + /* Write to file */ + case 'w': + { + char *temp; + idx+=parse_file_cmd(sed_cmd,substr+idx,&temp); - break; - } - /* Ignore case (gnu exension) */ - case 'I': - cflags |= REG_ICASE; - break; - /* Comment */ - case '#': - while(substr[++idx]); - /* Fall through */ - /* End of command */ - case ';': - case '}': - goto out; - default: - bb_error_msg_and_die("bad option in substitution expression"); + break; + } + /* Ignore case (gnu exension) */ + case 'I': + cflags |= REG_ICASE; + break; + /* Comment */ + case '#': + while(substr[++idx]); + /* Fall through */ + /* End of command */ + case ';': + case '}': + goto out; + default: + bb_error_msg_and_die("bad option in substitution expression"); } } out: @@ -420,7 +420,7 @@ static char *parse_cmd_args(sed_cmd_t *sed_cmd, char *cmdstr) } else if (strchr(":btT", sed_cmd->cmd)) { int length; - while(isspace(*cmdstr)) cmdstr++; + cmdstr = skip_whitespace(cmdstr); length = strcspn(cmdstr, semicolon_whitespace); if (length) { sed_cmd->string = xstrndup(cmdstr, length); @@ -517,7 +517,7 @@ static void add_cmd(char *cmdstr) } /* skip whitespace before the command */ - while (isspace(*cmdstr)) cmdstr++; + cmdstr = skip_whitespace(cmdstr); /* Check for inversion flag */ if (*cmdstr == '!') { @@ -525,7 +525,7 @@ static void add_cmd(char *cmdstr) cmdstr++; /* skip whitespace before the command */ - while (isspace(*cmdstr)) cmdstr++; + cmdstr = skip_whitespace(cmdstr); } /* last part (mandatory) will be a command */ @@ -724,7 +724,7 @@ static int puts_maybe_newline(char *s, FILE *file, int missing_newline, int no_n fputs(s,file); if(!no_newline) fputc('\n',file); - if(ferror(file)) { + if(ferror(file)) { xfunc_error_retval = 4; /* It's what gnu sed exits with... */ bb_error_msg_and_die(bb_msg_write_error); } @@ -1167,40 +1167,43 @@ int sed_main(int argc, char **argv) FILE *file; for (i = optind; i < argc; i++) { + struct stat statbuf; + int nonstdoutfd; + if(!strcmp(argv[i], "-") && !bbg.in_place) { add_input_file(stdin); process_files(); - } else { - file = bb_wfopen(argv[i], "r"); - if (file) { - if(bbg.in_place) { - struct stat statbuf; - int nonstdoutfd; - - bbg.outname=xstrndup(argv[i],strlen(argv[i])+6); - strcat(bbg.outname,"XXXXXX"); - if(-1==(nonstdoutfd=mkstemp(bbg.outname))) - bb_error_msg_and_die("no temp file"); - bbg.nonstdout=fdopen(nonstdoutfd,"w"); - - /* Set permissions of output file */ - - fstat(fileno(file),&statbuf); - fchmod(nonstdoutfd,statbuf.st_mode); - add_input_file(file); - process_files(); - fclose(bbg.nonstdout); - - bbg.nonstdout=stdout; - unlink(argv[i]); - rename(bbg.outname,argv[i]); - free(bbg.outname); - bbg.outname=0; - } else add_input_file(file); - } else { - status = EXIT_FAILURE; - } + continue; } + file = bb_wfopen(argv[i], "r"); + if (!file) { + status = EXIT_FAILURE; + continue; + } + if(!bbg.in_place) { + add_input_file(file); + continue; + } + + bbg.outname=xstrndup(argv[i],strlen(argv[i])+6); + strcat(bbg.outname,"XXXXXX"); + if(-1==(nonstdoutfd=mkstemp(bbg.outname))) + bb_error_msg_and_die("no temp file"); + bbg.nonstdout=fdopen(nonstdoutfd,"w"); + + /* Set permissions of output file */ + + fstat(fileno(file),&statbuf); + fchmod(nonstdoutfd,statbuf.st_mode); + add_input_file(file); + process_files(); + fclose(bbg.nonstdout); + + bbg.nonstdout=stdout; + unlink(argv[i]); + rename(bbg.outname,argv[i]); + free(bbg.outname); + bbg.outname=0; } if(bbg.input_file_count>bbg.current_input_file) process_files(); } diff --git a/miscutils/dc.c b/miscutils/dc.c index fd5390143..7b6405754 100644 --- a/miscutils/dc.c +++ b/miscutils/dc.c @@ -179,10 +179,10 @@ static void stack_machine(const char *argument) */ static char *get_token(char **buffer) { - char *start = NULL; - char *current = *buffer; + char *start = NULL; + char *current; - while (isspace(*current)) { current++; } + current = skip_whitespace(*buffer); if (*current != 0) { start = current; while (!isspace(*current) && *current != 0) { current++; } diff --git a/modutils/modprobe.c b/modutils/modprobe.c index ba24791f9..5d62ae5df 100644 --- a/modutils/modprobe.c +++ b/modutils/modprobe.c @@ -76,15 +76,13 @@ static int parse_tag_value ( char *buffer, char **ptag, char **pvalue ) { char *tag, *value; - while ( isspace ( *buffer )) - buffer++; + buffer = skip_whitespace ( buffer ); tag = value = buffer; while ( !isspace ( *value )) if (!*value) return 0; else value++; *value++ = 0; - while ( isspace ( *value )) - value++; + value = skip_whitespace ( value ); if (!*value) return 0; *ptag = tag; @@ -311,11 +309,9 @@ static void include_conf ( struct dep_t **first, struct dep_t **current, char *b } } else if (( strncmp ( buffer, "include", 7 ) == 0 ) && isspace ( buffer [7] )) { + int fdi; char *filename; - int fdi; char *filename = buffer + 8; - - while ( isspace ( *filename )) - filename++; + filename = skip_whitespace ( buffer + 8 ); if (( fdi = open ( filename, O_RDONLY )) >= 0 ) { include_conf(first, current, buffer, buflen, fdi); diff --git a/networking/ifupdown.c b/networking/ifupdown.c index 45407f9f4..ede2f8997 100644 --- a/networking/ifupdown.c +++ b/networking/ifupdown.c @@ -572,10 +572,7 @@ static char *next_word(char **buf) } /* Skip over leading whitespace */ - word = *buf; - while (isspace(*word)) { - ++word; - } + word = skip_whitespace(*buf); /* Skip over comments */ if (*word == '#') { @@ -712,9 +709,7 @@ static struct interfaces_file_t *read_interfaces(const char *filename) } /* ship any trailing whitespace */ - while (isspace(*buf_ptr)) { - ++buf_ptr; - } + buf_ptr = skip_whitespace(buf_ptr); if (buf_ptr[0] != '\0') { bb_error_msg("too many parameters \"%s\"", buf); diff --git a/networking/wget.c b/networking/wget.c index a0d3e15e8..090b58d9a 100644 --- a/networking/wget.c +++ b/networking/wget.c @@ -302,7 +302,7 @@ int wget_main(int argc, char **argv) s = buf; while (*s != '\0' && !isspace(*s)) ++s; - while (isspace(*s)) ++s; + s = skip_whitespace(s); // FIXME: no error check // xatou wouldn't work: "200 OK" status = atoi(s); diff --git a/shell/bbsh.c b/shell/bbsh.c index 77e186d35..791983a3a 100644 --- a/shell/bbsh.c +++ b/shell/bbsh.c @@ -119,7 +119,7 @@ static char *parse_pipeline(char *cmdline, struct pipeline *line) char *end; // Skip leading whitespace and detect end of line. - while (isspace(*start)) start++; + start = skip_whitespace(start); if (!*start || *start=='#') { if (ENABLE_BBSH_JOBCTL) line->cmdlinelen = start-cmdline; return 0; diff --git a/util-linux/mount.c b/util-linux/mount.c index 5ced48fea..2c5e23177 100644 --- a/util-linux/mount.c +++ b/util-linux/mount.c @@ -203,8 +203,7 @@ static llist_t *get_block_backed_filesystems(void) while ((buf = xmalloc_getline(f)) != 0) { if (!strncmp(buf, "nodev", 5) && isspace(buf[5])) continue; - fs = buf; - while (isspace(*fs)) fs++; + fs = skip_whitespace(buf); if (*fs=='#' || *fs=='*' || !*fs) continue; llist_add_to_end(&list, xstrdup(fs));