|
|
1.1 ! root 1: /* xargs -- quickie version of System V xargs(1): read a list of ! 2: * arguments from stdin, apply to the command which is ! 3: * the argument(s) of xargs ! 4: */ ! 5: ! 6: #include <stdio.h> ! 7: ! 8: char *cmdname; /* should point to argv[0] */ ! 9: ! 10: char command[BUFSIZ]; /* command given to xargs */ ! 11: char line[BUFSIZ]; /* current input line */ ! 12: char cmdbuf[BUFSIZ]; /* command + input lines */ ! 13: ! 14: main(argc, argv) ! 15: int argc; ! 16: char *argv[]; ! 17: { ! 18: char *gets(); ! 19: char *strcat(), *strcpy(); ! 20: ! 21: cmdname = argv[0]; ! 22: ! 23: /* skip (xargs) command name */ ! 24: ! 25: argv++, argc--; ! 26: ! 27: /* construct command from arguments */ ! 28: ! 29: strcpy(command, "exec"); ! 30: while (argc--) { ! 31: (void) strcat(command, " "); ! 32: (void) strcat(command, *argv++); ! 33: } ! 34: ! 35: /* initialize for command execution loop */ ! 36: ! 37: (void) strcpy(cmdbuf, command); ! 38: ! 39: /* here's where all the action is: read in arguments ! 40: * from stdin, appending to the current command buffer ! 41: * if next line would overflow command buffer, execute ! 42: * command buffer and reinitialize ! 43: */ ! 44: ! 45: while (gets(line) != NULL) { ! 46: ! 47: /* the "+2" is for the blank and trailing null char */ ! 48: ! 49: if (strlen(cmdbuf)+strlen(line)+2 > BUFSIZ) { ! 50: docmd(cmdbuf); ! 51: (void) strcpy(cmdbuf, command); ! 52: } ! 53: (void) strcat(cmdbuf, " "); ! 54: (void) strcat(cmdbuf, line); ! 55: } ! 56: ! 57: /* see if there is any left to do */ ! 58: ! 59: if (strlen(cmdbuf) != strlen(command)) { ! 60: docmd(cmdbuf); ! 61: } ! 62: } ! 63: ! 64: docmd(cmdbuf) ! 65: char *cmdbuf; ! 66: { ! 67: return system(cmdbuf); ! 68: } ! 69: ! 70:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.