#include #include #include #include #include #include /* * A simple filter for the templates */ int main(int argc, char *argv[]) { char buf[1024]; char *vec[8192]; char type[64]; int i; int vp=2; pid_t pid; if(chdir(getenv("TOPDIR"))) { perror("chdir"); exit(1); } /* * Build the exec array ahead of time. */ vec[0]="kernel-doc"; vec[1]="-docbook"; for(i=1;vp<8189;i++) { if(argv[i]==NULL) break; vec[vp++]=type; vec[vp++]=argv[i]; } vec[vp++]=buf+2; vec[vp++]=NULL; /* * Now process the template */ while(fgets(buf, 1024, stdin)) { if(*buf!='!') printf("%s", buf); else { fflush(stdout); if(buf[1]=='E') strcpy(type, "-function"); else if(buf[1]=='I') strcpy(type, "-nofunction"); else { fprintf(stderr, "Unknown ! escape.\n"); exit(1); } switch(pid=fork()) { case -1: perror("fork"); exit(1); case 0: execvp("scripts/kernel-doc", vec); perror("exec scripts/kernel-doc"); exit(1); default: waitpid(pid, NULL,0); } } } exit(0); }