diff options
Diffstat (limited to 'scripts/basic/docproc.c')
-rw-r--r-- | scripts/basic/docproc.c | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/scripts/basic/docproc.c b/scripts/basic/docproc.c index f4d2f68452b..0e4bd5459df 100644 --- a/scripts/basic/docproc.c +++ b/scripts/basic/docproc.c @@ -10,8 +10,10 @@ * documentation-frontend * Scans the template file and call kernel-doc for * all occurrences of ![EIF]file - * Beforehand each referenced file are scanned for - * any exported sympols "EXPORT_SYMBOL()" statements. + * Beforehand each referenced file is scanned for + * any symbols that are exported via these macros: + * EXPORT_SYMBOL(), EXPORT_SYMBOL_GPL(), & + * EXPORT_SYMBOL_GPL_FUTURE() * This is used to create proper -function and * -nofunction arguments in calls to kernel-doc. * Usage: docproc doc file.tmpl @@ -64,16 +66,19 @@ FILELINE * entity_system; #define FUNCTION "-function" #define NOFUNCTION "-nofunction" +char *srctree; + void usage (void) { fprintf(stderr, "Usage: docproc {doc|depend} file\n"); fprintf(stderr, "Input is read from file.tmpl. Output is sent to stdout\n"); fprintf(stderr, "doc: frontend when generating kernel documentation\n"); fprintf(stderr, "depend: generate list of files referenced within file\n"); + fprintf(stderr, "Environment variable SRCTREE: absolute path to kernel source tree.\n"); } /* - * Execute kernel-doc with parameters givin in svec + * Execute kernel-doc with parameters given in svec */ void exec_kernel_doc(char **svec) { @@ -82,13 +87,13 @@ void exec_kernel_doc(char **svec) char real_filename[PATH_MAX + 1]; /* Make sure output generated so far are flushed */ fflush(stdout); - switch(pid=fork()) { + switch (pid=fork()) { case -1: perror("fork"); exit(1); case 0: memset(real_filename, 0, sizeof(real_filename)); - strncat(real_filename, getenv("SRCTREE"), PATH_MAX); + strncat(real_filename, srctree, PATH_MAX); strncat(real_filename, KERNELDOCPATH KERNELDOC, PATH_MAX - strlen(real_filename)); execvp(real_filename, svec); @@ -133,6 +138,7 @@ struct symfile * add_new_file(char * filename) symfilelist[symfilecnt++].filename = strdup(filename); return &symfilelist[symfilecnt - 1]; } + /* Check if file already are present in the list */ struct symfile * filename_exist(char * filename) { @@ -156,8 +162,8 @@ void noaction2(char * file, char * line) { file = file; line = line; } void printline(char * line) { printf("%s", line); } /* - * Find all symbols exported with EXPORT_SYMBOL and EXPORT_SYMBOL_GPL - * in filename. + * Find all symbols in filename that are exported with EXPORT_SYMBOL & + * EXPORT_SYMBOL_GPL (& EXPORT_SYMBOL_GPL_FUTURE implicitly). * All symbols located are stored in symfilelist. */ void find_export_symbols(char * filename) @@ -168,7 +174,7 @@ void find_export_symbols(char * filename) if (filename_exist(filename) == NULL) { char real_filename[PATH_MAX + 1]; memset(real_filename, 0, sizeof(real_filename)); - strncat(real_filename, getenv("SRCTREE"), PATH_MAX); + strncat(real_filename, srctree, PATH_MAX); strncat(real_filename, filename, PATH_MAX - strlen(real_filename)); sym = add_new_file(filename); @@ -179,15 +185,15 @@ void find_export_symbols(char * filename) perror(real_filename); exit(1); } - while(fgets(line, MAXLINESZ, fp)) { + while (fgets(line, MAXLINESZ, fp)) { char *p; char *e; - if (((p = strstr(line, "EXPORT_SYMBOL_GPL")) != 0) || - ((p = strstr(line, "EXPORT_SYMBOL")) != 0)) { + if (((p = strstr(line, "EXPORT_SYMBOL_GPL")) != NULL) || + ((p = strstr(line, "EXPORT_SYMBOL")) != NULL)) { /* Skip EXPORT_SYMBOL{_GPL} */ while (isalnum(*p) || *p == '_') p++; - /* Remove paranteses and additional ws */ + /* Remove parentheses & additional whitespace */ while (isspace(*p)) p++; if (*p != '(') @@ -211,7 +217,7 @@ void find_export_symbols(char * filename) * Document all external or internal functions in a file. * Call kernel-doc with following parameters: * kernel-doc -docbook -nofunction function_name1 filename - * function names are obtained from all the src files + * Function names are obtained from all the src files * by find_export_symbols. * intfunc uses -nofunction * extfunc uses -function @@ -262,7 +268,7 @@ void singfunc(char * filename, char * line) vec[idx++] = KERNELDOC; vec[idx++] = DOCBOOK; - /* Split line up in individual parameters preceeded by FUNCTION */ + /* Split line up in individual parameters preceded by FUNCTION */ for (i=0; line[i]; i++) { if (isspace(line[i])) { line[i] = '\0'; @@ -292,7 +298,7 @@ void parse_file(FILE *infile) { char line[MAXLINESZ]; char * s; - while(fgets(line, MAXLINESZ, infile)) { + while (fgets(line, MAXLINESZ, infile)) { if (line[0] == '!') { s = line + 2; switch (line[1]) { @@ -335,6 +341,10 @@ void parse_file(FILE *infile) int main(int argc, char *argv[]) { FILE * infile; + + srctree = getenv("SRCTREE"); + if (!srctree) + srctree = getcwd(NULL, 0); if (argc != 3) { usage(); exit(1); @@ -351,9 +361,9 @@ int main(int argc, char *argv[]) { /* Need to do this in two passes. * First pass is used to collect all symbols exported - * in the various files. + * in the various files; * Second pass generate the documentation. - * This is required because function are declared + * This is required because some functions are declared * and exported in different files :-(( */ /* Collect symbols */ @@ -396,4 +406,3 @@ int main(int argc, char *argv[]) fflush(stdout); return exitstatus; } - |