Annotation of coherent/d/usr/src/examples/execve.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * execve(), tmpnam(), getenv(), path() example for the COHERENT.
        !             3:  * find all lines with more than LIMIT characters and call 'me'
        !             4:  * to edit them.
        !             5:  */
        !             6: #include <stdio.h>
        !             7: #include <path.h>
        !             8: #include <sys/stat.h>
        !             9: 
        !            10: #define LIMIT 70
        !            11: 
        !            12: extern char *getenv(), **environ, *tempnam();
        !            13: 
        !            14: main(argc, argv)
        !            15: char *argv[];
        !            16: {
        !            17:        /*                me     -e   tmp   file */
        !            18:        char *cmda[5] = { NULL, "-e", NULL, NULL, NULL };
        !            19:        FILE *ifp, *tmp;
        !            20:        char line[256];
        !            21:        int  ct, len;
        !            22: 
        !            23:        if ((NULL == (cmda[3] = argv[1])) ||
        !            24:            (NULL == (ifp = fopen(argv[1], "r")))) {
        !            25:                fprintf(stderr, "Cannot open %s\n", argv[1]);
        !            26:                exit(1);
        !            27:        }
        !            28: 
        !            29:        if (NULL == (cmda[0] = path(getenv("PATH"), "me", AEXEC))) {
        !            30:                fprintf(stderr, "Cannot locate me\n");
        !            31:                exit(1);
        !            32:        }
        !            33: 
        !            34:        if (NULL == (tmp = fopen((cmda[2] = tempnam(NULL, "lng")), "w"))) {
        !            35:                fprintf(stderr, "Cannot open tmpfile\n");
        !            36:                exit(1);
        !            37:        }
        !            38: 
        !            39:        for (ct = 1; NULL != fgets(line, sizeof(line), ifp); ct++)
        !            40:                if (((len = strlen(line)) > LIMIT) ||
        !            41:                    ('\n' != line[len -1]))
        !            42:                        fprintf(tmp, "%d: %d characters long\n", ct, len);
        !            43: 
        !            44:        fclose(tmp);
        !            45:        fclose(ifp);
        !            46: 
        !            47:        if (execve(cmda[0], cmda, environ) < 0) {
        !            48:                fprintf(stderr, "cannot execute me\n");
        !            49:                exit(1);
        !            50:        }
        !            51:        /* We never reach here ! */
        !            52: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.