Alexandre Julliard : sfnt2fon: Avoid using getopt_long().

Alexandre Julliard julliard at winehq.org
Tue Oct 5 15:51:41 CDT 2021


Module: wine
Branch: master
Commit: e0ef12241be91b25aefd66e9c6979dca404357c3
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=e0ef12241be91b25aefd66e9c6979dca404357c3

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Oct  5 11:52:53 2021 +0200

sfnt2fon: Avoid using getopt_long().

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 tools/sfnt2fon/sfnt2fon.c | 85 ++++++++++++++++++++++-------------------------
 1 file changed, 39 insertions(+), 46 deletions(-)

diff --git a/tools/sfnt2fon/sfnt2fon.c b/tools/sfnt2fon/sfnt2fon.c
index fe8f33103c7..303293c18e5 100644
--- a/tools/sfnt2fon/sfnt2fon.c
+++ b/tools/sfnt2fon/sfnt2fon.c
@@ -27,9 +27,6 @@
 #include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
-#ifdef HAVE_GETOPT_H
-# include <getopt.h>
-#endif
 
 #ifdef HAVE_FREETYPE
 
@@ -438,9 +435,11 @@ static const char *output_name;
 
 static FT_Library ft_library;
 
-static void usage(char **argv)
+static const char *argv0;
+
+static void usage(void)
 {
-    fprintf(stderr, "%s [options] input.ttf ppem,enc,avg_width ...\n", argv[0]);
+    fprintf(stderr, "%s [options] input.ttf ppem,enc,avg_width ...\n", argv0);
     fprintf(stderr, "Options:\n");
     fprintf(stderr, "  -h       Display help\n" );
     fprintf(stderr, "  -d char  Set the font default char\n" );
@@ -825,41 +824,36 @@ static void write_fontinfo( const struct fontinfo *info, FILE *fp )
     fwrite( info->data, info->hdr.dfSize - info->hdr.fi.dfBitsOffset, 1, fp );
 }
 
-/* parse options from the argv array and remove all the recognized ones */
-static char **parse_options( int argc, char **argv )
+static void option_callback( int optc, char *optarg )
 {
-    int optc;
-
-    while ((optc = getopt_long( argc, argv, "d:ho:qr:s", NULL, NULL )) != -1)
+    switch(optc)
     {
-        switch(optc)
-        {
-        case 'd':
-            option_defchar = atoi( optarg );
-            break;
-        case 'o':
-            option_output = xstrdup( optarg );
-            break;
-        case 'q':
-            option_quiet = 1;
-            break;
-        case 'r':
-            option_dpi = atoi( optarg );
-            break;
-        case 's':
-            option_fnt_mode = 1;
-            break;
-        case 'h':
-            usage(argv);
-            exit(0);
-        case '?':
-            usage(argv);
-            exit(1);
-        }
+    case 'd':
+        option_defchar = atoi( optarg );
+        break;
+    case 'o':
+        option_output = xstrdup( optarg );
+        break;
+    case 'q':
+        option_quiet = 1;
+        break;
+    case 'r':
+        option_dpi = atoi( optarg );
+        break;
+    case 's':
+        option_fnt_mode = 1;
+        break;
+    case 'h':
+        usage();
+        exit(0);
+    case '?':
+        fprintf( stderr, "%s: %s\n\n", argv0, optarg );
+        usage();
+        exit(1);
     }
-    return &argv[optind];
 }
 
+
 int main(int argc, char **argv)
 {
     int i, j;
@@ -875,18 +869,19 @@ int main(int argc, char **argv)
     NE_TYPEINFO rc_type;
     NE_NAMEINFO rc_name;
     struct fontinfo **info;
-    char *input_file;
-    char **args;
+    const char *input_file;
+    struct strarray args;
     short tmp16;
 
-    args = parse_options( argc, argv );
+    argv0 = argv[0];
+    args = parse_options( argc, argv, "d:ho:qr:s", NULL, 0, option_callback );
 
-    input_file = *args++;
-    if (!input_file || !*args)
+    if (!args.count)
     {
-        usage(argv);
+        usage();
         exit(1);
     }
+    input_file = args.str[0];
 
     if(FT_Init_FreeType(&ft_library))
         error("ft init failure\n");
@@ -894,9 +889,7 @@ int main(int argc, char **argv)
     FT_Version.major=FT_Version.minor=FT_Version.patch=-1;
     FT_Library_Version(ft_library,&FT_Version.major,&FT_Version.minor,&FT_Version.patch);
 
-    num_files = 0;
-    while (args[num_files]) num_files++;
-
+    num_files = args.count - 1;
     if (option_fnt_mode && num_files > 1)
         error( "can only specify one font in .fnt mode\n" );
 
@@ -906,9 +899,9 @@ int main(int argc, char **argv)
         int ppem, enc, avg_width;
         const char *name;
 
-        if (sscanf( args[i], "%d,%d,%d", &ppem, &enc, &avg_width ) != 3)
+        if (sscanf( args.str[i + 1], "%d,%d,%d", &ppem, &enc, &avg_width ) != 3)
         {
-            usage(argv);
+            usage();
             exit(1);
         }
         if (!(info[i] = fill_fontinfo( input_file, ppem, enc, option_dpi, option_defchar, avg_width )))




More information about the wine-cvs mailing list