diff options
author | Mike Frysinger <vapier@gentoo.org> | 2018-01-04 12:56:04 +0200 |
---|---|---|
committer | Radu Voicilas <radu.voicilas@gmail.com> | 2018-01-04 12:56:04 +0200 |
commit | 9f9d8ba35ea25849ab39e48eff77a48d89fc027c (patch) | |
tree | 162c8ab11a82894adadf7338e76e0701b2aba3ad | |
parent | 08a521241d968456afab170792dcd346ca8d4fb7 (diff) | |
download | inotify-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.c | 129 | ||||
-rw-r--r-- | src/inotifywatch.c | 98 |
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); |