linux-old/scripts/docproc.c
<<
>>
Prefs
   1#include <stdio.h>
   2#include <stdlib.h>
   3#include <string.h>
   4#include <unistd.h>
   5#include <sys/types.h>
   6#include <sys/wait.h>
   7
   8/*
   9 *      A simple filter for the templates
  10 */
  11
  12int main(int argc, char *argv[])
  13{
  14        char buf[1024];
  15        char *vec[8192];
  16        char *fvec[200];
  17        char **svec;
  18        char type[64];
  19        int i;
  20        int vp=2;
  21        int ret=0;
  22        pid_t pid;
  23
  24
  25        if(chdir(getenv("TOPDIR")))
  26        {
  27                perror("chdir");
  28                exit(1);
  29        }
  30        
  31        /*
  32         *      Build the exec array ahead of time.
  33         */
  34        vec[0]="kernel-doc";
  35        vec[1]="-docbook";
  36        for(i=1;vp<8189;i++)
  37        {
  38                if(argv[i]==NULL)
  39                        break;
  40                vec[vp++]=type;
  41                vec[vp++]=argv[i];
  42        }
  43        vec[vp++]=buf+2;
  44        vec[vp++]=NULL;
  45        
  46        /*
  47         *      Now process the template
  48         */
  49         
  50        while(fgets(buf, 1024, stdin))
  51        {
  52                if(*buf!='!') {
  53                        printf("%s", buf);
  54                        continue;
  55                }
  56
  57                fflush(stdout);
  58                svec = vec;
  59                if(buf[1]=='E')
  60                        strcpy(type, "-function");
  61                else if(buf[1]=='I')
  62                        strcpy(type, "-nofunction");    
  63                else if(buf[1]=='F') {
  64                        int snarf = 0;
  65                        fvec[0] = "kernel-doc";
  66                        fvec[1] = "-docbook";
  67                        strcpy (type, "-function");
  68                        vp = 2;
  69                        for (i = 2; buf[i]; i++) {
  70                                if (buf[i] == ' ' || buf[i] == '\n') {
  71                                        buf[i] = '\0';
  72                                        snarf = 1;
  73                                        continue;
  74                                }
  75
  76                                if (snarf) {
  77                                        snarf = 0;
  78                                        fvec[vp++] = type;
  79                                        fvec[vp++] = &buf[i];
  80                                }
  81                        }
  82                        fvec[vp++] = &buf[2];
  83                        fvec[vp] = NULL;
  84                        svec = fvec;
  85                } else
  86                {
  87                        fprintf(stderr, "Unknown ! escape.\n");
  88                        exit(1);
  89                }
  90                switch(pid=fork())
  91                {
  92                case -1:
  93                        perror("fork");
  94                        exit(1);
  95                case  0:
  96                        execvp("scripts/kernel-doc", svec);
  97                        perror("exec scripts/kernel-doc");
  98                        exit(1);
  99                default:
 100                        waitpid(pid, &ret ,0);
 101                }
 102        }
 103        exit(ret);
 104}
 105
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.