Annotation of 3BSD/cmd/ex/popen.c, revision 1.1.1.1

1.1       root        1: /* Copyright (c) 1979 Regents of the University of California */
                      2: #include       "stdio.h"
                      3: #define tst(a,b) (*mode == 'r' ? (b) : (a))
                      4: 
                      5: FILE *
                      6: popen(cmd,mode)
                      7: char *cmd;
                      8: char *mode;
                      9: {
                     10:        register i;
                     11:        FILE *fptr;
                     12:        struct pstruct {
                     13:                int reader;
                     14:                int writer;
                     15:        } str;
                     16: 
                     17:        if (pipe(&str)<0) return NULL;
                     18:        if ((i=fork())==0) {
                     19:                close(tst(str.writer,str.reader));
                     20:                close(tst(0,1));
                     21:                dup(tst(str.reader,str.writer));
                     22:                close(tst(str.reader,str.writer));
                     23:                execl("/bin/sh","sh","-c",cmd,0);
                     24:                exit(1);
                     25:        }
                     26:        if (i== -1) return NULL;
                     27:        close(tst(str.reader,str.writer));
                     28:        fptr=fopen("/dev/null",tst("w","r"));
                     29:        setbuf(fptr,NULL);
                     30:        fptr->_file=tst(str.writer,str.reader);
                     31:        return fptr;
                     32: }
                     33: 
                     34: pclose(ptr)
                     35: FILE *ptr;
                     36: {
                     37:        int st;
                     38: 
                     39:        fclose(ptr);
                     40:        wait(&st);
                     41:        return st;
                     42: }

unix.superglobalmegacorp.com

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