|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <sysexits.h> ! 3: ! 4: static char is_sep[256], is_field[256]; ! 5: static init = 0; ! 6: ! 7: extern int errno; ! 8: extern char *errstr; ! 9: ! 10: void ! 11: setfields(arg) ! 12: char *arg; ! 13: { ! 14: register unsigned char *s = (unsigned char *)arg; ! 15: ! 16: memset(is_sep, 0, sizeof is_sep); ! 17: memset(is_field, 1, sizeof is_field); ! 18: while(*s){ ! 19: is_sep[*s] = 1; ! 20: is_field[*s++] = 0; ! 21: } ! 22: is_field[0] = 0; ! 23: init = 1; ! 24: } ! 25: ! 26: getfields(ss, sp, nptrs) ! 27: char *ss; ! 28: char **sp; ! 29: { ! 30: register unsigned char *s = (unsigned char *)ss; ! 31: register unsigned char **p = (unsigned char **)sp; ! 32: register unsigned c; ! 33: ! 34: if(init == 0) ! 35: setfields(" \t"); ! 36: for(;;){ ! 37: if(--nptrs < 0) break; ! 38: *p++ = s; ! 39: while(is_field[c = *s++]); ! 40: if(c == 0) break; ! 41: s[-1] = 0; ! 42: } ! 43: if(nptrs > 0) ! 44: *p = 0; ! 45: else if(--s >= (unsigned char *)ss) ! 46: *s = c; ! 47: return(p - (unsigned char **)sp); ! 48: } ! 49: ! 50: getmfields(ss, sp, nptrs) ! 51: char *ss; ! 52: char **sp; ! 53: { ! 54: register unsigned char *s = (unsigned char *)ss; ! 55: register unsigned char **p = (unsigned char **)sp; ! 56: register unsigned c; ! 57: unsigned char *goo; ! 58: ! 59: if(init == 0) ! 60: setfields(" \t"); ! 61: if(*s){ ! 62: while(nptrs-- > 0){ ! 63: *p++ = s; ! 64: while(is_field[*s++]); ! 65: goo = s-1; ! 66: if((c = *goo) == 0) ! 67: break; ! 68: *goo = 0; ! 69: while(is_sep[*s]) s++; ! 70: if(*s == 0) break; ! 71: } ! 72: } ! 73: if(nptrs > 0) /* plenty of room */ ! 74: *p = 0; ! 75: else if(*s) /* no room and we found a trailing non-is_seper */ ! 76: *goo = c; ! 77: return(p - (unsigned char **)sp); ! 78: } ! 79: ! 80: /* ! 81: * Crude version of BSD socket recv command ! 82: */ ! 83: int ! 84: recv(fd, buf, n, flags) ! 85: int fd; ! 86: char *buf; ! 87: int n, flags; ! 88: { ! 89: if (flags != 0) { ! 90: ipcseterror(EX_SOFTWARE, "flags not allowed", "recv"); ! 91: return(-1); ! 92: } ! 93: return(read(fd, buf, n)); ! 94: } ! 95: ! 96: /* ! 97: * Crude version of BSD socket send command ! 98: */ ! 99: int ! 100: send(fd, buf, n, flags) ! 101: int fd; ! 102: char *buf; ! 103: int n, flags; ! 104: { ! 105: if (flags != 0) { ! 106: ipcseterror(EX_SOFTWARE, "flags not allowed", "send"); ! 107: return(-1); ! 108: } ! 109: return(write(fd, buf, n)); ! 110: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.