Annotation of researchv10no/cmd/basic/bas/wlib.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * endstr --- return a pointer to the end of a string
                      3:  */
                      4: 
                      5: char *endstr(s)
                      6: register char  *s;
                      7: {
                      8: 
                      9:        while (*s++)
                     10:                ;
                     11:        return (--s);
                     12: }
                     13: 
                     14: 
                     15: /*
                     16:  * move --- copy "length" bytes from "from" to "to"
                     17:  */
                     18: 
                     19: move(length, from, to)
                     20: register int   length;
                     21: register char  *from, *to;
                     22: {
                     23: 
                     24:        while (--length >= 0)
                     25:                *to++ = *from++;
                     26: }
                     27: 
                     28: 
                     29: /*
                     30:  * smartmove --- move "length" bytes from "from" to "to"; handle overlap
                     31:  */
                     32: 
                     33: smartmove(length, from, to)
                     34: register int   length;
                     35: register char  *from, *to;
                     36: {
                     37: 
                     38:        if (from < to && from + length > to) {
                     39:                from += length;
                     40:                to += length;
                     41:                while (--length >= 0)
                     42:                        *--to = *--from;
                     43:                }
                     44:        else
                     45:                while (--length >= 0)
                     46:                        *to++ = *from++;
                     47: }
                     48: 
                     49: 
                     50: #define        READ    0
                     51: #define        WRITE   1
                     52: 
                     53: int _outpid;           /* the child's process id */
                     54: 
                     55: /*
                     56:  * pipeout --- open an output pipe to the specified program
                     57:  */
                     58: 
                     59: pipeout(pgm, args)
                     60: char *pgm;
                     61: char *args;
                     62: {
                     63:        register int i;
                     64:        int pipedes[2];
                     65:        
                     66:        pipe(pipedes);
                     67:        if ((i = fork()) == 0) {
                     68:                close(READ);
                     69:                dup(pipedes[READ]);
                     70:                closeall();
                     71:                execv(pgm, &args);
                     72:                write(2, "no ", 3);
                     73:                write(2, pgm, strlen(pgm));
                     74:                write(2, "\n", 1);
                     75:                exit(1);
                     76:                }
                     77:        _outpid = i;
                     78:        close(pipedes[READ]);
                     79:        return(pipedes[WRITE]);
                     80: }
                     81: 
                     82: 
                     83: /*
                     84:  * clear --- write zeros to the specified block of memory
                     85:  */
                     86: 
                     87: clear(bp, len)
                     88: register char  *bp;
                     89: register int   len;
                     90: {
                     91:        register long   *lp;
                     92: 
                     93:        while (((unsigned)bp & (sizeof(long)-1)) && --len >= 0)
                     94:                *bp++ = 0;
                     95:        lp = (long *)bp;
                     96:        while (len >= sizeof(long)) {
                     97:                *lp++ = 0;
                     98:                len -= sizeof(long);
                     99:                }
                    100:        bp = (char *)lp;
                    101:        while (--len >= 0)
                    102:                *bp++ = 0;
                    103: }
                    104: 
                    105: 
                    106: /*
                    107:  * closeall --- close all open files (except stdin, stdout, stderr)
                    108:  */
                    109: 
                    110: closeall()
                    111: {
                    112:        extern errno;
                    113:        register int i;
                    114:        
                    115:        for (i=3; i<15; ++i)
                    116:                close(i);
                    117:        errno = 0;
                    118: }

unix.superglobalmegacorp.com

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