[PATCH] getopt.c: use integer-only function fiprintf() to save code space
Freddie Chopin
freddie_chopin@op.pl
Fri Nov 8 17:39:00 GMT 2013
W dniu 2013-11-08 18:16, Gregory Pietsch pisze:
> The only problem with using fiprintf() is that it is non-standard. I've
> seen the error strings printed out with pure write() calls to stderr.
> The fputs/fputc idea is interesting. -- Gregory
You've forgot to CC the list, so I'm including it again.
Yes, fiprintf() is non-standard, but newlib has it, I see no option to
disable it, so in my opinion it's a safe change.
Using something more low-level (fputs()/fputc() or even write()) seems a
nice idea, but it will look a bit "wrong". For example take this line,
longest f[i]printf() call in getopt():
> fiprintf (stderr, "%s: option `%s' is ambiguous "
> "(could be `--%s' or `--%s')\n",
> argv[0],
> argv[data->optind],
> longopts[longopt_match].name,
> longopts[optindex].name);
To use fputs()/fputc() you'd need 8 separate calls:
> fputs(argv[0], stderr);
> fputs(": option `", stderr);
> fputs(argv[data->optind], stderr);
> fputs("' is ambiguous (could be `--", stderr);
> fputs(longopts[longopt_match].name, stderr);
> fputs("' or `--", stderr);
> fputs(longopts[optindex].name, stderr);
> fputs("')\n", stderr);
This is the longest and most complex message - others are smaller, but I
guess each would take 3-4 calls on average (some messages can probably
be reworded a bit to be easier to do this way). Fine for me (given the
huge code space and RAM saving), but I don't know whether it's fine with
newlib's maintainers (;
Regards,
FCh
More information about the Newlib
mailing list