Annotation of /trunk/file/patches/file-5.23-fix-bug-with-long-options.patch
Parent Directory | Revision Log
Revision 2583 -
(hide annotations)
(download)
Thu Jun 18 06:44:53 2015 UTC (9 years, 3 months ago) by niro
File size: 3969 byte(s)
Thu Jun 18 06:44:53 2015 UTC (9 years, 3 months ago) by niro
File size: 3969 byte(s)
-fix option parsing bug
1 | niro | 2583 | From 21f9d5f0e0340ada998f7f9d316368c7167a4afa Mon Sep 17 00:00:00 2001 |
2 | From: Christos Zoulas <christos@zoulas.com> | ||
3 | Date: Thu, 11 Jun 2015 12:52:32 +0000 | ||
4 | Subject: [PATCH] Fix bug with long options and explicitly number them to avoid | ||
5 | this in the future. | ||
6 | |||
7 | --- | ||
8 | src/file.c | 45 +++++++++++++++++++++++---------------------- | ||
9 | src/file_opts.h | 10 +++++----- | ||
10 | 2 files changed, 28 insertions(+), 27 deletions(-) | ||
11 | |||
12 | diff --git a/src/file.c b/src/file.c | ||
13 | index f60dde0..c700f66 100644 | ||
14 | --- a/src/file.c | ||
15 | +++ b/src/file.c | ||
16 | @@ -89,10 +89,15 @@ private int /* Global command-line options */ | ||
17 | |||
18 | private const char *separator = ":"; /* Default field separator */ | ||
19 | private const struct option long_options[] = { | ||
20 | +#define OPT_HELP 1 | ||
21 | +#define OPT_APPLE 2 | ||
22 | +#define OPT_EXTENSIONS 3 | ||
23 | +#define OPT_MIME_TYPE 4 | ||
24 | +#define OPT_MIME_ENCODING 5 | ||
25 | #define OPT(shortname, longname, opt, doc) \ | ||
26 | {longname, opt, NULL, shortname}, | ||
27 | -#define OPT_LONGONLY(longname, opt, doc) \ | ||
28 | - {longname, opt, NULL, 0}, | ||
29 | +#define OPT_LONGONLY(longname, opt, doc, id) \ | ||
30 | + {longname, opt, NULL, id}, | ||
31 | #include "file_opts.h" | ||
32 | #undef OPT | ||
33 | #undef OPT_LONGONLY | ||
34 | @@ -182,24 +187,20 @@ main(int argc, char *argv[]) | ||
35 | while ((c = getopt_long(argc, argv, OPTSTRING, long_options, | ||
36 | &longindex)) != -1) | ||
37 | switch (c) { | ||
38 | - case 0 : | ||
39 | - switch (longindex) { | ||
40 | - case 0: | ||
41 | - help(); | ||
42 | - break; | ||
43 | - case 10: | ||
44 | - flags |= MAGIC_APPLE; | ||
45 | - break; | ||
46 | - case 11: | ||
47 | - flags |= MAGIC_EXTENSION; | ||
48 | - break; | ||
49 | - case 12: | ||
50 | - flags |= MAGIC_MIME_TYPE; | ||
51 | - break; | ||
52 | - case 13: | ||
53 | - flags |= MAGIC_MIME_ENCODING; | ||
54 | - break; | ||
55 | - } | ||
56 | + case OPT_HELP: | ||
57 | + help(); | ||
58 | + break; | ||
59 | + case OPT_APPLE: | ||
60 | + flags |= MAGIC_APPLE; | ||
61 | + break; | ||
62 | + case OPT_EXTENSIONS: | ||
63 | + flags |= MAGIC_EXTENSION; | ||
64 | + break; | ||
65 | + case OPT_MIME_TYPE: | ||
66 | + flags |= MAGIC_MIME_TYPE; | ||
67 | + break; | ||
68 | + case OPT_MIME_ENCODING: | ||
69 | + flags |= MAGIC_MIME_ENCODING; | ||
70 | break; | ||
71 | case '0': | ||
72 | nulsep = 1; | ||
73 | @@ -595,7 +596,7 @@ help(void) | ||
74 | #define OPT(shortname, longname, opt, doc) \ | ||
75 | fprintf(stdout, " -%c, --" longname, shortname), \ | ||
76 | docprint(doc); | ||
77 | -#define OPT_LONGONLY(longname, opt, doc) \ | ||
78 | +#define OPT_LONGONLY(longname, opt, doc, id) \ | ||
79 | fprintf(stdout, " --" longname), \ | ||
80 | docprint(doc); | ||
81 | #include "file_opts.h" | ||
82 | diff --git a/src/file_opts.h b/src/file_opts.h | ||
83 | index 036505f..2e30d06 100644 | ||
84 | --- a/src/file_opts.h | ||
85 | +++ b/src/file_opts.h | ||
86 | @@ -12,7 +12,7 @@ | ||
87 | * switch statement! | ||
88 | */ | ||
89 | |||
90 | -OPT_LONGONLY("help", 0, " display this help and exit\n") | ||
91 | +OPT_LONGONLY("help", 0, " display this help and exit\n", OPT_HELP) | ||
92 | OPT('v', "version", 0, " output version information and exit\n") | ||
93 | OPT('m', "magic-file", 1, " LIST use LIST as a colon-separated list of magic\n" | ||
94 | " number files\n") | ||
95 | @@ -29,10 +29,10 @@ OPT('f', "files-from", 1, " FILE read the filenames to be examined from FIL | ||
96 | OPT('F', "separator", 1, " STRING use string as separator instead of `:'\n") | ||
97 | OPT('i', "mime", 0, " output MIME type strings (--mime-type and\n" | ||
98 | " --mime-encoding)\n") | ||
99 | -OPT_LONGONLY("apple", 0, " output the Apple CREATOR/TYPE\n") | ||
100 | -OPT_LONGONLY("extension", 0, " output a slash-separated list of extnsions\n") | ||
101 | -OPT_LONGONLY("mime-type", 0, " output the MIME type\n") | ||
102 | -OPT_LONGONLY("mime-encoding", 0, " output the MIME encoding\n") | ||
103 | +OPT_LONGONLY("apple", 0, " output the Apple CREATOR/TYPE\n", OPT_APPLE) | ||
104 | +OPT_LONGONLY("extension", 0, " output a slash-separated list of extensions\n", OPT_EXTENSIONS) | ||
105 | +OPT_LONGONLY("mime-type", 0, " output the MIME type\n", OPT_MIME_TYPE) | ||
106 | +OPT_LONGONLY("mime-encoding", 0, " output the MIME encoding\n", OPT_MIME_ENCODING) | ||
107 | OPT('k', "keep-going", 0, " don't stop at the first match\n") | ||
108 | OPT('l', "list", 0, " list magic strength\n") | ||
109 | #ifdef S_IFLNK |