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