]> sourceware.org Git - newlib-cygwin.git/commitdiff
* newlib/libc/include/getopt.h (struct option): name field should be
authorCorinna Vinschen <corinna@vinschen.de>
Wed, 13 Nov 2013 09:09:45 +0000 (09:09 +0000)
committerCorinna Vinschen <corinna@vinschen.de>
Wed, 13 Nov 2013 09:09:45 +0000 (09:09 +0000)
"const char *".
* newlib/libc/stdlib/getopt.c (getopt_internal): Use fputs()/fputc()
instead of fprintf() to save code space.  Fix signed/unsigned
comparison.

newlib/ChangeLog
newlib/libc/include/getopt.h
newlib/libc/stdlib/getopt.c

index 65d47346774c911d9857c1168a50a08d0d1bd7f1..f0e82c6d681da0469ee9e59e0ebc8c5eb9769993 100644 (file)
@@ -1,3 +1,11 @@
+2013-11-13  Freddie Chopin  <freddie_chopin@op.pl>
+
+       * newlib/libc/include/getopt.h (struct option): name field should be
+       "const char *".
+       * newlib/libc/stdlib/getopt.c (getopt_internal): Use fputs()/fputc()
+       instead of fprintf() to save code space.  Fix signed/unsigned
+       comparison.
+
 2013-11-12  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
        * libc/libc/stdlib/getopt.c (getopt_internal): Fix NULL pointer access.
index ba8da4a7fde5bce14621e1c883b46da243791d2e..e12d253d47b6d6d7af9c47f1f1edd3a63ef77a41 100644 (file)
@@ -104,7 +104,7 @@ extern "C"
 /* types defined by this include file */
   struct option
   {
-    char *name;                        /* the name of the long option */
+    const char *name;          /* the name of the long option */
     int has_arg;               /* one of the above macros */
     int *flag;                 /* determines if getopt_long() returns a
                                 * value for a long option; if it is
index 2a4e7d4a282636a3e51809ede214a5f3462af052..2ab53aa6d20122d63402658d2ed00d1126aec582 100644 (file)
@@ -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,
@@ -301,7 +303,7 @@ getopt_internal (int argc, char *const argv[], const char *shortopts,
               match_chars) == 0)
            {
              /* do we have an exact match? */
-             if (match_chars == (int) (strlen (longopts[optindex].name)))
+             if (match_chars == strlen (longopts[optindex].name))
                {
                  longopt_match = optindex;
                  break;
@@ -315,12 +317,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 = '?');
                    }
                }
@@ -338,9 +342,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')
            {
@@ -377,17 +382,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 ? ':' : '\?';
This page took 0.058208 seconds and 5 git commands to generate.