diff options
author | Jani Nikula <jani.nikula@intel.com> | 2016-05-12 16:15:42 +0300 |
---|---|---|
committer | Jonathan Corbet <corbet@lwn.net> | 2016-05-14 09:56:49 -0600 |
commit | 1dcdad0aacb6d762b77f3e17167d131a14c0dbce (patch) | |
tree | 5e3fc4921d48f1c6b9059a67a86de01ad39f6ffc /scripts/docproc.c | |
parent | a48dc45e9c02ebaebc79de5b3fec8e4f59a9fe9f (diff) | |
download | op-kernel-dev-1dcdad0aacb6d762b77f3e17167d131a14c0dbce.zip op-kernel-dev-1dcdad0aacb6d762b77f3e17167d131a14c0dbce.tar.gz |
docproc: abstract terminating lines at first space
Cleaner code. Also fixes a bug when F or P directives didn't in fact
have space.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Diffstat (limited to 'scripts/docproc.c')
-rw-r--r-- | scripts/docproc.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/scripts/docproc.c b/scripts/docproc.c index bc90031..a933e05 100644 --- a/scripts/docproc.c +++ b/scripts/docproc.c @@ -430,6 +430,21 @@ static void find_all_symbols(char *filename) } } +/* + * Terminate s at first space, if any. If there was a space, return pointer to + * the character after that. Otherwise, return pointer to the terminating NUL. + */ +static char *chomp(char *s) +{ + while (*s && !isspace(*s)) + s++; + + if (*s) + *s++ = '\0'; + + return s; +} + /* Return pointer to directive content, or NULL if not a directive. */ static char *is_directive(char *line) { @@ -460,27 +475,22 @@ static void parse_file(FILE *infile) continue; } - s = p + 1; switch (*p++) { case 'E': - while (*s && !isspace(*s)) s++; - *s = '\0'; + chomp(p); externalfunctions(p); break; case 'I': - while (*s && !isspace(*s)) s++; - *s = '\0'; + chomp(p); internalfunctions(p); break; case 'D': - while (*s && !isspace(*s)) s++; - *s = '\0'; + chomp(p); symbolsonly(p); break; case 'F': /* filename */ - while (*s && !isspace(*s)) s++; - *s++ = '\0'; + s = chomp(p); /* function names */ while (isspace(*s)) s++; @@ -488,16 +498,14 @@ static void parse_file(FILE *infile) break; case 'P': /* filename */ - while (*s && !isspace(*s)) s++; - *s++ = '\0'; + s = chomp(p); /* DOC: section name */ while (isspace(*s)) s++; docsection(p, s); break; case 'C': - while (*s && !isspace(*s)) s++; - *s = '\0'; + chomp(p); if (findall) findall(p); break; |