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.