aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2018-01-04 12:56:04 +0200
committerRadu Voicilas <radu.voicilas@gmail.com>2018-01-04 12:56:04 +0200
commit9f9d8ba35ea25849ab39e48eff77a48d89fc027c (patch)
tree162c8ab11a82894adadf7338e76e0701b2aba3ad
parent08a521241d968456afab170792dcd346ca8d4fb7 (diff)
downloadinotify-tools-integrate-next-into-master.zip
inotify-tools-integrate-next-into-master.tar.gz
inotify-tools-integrate-next-into-master.tar.bz2
Convert long options to an array for easier managementintegrate-next-into-master
Writing the array at runtime makes maintenance a huge pain -- both in terms of adding new options and in tweaking old ones. Plus, it adds runtime overhead. Sticking the old structure into the rodata section saves on all of that and allows the data to be shared among processes.
-rw-r--r--src/inotifywait.c129
-rw-r--r--src/inotifywatch.c98
2 files changed, 50 insertions, 177 deletions
diff --git a/src/inotifywait.c b/src/inotifywait.c
index df18843..6ec5fe4 100644
--- a/src/inotifywait.c
+++ b/src/inotifywait.c
@@ -448,11 +448,8 @@ bool parse_opts(
assert( outfile ); assert( exc_regex ); assert( exc_iregex );
assert( inc_regex ); assert( inc_iregex );
- // Short options
- char * opt_string = "mrhcdsqt:fo:e:";
-
- // Construct array
- struct option long_opts[19];
+ // Settings for options
+ int new_event;
// How many times --exclude has been specified
unsigned int exclude_count = 0;
@@ -462,104 +459,34 @@ bool parse_opts(
const char *regex_warning = "only the last option will be taken into consideration.\n";
- // --help
- long_opts[0].name = "help";
- long_opts[0].has_arg = 0;
- long_opts[0].flag = NULL;
- long_opts[0].val = (int)'h';
- // --event
- long_opts[1].name = "event";
- long_opts[1].has_arg = 1;
- long_opts[1].flag = NULL;
- long_opts[1].val = (int)'e';
- int new_event;
- // --monitor
- long_opts[2].name = "monitor";
- long_opts[2].has_arg = 0;
- long_opts[2].flag = NULL;
- long_opts[2].val = (int)'m';
- // --quiet
- long_opts[3].name = "quiet";
- long_opts[3].has_arg = 0;
- long_opts[3].flag = NULL;
- long_opts[3].val = (int)'q';
- // --timeout
- long_opts[4].name = "timeout";
- long_opts[4].has_arg = 1;
- long_opts[4].flag = NULL;
- long_opts[4].val = (int)'t';
- // --filename
- long_opts[5].name = "filename";
- long_opts[5].has_arg = 0;
- long_opts[5].flag = NULL;
- long_opts[5].val = (int)'f';
- // --recursive
- long_opts[6].name = "recursive";
- long_opts[6].has_arg = 0;
- long_opts[6].flag = NULL;
- long_opts[6].val = (int)'r';
- // --csv
- long_opts[7].name = "csv";
- long_opts[7].has_arg = 0;
- long_opts[7].flag = NULL;
- long_opts[7].val = (int)'c';
- // --daemon
- long_opts[8].name = "daemon";
- long_opts[8].has_arg = 0;
- long_opts[8].flag = NULL;
- long_opts[8].val = (int)'d';
- // --syslog
- long_opts[9].name = "syslog";
- long_opts[9].has_arg = 0;
- long_opts[9].flag = NULL;
- long_opts[9].val = (int)'s';
- // --format
- long_opts[10].name = "format";
- long_opts[10].has_arg = 1;
- long_opts[10].flag = NULL;
- long_opts[10].val = (int)'n';
// format with trailing newline
static char * newlineformat;
- // --timefmt
- long_opts[11].name = "timefmt";
- long_opts[11].has_arg = 1;
- long_opts[11].flag = NULL;
- long_opts[11].val = (int)'i';
- // --fromfile
- long_opts[12].name = "fromfile";
- long_opts[12].has_arg = 1;
- long_opts[12].flag = NULL;
- long_opts[12].val = (int)'z';
- // --outfile
- long_opts[13].name = "outfile";
- long_opts[13].has_arg = 1;
- long_opts[13].flag = NULL;
- long_opts[13].val = (int)'o';
- // --exclude
- long_opts[14].name = "exclude";
- long_opts[14].has_arg = 1;
- long_opts[14].flag = NULL;
- long_opts[14].val = (int)'a';
- // --excludei
- long_opts[15].name = "excludei";
- long_opts[15].has_arg = 1;
- long_opts[15].flag = NULL;
- long_opts[15].val = (int)'b';
- // --include
- long_opts[16].name = "include";
- long_opts[16].has_arg = 1;
- long_opts[16].flag = NULL;
- long_opts[16].val = (int)'j';
- // --includei
- long_opts[17].name = "includei";
- long_opts[17].has_arg = 1;
- long_opts[17].flag = NULL;
- long_opts[17].val = (int)'k';
- // Empty last element
- long_opts[18].name = 0;
- long_opts[18].has_arg = 0;
- long_opts[18].flag = 0;
- long_opts[18].val = 0;
+
+ // Short options
+ static const char opt_string[] = "mrhcdsqt:fo:e:";
+
+ // Long options
+ static const struct option long_opts[] = {
+ {"help", no_argument, NULL, 'h'},
+ {"event", required_argument, NULL, 'e'},
+ {"monitor", no_argument, NULL, 'm'},
+ {"quiet", no_argument, NULL, 'q'},
+ {"timeout", required_argument, NULL, 't'},
+ {"filename", no_argument, NULL, 'f'},
+ {"recursive", no_argument, NULL, 'r'},
+ {"csv", no_argument, NULL, 'c'},
+ {"daemon", no_argument, NULL, 'd'},
+ {"syslog", no_argument, NULL, 's'},
+ {"format", required_argument, NULL, 'n'},
+ {"timefmt", required_argument, NULL, 'i'},
+ {"fromfile", required_argument, NULL, 'z'},
+ {"outfile", required_argument, NULL, 'o'},
+ {"exclude", required_argument, NULL, 'a'},
+ {"excludei", required_argument, NULL, 'b'},
+ {"include", required_argument, NULL, 'j'},
+ {"includei", required_argument, NULL, 'k'},
+ {NULL, 0, 0, 0},
+ };
// Get first option
char curr_opt = getopt_long(*argc, *argv, opt_string, long_opts, NULL);
diff --git a/src/inotifywatch.c b/src/inotifywatch.c
index 3219f9f..e3afd29 100644
--- a/src/inotifywatch.c
+++ b/src/inotifywatch.c
@@ -402,84 +402,30 @@ bool parse_opts(
assert( fromfile ); assert( exc_regex ); assert( exc_iregex );
assert( inc_regex ); assert( inc_iregex );
- // Short options
- char * opt_string = "hra:d:zve:t:";
-
- // Construct array
- struct option long_opts[14];
-
- // --help
- long_opts[0].name = "help";
- long_opts[0].has_arg = 0;
- long_opts[0].flag = NULL;
- long_opts[0].val = (int)'h';
- // --event
- long_opts[1].name = "event";
- long_opts[1].has_arg = 1;
- long_opts[1].flag = NULL;
- long_opts[1].val = (int)'e';
+ // Settings for options
int new_event;
- // --timeout
- long_opts[2].name = "timeout";
- long_opts[2].has_arg = 1;
- long_opts[2].flag = NULL;
- long_opts[2].val = (int)'t';
- // --verbose
- long_opts[3].name = "verbose";
- long_opts[3].has_arg = 0;
- long_opts[3].flag = NULL;
- long_opts[3].val = (int)'v';
- // --nonzero
- long_opts[4].name = "zero";
- long_opts[4].has_arg = 0;
- long_opts[4].flag = NULL;
- long_opts[4].val = (int)'z';
- // --ascending
- long_opts[5].name = "ascending";
- long_opts[5].has_arg = 1;
- long_opts[5].flag = NULL;
- long_opts[5].val = (int)'a';
bool sort_set = false;
- // --descending
- long_opts[6].name = "descending";
- long_opts[6].has_arg = 1;
- long_opts[6].flag = NULL;
- long_opts[6].val = (int)'d';
- // --recursive
- long_opts[7].name = "recursive";
- long_opts[7].has_arg = 0;
- long_opts[7].flag = NULL;
- long_opts[7].val = (int)'r';
- // --fromfile
- long_opts[8].name = "fromfile";
- long_opts[8].has_arg = 1;
- long_opts[8].flag = NULL;
- long_opts[8].val = (int)'o';
- // --exclude
- long_opts[9].name = "exclude";
- long_opts[9].has_arg = 1;
- long_opts[9].flag = NULL;
- long_opts[9].val = (int)'c';
- // --excludei
- long_opts[10].name = "excludei";
- long_opts[10].has_arg = 1;
- long_opts[10].flag = NULL;
- long_opts[10].val = (int)'b';
- // --include
- long_opts[11].name = "include";
- long_opts[11].has_arg = 1;
- long_opts[11].flag = NULL;
- long_opts[11].val = (int)'j';
- // --includei
- long_opts[12].name = "includei";
- long_opts[12].has_arg = 1;
- long_opts[12].flag = NULL;
- long_opts[12].val = (int)'k';
- // Empty last element
- long_opts[13].name = 0;
- long_opts[13].has_arg = 0;
- long_opts[13].flag = 0;
- long_opts[13].val = 0;
+
+ // Short options
+ static const char opt_string[] = "hra:d:zve:t:";
+
+ // Construct array
+ static const struct option long_opts[] = {
+ {"help", no_argument, NULL, 'h'},
+ {"event", required_argument, NULL, 'e'},
+ {"timeout", required_argument, NULL, 't'},
+ {"verbose", no_argument, NULL, 'v'},
+ {"zero", no_argument, NULL, 'z'},
+ {"ascending", required_argument, NULL, 'a'},
+ {"descending", required_argument, NULL, 'd'},
+ {"recursive", no_argument, NULL, 'r'},
+ {"fromfile", required_argument, NULL, 'o'},
+ {"exclude", required_argument, NULL, 'c'},
+ {"excludei", required_argument, NULL, 'b'},
+ {"include", required_argument, NULL, 'j'},
+ {"includei", required_argument, NULL, 'k'},
+ {NULL, 0, 0, 0},
+ };
// Get first option
char curr_opt = getopt_long(*argc, *argv, opt_string, long_opts, NULL);