docproc.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- /*
- * A simple filter for the templates
- */
- int main(int argc, char *argv[])
- {
- char buf[1024];
- char *vec[8192];
- char *fvec[200];
- char **svec;
- char type[64];
- int i;
- int vp=2;
- int ret=0;
- 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);
- continue;
- }
- fflush(stdout);
- svec = vec;
- if(buf[1]=='E')
- strcpy(type, "-function");
- else if(buf[1]=='I')
- strcpy(type, "-nofunction");
- else if(buf[1]=='F') {
- int snarf = 0;
- fvec[0] = "kernel-doc";
- fvec[1] = "-docbook";
- strcpy (type, "-function");
- vp = 2;
- for (i = 2; buf[i]; i++) {
- if (buf[i] == ' ' || buf[i] == 'n') {
- buf[i] = '';
- snarf = 1;
- continue;
- }
- if (snarf) {
- snarf = 0;
- fvec[vp++] = type;
- fvec[vp++] = &buf[i];
- }
- }
- fvec[vp++] = &buf[2];
- fvec[vp] = NULL;
- svec = fvec;
- } else
- {
- fprintf(stderr, "Unknown ! escape.n");
- exit(1);
- }
- switch(pid=fork())
- {
- case -1:
- perror("fork");
- exit(1);
- case 0:
- execvp("scripts/kernel-doc", svec);
- perror("exec scripts/kernel-doc");
- exit(1);
- default:
- waitpid(pid, &ret ,0);
- }
- }
- exit(ret);
- }