Path: csiph.com!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail From: Tim Rentsch Newsgroups: comp.lang.c Subject: Re: Freeing a dynamically allocated array of structs within a struct in C Date: Thu, 30 Sep 2021 07:04:49 -0700 Organization: A noiseless patient Spider Lines: 63 Message-ID: <86lf3etb0e.fsf@linuxsc.com> References: <1348a974-54cd-47cf-bf40-7034feaa1f78n@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: reader02.eternal-september.org; posting-host="d4788905ada0446dfc3ae6b02ecc1355"; logging-data="15857"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19RASKw5EUqKwnpipoPijttBiXnTpvCSSY=" User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux) Cancel-Lock: sha1:bfVlu0va7k/stHfMsNnSVIGc6R4= sha1:BUW3onaM5KjrFSyXL8qBx9R2Lps= Xref: csiph.com comp.lang.c:162879 scott@slp53.sl.home (Scott Lurndal) writes: > if (cep->ce_splitargs) { > argcount = 0; > cp = line; > while (*cp != '\0') { > if (argcount == MAX_ARGCOUNT) { > fprintf(stdout, > "Error: More than %d arguments unsupported\n", > MAX_ARGCOUNT); > return 1; > } > while (*cp != '\0' && isspace(*cp)) cp++; > if (*cp == '\0') continue; > if (*cp == '"') { > in_quote = true; > cp++; > } > arglist[argcount++] = cp; > if (in_quote) { > while (*cp != '\0' && *cp != '"') cp++; > in_quote = false; > } else { > while (*cp != '\0' && !isspace(*cp)) cp++; > } > if (*cp == '\0') continue; > *cp++ = '\0'; > } > } else { > arglist[0] = command; > arglist[1] = line; > argcount = 2; > } int parse_arguments_failed( char *command, char *line ){ char *p = line; const int most = MAX_ARGCOUNT; argcount = 0; if( ! cep->ce_splitargs ){ arglist[ argcount++ ] = command; arglist[ argcount++ ] = line; return 0; } while( p = skip_over_spaces( p ), *p && argcount < most ){ if( *p == '"' ) p = skip_to_quote( arglist[ argcount++ ] = p+1 ); else p = skip_to_space( arglist[ argcount++ ] = p ); p = *p ? *p=0, p+1 : p; } if( *p == 0 ) return 0; fprintf( stderr, "Error: More than %d arguments unsupported\n", most ); return 1; } The three helper functions skip_over_spaces(), skip_to_quote(), and skip_to_space() are all very simple and can be written in one or two lines each.