[PATCH v2 01/20] tag: factor out tag operation parsing
On Sun, 25 Nov 2012, Peter Wang wrote: > Factor out parsing of +tag, -tag operations from argv > into a separate function. > --- > notmuch-tag.c | 66 > +-- > 1 file changed, 41 insertions(+), 25 deletions(-) > > diff --git a/notmuch-tag.c b/notmuch-tag.c > index 88d559b..35a76db 100644 > --- a/notmuch-tag.c > +++ b/notmuch-tag.c > @@ -167,11 +167,48 @@ tag_query (void *ctx, notmuch_database_t *notmuch, > const char *query_string, > return interrupted; > } > > +/* Parse +tag and -tag operations between argv[i] and argv[argc-1]. > + * The array tag_ops must be at least argc - i elements long. > + * Returns the index into argv where parsing stopped, or -1 on error. */ Perhaps mention tag_ops_count (as the number of tags parsed or something)? > +static int > +parse_tag_operations (int i, int argc, char *argv[], > + tag_operation_t *tag_ops, int *tag_ops_count) > +{ > +*tag_ops_count = 0; > + > +for (; i < argc; i++) { > + if (strcmp (argv[i], "--") == 0) { > + i++; > + break; > + } > + if (argv[i][0] == '+' || argv[i][0] == '-') { > + if (argv[i][0] == '+' && argv[i][1] == '\0') { > + fprintf (stderr, "Error: tag names cannot be empty.\n"); > + return -1; > + } > + if (argv[i][0] == '+' && argv[i][1] == '-') { > + /* This disallows adding the non-removable tag "-" and > + * enables notmuch tag to take long options in the > + * future. */ > + fprintf (stderr, "Error: tag names must not start with '-'.\n"); > + return -1; > + } > + tag_ops[*tag_ops_count].tag = argv[i] + 1; > + tag_ops[*tag_ops_count].remove = (argv[i][0] == '-'); > + (*tag_ops_count)++; > + } else { > + break; > + } > +} > + > +return i; > +} > + > int > notmuch_tag_command (void *ctx, int argc, char *argv[]) > { > tag_operation_t *tag_ops; > -int tag_ops_count = 0; > +int tag_ops_count; > char *query_string; > notmuch_config_t *config; > notmuch_database_t *notmuch; > @@ -197,30 +234,9 @@ notmuch_tag_command (void *ctx, int argc, char *argv[]) > return 1; > } > > -for (i = 0; i < argc; i++) { > - if (strcmp (argv[i], "--") == 0) { > - i++; > - break; > - } > - if (argv[i][0] == '+' || argv[i][0] == '-') { > - if (argv[i][0] == '+' && argv[i][1] == '\0') { > - fprintf (stderr, "Error: tag names cannot be empty.\n"); > - return 1; > - } > - if (argv[i][0] == '+' && argv[i][1] == '-') { > - /* This disallows adding the non-removable tag "-" and > - * enables notmuch tag to take long options in the > - * future. */ > - fprintf (stderr, "Error: tag names must not start with '-'.\n"); > - return 1; > - } > - tag_ops[tag_ops_count].tag = argv[i] + 1; > - tag_ops[tag_ops_count].remove = (argv[i][0] == '-'); > - tag_ops_count++; > - } else { > - break; > - } > -} > +i = parse_tag_operations (0, argc, argv, tag_ops, _ops_count); > +if (i < 0) > + return 1; > > tag_ops[tag_ops_count].tag = NULL; > > -- > 1.7.12.1 > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH v2 01/20] tag: factor out tag operation parsing
Factor out parsing of +tag, -tag operations from argv into a separate function. --- notmuch-tag.c | 66 +-- 1 file changed, 41 insertions(+), 25 deletions(-) diff --git a/notmuch-tag.c b/notmuch-tag.c index 88d559b..35a76db 100644 --- a/notmuch-tag.c +++ b/notmuch-tag.c @@ -167,11 +167,48 @@ tag_query (void *ctx, notmuch_database_t *notmuch, const char *query_string, return interrupted; } +/* Parse +tag and -tag operations between argv[i] and argv[argc-1]. + * The array tag_ops must be at least argc - i elements long. + * Returns the index into argv where parsing stopped, or -1 on error. */ +static int +parse_tag_operations (int i, int argc, char *argv[], + tag_operation_t *tag_ops, int *tag_ops_count) +{ +*tag_ops_count = 0; + +for (; i < argc; i++) { + if (strcmp (argv[i], "--") == 0) { + i++; + break; + } + if (argv[i][0] == '+' || argv[i][0] == '-') { + if (argv[i][0] == '+' && argv[i][1] == '\0') { + fprintf (stderr, "Error: tag names cannot be empty.\n"); + return -1; + } + if (argv[i][0] == '+' && argv[i][1] == '-') { + /* This disallows adding the non-removable tag "-" and +* enables notmuch tag to take long options in the +* future. */ + fprintf (stderr, "Error: tag names must not start with '-'.\n"); + return -1; + } + tag_ops[*tag_ops_count].tag = argv[i] + 1; + tag_ops[*tag_ops_count].remove = (argv[i][0] == '-'); + (*tag_ops_count)++; + } else { + break; + } +} + +return i; +} + int notmuch_tag_command (void *ctx, int argc, char *argv[]) { tag_operation_t *tag_ops; -int tag_ops_count = 0; +int tag_ops_count; char *query_string; notmuch_config_t *config; notmuch_database_t *notmuch; @@ -197,30 +234,9 @@ notmuch_tag_command (void *ctx, int argc, char *argv[]) return 1; } -for (i = 0; i < argc; i++) { - if (strcmp (argv[i], "--") == 0) { - i++; - break; - } - if (argv[i][0] == '+' || argv[i][0] == '-') { - if (argv[i][0] == '+' && argv[i][1] == '\0') { - fprintf (stderr, "Error: tag names cannot be empty.\n"); - return 1; - } - if (argv[i][0] == '+' && argv[i][1] == '-') { - /* This disallows adding the non-removable tag "-" and -* enables notmuch tag to take long options in the -* future. */ - fprintf (stderr, "Error: tag names must not start with '-'.\n"); - return 1; - } - tag_ops[tag_ops_count].tag = argv[i] + 1; - tag_ops[tag_ops_count].remove = (argv[i][0] == '-'); - tag_ops_count++; - } else { - break; - } -} +i = parse_tag_operations (0, argc, argv, tag_ops, _ops_count); +if (i < 0) + return 1; tag_ops[tag_ops_count].tag = NULL; -- 1.7.12.1
Re: [PATCH v2 01/20] tag: factor out tag operation parsing
On Sun, 25 Nov 2012, Peter Wang noval...@gmail.com wrote: Factor out parsing of +tag, -tag operations from argv into a separate function. --- notmuch-tag.c | 66 +-- 1 file changed, 41 insertions(+), 25 deletions(-) diff --git a/notmuch-tag.c b/notmuch-tag.c index 88d559b..35a76db 100644 --- a/notmuch-tag.c +++ b/notmuch-tag.c @@ -167,11 +167,48 @@ tag_query (void *ctx, notmuch_database_t *notmuch, const char *query_string, return interrupted; } +/* Parse +tag and -tag operations between argv[i] and argv[argc-1]. + * The array tag_ops must be at least argc - i elements long. + * Returns the index into argv where parsing stopped, or -1 on error. */ Perhaps mention tag_ops_count (as the number of tags parsed or something)? +static int +parse_tag_operations (int i, int argc, char *argv[], + tag_operation_t *tag_ops, int *tag_ops_count) +{ +*tag_ops_count = 0; + +for (; i argc; i++) { + if (strcmp (argv[i], --) == 0) { + i++; + break; + } + if (argv[i][0] == '+' || argv[i][0] == '-') { + if (argv[i][0] == '+' argv[i][1] == '\0') { + fprintf (stderr, Error: tag names cannot be empty.\n); + return -1; + } + if (argv[i][0] == '+' argv[i][1] == '-') { + /* This disallows adding the non-removable tag - and + * enables notmuch tag to take long options in the + * future. */ + fprintf (stderr, Error: tag names must not start with '-'.\n); + return -1; + } + tag_ops[*tag_ops_count].tag = argv[i] + 1; + tag_ops[*tag_ops_count].remove = (argv[i][0] == '-'); + (*tag_ops_count)++; + } else { + break; + } +} + +return i; +} + int notmuch_tag_command (void *ctx, int argc, char *argv[]) { tag_operation_t *tag_ops; -int tag_ops_count = 0; +int tag_ops_count; char *query_string; notmuch_config_t *config; notmuch_database_t *notmuch; @@ -197,30 +234,9 @@ notmuch_tag_command (void *ctx, int argc, char *argv[]) return 1; } -for (i = 0; i argc; i++) { - if (strcmp (argv[i], --) == 0) { - i++; - break; - } - if (argv[i][0] == '+' || argv[i][0] == '-') { - if (argv[i][0] == '+' argv[i][1] == '\0') { - fprintf (stderr, Error: tag names cannot be empty.\n); - return 1; - } - if (argv[i][0] == '+' argv[i][1] == '-') { - /* This disallows adding the non-removable tag - and - * enables notmuch tag to take long options in the - * future. */ - fprintf (stderr, Error: tag names must not start with '-'.\n); - return 1; - } - tag_ops[tag_ops_count].tag = argv[i] + 1; - tag_ops[tag_ops_count].remove = (argv[i][0] == '-'); - tag_ops_count++; - } else { - break; - } -} +i = parse_tag_operations (0, argc, argv, tag_ops, tag_ops_count); +if (i 0) + return 1; tag_ops[tag_ops_count].tag = NULL; -- 1.7.12.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH v2 01/20] tag: factor out tag operation parsing
Factor out parsing of +tag, -tag operations from argv into a separate function. --- notmuch-tag.c | 66 +-- 1 file changed, 41 insertions(+), 25 deletions(-) diff --git a/notmuch-tag.c b/notmuch-tag.c index 88d559b..35a76db 100644 --- a/notmuch-tag.c +++ b/notmuch-tag.c @@ -167,11 +167,48 @@ tag_query (void *ctx, notmuch_database_t *notmuch, const char *query_string, return interrupted; } +/* Parse +tag and -tag operations between argv[i] and argv[argc-1]. + * The array tag_ops must be at least argc - i elements long. + * Returns the index into argv where parsing stopped, or -1 on error. */ +static int +parse_tag_operations (int i, int argc, char *argv[], + tag_operation_t *tag_ops, int *tag_ops_count) +{ +*tag_ops_count = 0; + +for (; i argc; i++) { + if (strcmp (argv[i], --) == 0) { + i++; + break; + } + if (argv[i][0] == '+' || argv[i][0] == '-') { + if (argv[i][0] == '+' argv[i][1] == '\0') { + fprintf (stderr, Error: tag names cannot be empty.\n); + return -1; + } + if (argv[i][0] == '+' argv[i][1] == '-') { + /* This disallows adding the non-removable tag - and +* enables notmuch tag to take long options in the +* future. */ + fprintf (stderr, Error: tag names must not start with '-'.\n); + return -1; + } + tag_ops[*tag_ops_count].tag = argv[i] + 1; + tag_ops[*tag_ops_count].remove = (argv[i][0] == '-'); + (*tag_ops_count)++; + } else { + break; + } +} + +return i; +} + int notmuch_tag_command (void *ctx, int argc, char *argv[]) { tag_operation_t *tag_ops; -int tag_ops_count = 0; +int tag_ops_count; char *query_string; notmuch_config_t *config; notmuch_database_t *notmuch; @@ -197,30 +234,9 @@ notmuch_tag_command (void *ctx, int argc, char *argv[]) return 1; } -for (i = 0; i argc; i++) { - if (strcmp (argv[i], --) == 0) { - i++; - break; - } - if (argv[i][0] == '+' || argv[i][0] == '-') { - if (argv[i][0] == '+' argv[i][1] == '\0') { - fprintf (stderr, Error: tag names cannot be empty.\n); - return 1; - } - if (argv[i][0] == '+' argv[i][1] == '-') { - /* This disallows adding the non-removable tag - and -* enables notmuch tag to take long options in the -* future. */ - fprintf (stderr, Error: tag names must not start with '-'.\n); - return 1; - } - tag_ops[tag_ops_count].tag = argv[i] + 1; - tag_ops[tag_ops_count].remove = (argv[i][0] == '-'); - tag_ops_count++; - } else { - break; - } -} +i = parse_tag_operations (0, argc, argv, tag_ops, tag_ops_count); +if (i 0) + return 1; tag_ops[tag_ops_count].tag = NULL; -- 1.7.12.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch