From 7b66269186dcd32c32cda4b9f67a336a0f626510 Mon Sep 17 00:00:00 2001 From: Freddie Chopin Date: Fri, 8 Nov 2013 20:35:00 +0100 Subject: [PATCH 2/2] getopt.c: use fputs()/fputc() instead of fprintf() to save code space --- newlib/libc/stdlib/getopt.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/newlib/libc/stdlib/getopt.c b/newlib/libc/stdlib/getopt.c index c2bd060..7cd4207 100644 --- a/newlib/libc/stdlib/getopt.c +++ b/newlib/libc/stdlib/getopt.c @@ -177,7 +177,9 @@ write_globals (struct getopt_data *data) optwhere = data->optwhere; } -/* getopt_internal: the function that does all the dirty work */ +/* getopt_internal: the function that does all the dirty work + NOTE: to reduce the code and RAM footprint this function uses + fputs()/fputc() to do output to stderr instead of fprintf(). */ static int getopt_internal (int argc, char *const argv[], const char *shortopts, const struct option *longopts, int *longind, int only, @@ -311,12 +313,14 @@ getopt_internal (int argc, char *const argv[], const char *shortopts, { /* we have ambiguous options */ if (data->opterr) - fprintf (stderr, "%s: option `%s' is ambiguous " - "(could be `--%s' or `--%s')\n", - argv[0], - argv[data->optind], - longopts[longopt_match].name, - longopts[optindex].name); + 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); return (data->optopt = '?'); } } @@ -334,9 +338,10 @@ getopt_internal (int argc, char *const argv[], const char *shortopts, { /* couldn't find option in shortopts */ if (data->opterr) - fprintf (stderr, - "%s: invalid option -- `-%c'\n", - argv[0], argv[data->optind][data->optwhere]); + fputs (argv[0], stderr); + fputs (": invalid option -- `-", stderr); + fputc (argv[data->optind][data->optwhere], stderr); + fputs ("'\n", stderr); data->optwhere++; if (argv[data->optind][data->optwhere] == '\0') { @@ -373,17 +378,20 @@ getopt_internal (int argc, char *const argv[], const char *shortopts, { if (data->opterr) { - fprintf (stderr, "%s: argument required for option `", argv[0]); + fputs (argv[0], stderr); + fputs (": argument required for option `-", stderr); if (longopt_match >= 0) { - fprintf (stderr, "--%s'\n", longopts[longopt_match].name); + fputc ('-', stderr); + fputs (longopts[longopt_match].name, stderr); data->optopt = initial_colon ? ':' : '\?'; } else { - fprintf (stderr, "-%c'\n", *cp); + fputc (*cp, stderr); data->optopt = *cp; } + fputs ("'\n", stderr); } data->optind++; return initial_colon ? ':' : '\?'; -- 1.8.3.msysgit.0