- finish ip6 implementation - add herror, inet_ntop, inet_pton, ip6const - correct types and eliminate warnings Reference: /n/atom/patch/applied2013/apebsd Date: Tue May 28 03:46:10 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/ape/lib/bsd/_sock_ingetaddr.c Tue May 28 03:46:12 2013 +++ /sys/src/ape/lib/bsd/_sock_ingetaddr.c Tue May 28 03:46:12 2013 @@ -16,32 +16,49 @@ #include "priv.h" void -_sock_ingetaddr(Rock *r, struct sockaddr_in *ip, int *alen, char *a) +_sock_ingetaddr(Rock *r, struct sockaddr *sa, int *alen, char *a) { int n, fd; char *p; char name[Ctlsize]; + struct sockaddr_in *ip; + struct sockaddr_in6 *ip6; /* get remote address */ strcpy(name, r->ctl); p = strrchr(name, '/'); strcpy(p+1, a); fd = open(name, O_RDONLY); - if(fd >= 0){ - n = read(fd, name, sizeof(name)-1); - if(n > 0){ - name[n] = 0; - p = strchr(name, '!'); - if(p){ - *p++ = 0; - ip->sin_family = AF_INET; - ip->sin_port = htons(atoi(p)); - ip->sin_addr.s_addr = inet_addr(name); - if(alen) - *alen = sizeof(struct sockaddr_in); - } - } + if(fd < 0) + return; + n = read(fd, name, sizeof(name)-1); + if(n < 0){ close(fd); + return; } + name[n] = 0; + if((p = strchr(name, '!')) != nil){ + *p++ = 0; + /* + * allow a AF_INET listen to accept a AF_INET6 call + * so a machine with ip4 and ip6 addresses can accept either. + */ + if(strchr(p, ':') != nil){ + ip = (struct sockaddr_in*)sa; + ip->sin_family = AF_INET; + ip->sin_port = htons(atoi(p)); + ip->sin_addr.s_addr = inet_addr(name); + if(alen) + *alen = sizeof(struct sockaddr_in); + }else{ + ip6 = (struct sockaddr_in6*)sa; + ip6->sin6_family = AF_INET6; + ip6->sin6_port = htons(atoi(p)); + inet_pton(AF_INET6, name, &ip6->sin6_addr); + if(alen) + *alen = sizeof(struct sockaddr_in6); + } + } + close(fd); } --- /sys/src/ape/lib/bsd/_sock_ipattr.c Tue May 28 03:46:12 2013 +++ /sys/src/ape/lib/bsd/_sock_ipattr.c Tue May 28 03:46:12 2013 @@ -1,7 +1,7 @@ /* posix */ #include #include -#include +#include /* bsd extensions */ #include @@ -16,30 +16,11 @@ int _sock_ipattr(char *name) { - char *p; - int dot = 0; - int alpha = 0; + struct in6_addr ia6; - for(p = name; *p; p++){ - if(isdigit(*p)) - ; - else if(isalpha(*p) || *p == '-') - alpha = 1; - else if(*p == '.') - dot = 1; - else - return Tsys; - } - - if(alpha){ - if(dot) - return Tdom; - else - return Tsys; - } - - if(dot) + if(inet_pton(AF_INET6, name, &ia6) == 1) return Tip; - else - return Tsys; + if(strchr(name, '.') != nil) + return Tdom; + return Tsys; } --- /sys/src/ape/lib/bsd/_sock_ntop.c Thu Jan 1 00:00:00 1970 +++ /sys/src/ape/lib/bsd/_sock_ntop.c Tue May 28 03:46:12 2013 @@ -0,0 +1,43 @@ +/* posix */ +#include +#include +#include +#include +#include +#include +#include + +/* bsd extensions */ +#include +#include +#include +#include + +#include "priv.h" + +void +_sock_ntop(int af, const void *addr, char *ip, int nip, int *port) +{ + struct sockaddr_in *a; + struct sockaddr_in6 *a6; + + switch(af){ + default: + abort(); + case AF_INET: + a = (struct sockaddr_in*)addr; + if(port != nil) + *port = ntohs(a->sin_port); + if(ip != nil) + inet_ntop(af, &a->sin_addr, ip, nip); + break; + case AF_INET6: + a6 = (struct sockaddr_in6*)addr; + if(port != nil) + *port = ntohs(a6->sin6_port); + if(ip != nil) + inet_ntop(af, &a6->sin6_addr, ip, nip); + break; + } +} + --- /sys/src/ape/lib/bsd/accept.c Tue May 28 03:46:12 2013 +++ /sys/src/ape/lib/bsd/accept.c Tue May 28 03:46:12 2013 @@ -6,6 +6,7 @@ #include #include #include +#include /* bsd extensions */ #include @@ -20,10 +21,9 @@ { int n, nfd, cfd; Rock *r, *nr; - struct sockaddr_in *ip; char name[Ctlsize]; char file[8+Ctlsize+1]; - char *p, *net; + char *net; r = _sock_findrock(fd, 0); if(r == 0){ @@ -33,7 +33,11 @@ switch(r->domain){ case PF_INET: + case PF_INET6: switch(r->stype){ + default: + errno = EPROTONOSUPPORT; + return -1; case SOCK_DGRAM: net = "udp"; break; @@ -68,11 +72,10 @@ } /* get remote address */ - ip = (struct sockaddr_in*)&nr->raddr; - _sock_ingetaddr(nr, ip, &n, "remote"); - if(a){ - memmove(a, ip, sizeof(struct sockaddr_in)); - *alen = sizeof(struct sockaddr_in); + _sock_ingetaddr(nr, &nr->raddr, &n, "remote"); + if(a != nil){ + memmove(a, &nr->raddr, n); + *alen = n; } return nfd; --- /sys/src/ape/lib/bsd/bind.c Tue May 28 03:46:12 2013 +++ /sys/src/ape/lib/bsd/bind.c Tue May 28 03:46:12 2013 @@ -6,8 +6,8 @@ #include #include #include -#include #include +#include /* socket extensions */ #include @@ -24,10 +24,9 @@ int bind(int fd, void *a, int alen) { - int n, len, cfd; + int n, len, cfd, port; Rock *r; char msg[128]; - struct sockaddr_in *lip; /* assign the address */ r = _sock_findrock(fd, 0); @@ -42,29 +41,30 @@ memmove(&r->addr, a, alen); /* the rest is IP sepecific */ - if (r->domain != PF_INET) - return 0; - - cfd = open(r->ctl, O_RDWR); - if(cfd < 0){ - errno = EBADF; - return -1; - } - lip = (struct sockaddr_in*)&r->addr; - if(lip->sin_port > 0) - sprintf(msg, "bind %d", ntohs(lip->sin_port)); - else - sprintf(msg, "bind *"); - n = write(cfd, msg, strlen(msg)); - if(n < 0){ - errno = EOPNOTSUPP; /* Improve error reporting!!! */ + switch(r->domain){ + case PF_INET: + case PF_INET6: + cfd = open(r->ctl, O_RDWR); + if(cfd < 0){ + errno = EBADF; + return -1; + } + _sock_ntop(r->domain, &r->addr, nil, 0, &port); + if(port > 0) + snprintf(msg, sizeof msg, "bind %d", port); + else + strcpy(msg, "bind *"); + n = write(cfd, msg, strlen(msg)); + if(n < 0){ + errno = EOPNOTSUPP; /* Improve error reporting!!! */ + close(cfd); + return -1; + } close(cfd); - return -1; - } - close(cfd); - if(lip->sin_port <= 0) - _sock_ingetaddr(r, lip, &len, "local"); + if(port <= 0) + _sock_ingetaddr(r, &r->addr, &len, "local"); + } return 0; } --- /sys/src/ape/lib/bsd/connect.c Tue May 28 03:46:12 2013 +++ /sys/src/ape/lib/bsd/connect.c Tue May 28 03:46:12 2013 @@ -6,6 +6,7 @@ #include #include #include +#include /* bsd extensions */ #include @@ -19,14 +20,13 @@ connect(int fd, void *a, int alen) { Rock *r; - int n, cfd, nfd; - char msg[8+256+1], file[8+256+1]; - struct sockaddr_in *lip, *rip; + int n, cfd, nfd, lport, rport; + char msg[8+256+1], file[8+256+1], rip[48], *rflag; struct sockaddr_un *runix; static int vers; r = _sock_findrock(fd, 0); - if(r == 0){ + if(r == nil){ errno = ENOTSOCK; return -1; } @@ -38,23 +38,23 @@ switch(r->domain){ case PF_INET: + case PF_INET6: /* set up a tcp or udp connection */ cfd = open(r->ctl, O_RDWR); if(cfd < 0){ _syserrno(); return -1; } - rip = a; - lip = (struct sockaddr_in*)&r->addr; - if(lip->sin_port) + + _sock_ntop(r->domain, &r->raddr, rip, sizeof rip, &rport); + _sock_ntop(r->domain, &r->addr, nil, 0, &lport); + rflag = r->reserved? "!r": ""; + if(lport) snprintf(msg, sizeof msg, "connect %s!%d%s %d", - inet_ntoa(rip->sin_addr), ntohs(rip->sin_port), - r->reserved ? "!r" : "", - ntohs(lip->sin_port)); + rip, rport, rflag, lport); else snprintf(msg, sizeof msg, "connect %s!%d%s", - inet_ntoa(rip->sin_addr), ntohs(rip->sin_port), - r->reserved ? "!r" : ""); + rip, rport, rflag); n = write(cfd, msg, strlen(msg)); if(n < 0){ _syserrno(); --- /sys/src/ape/lib/bsd/gai_strerr.c Thu Jan 1 00:00:00 1970 +++ /sys/src/ape/lib/bsd/gai_strerr.c Tue May 28 03:46:12 2013 @@ -0,0 +1,31 @@ +#include +#include +#include + +#define nil ((void*)0) +#define nelem(a) (sizeof(a)/sizeof((a)[0])) + +char *gaitab[] = { +[-EAI_BADFLAGS] "bad flags", +[-EAI_NONAME] "authoratitive negative response", +[-EAI_AGAIN] "temporary lookup failure", +[-EAI_FAIL] "name resolution failure", +[-EAI_FAMILY] "family not supported", +[-EAI_SOCKTYPE] "ai_socktype not supported", +[-EAI_SERVICE] "srvname unsupported", +[-EAI_MEMORY] "no memory", +[-EAI_SYSTEM] "see errno", +[-EAI_OVERFLOW] "overflow", +}; + +const char* +gai_strerror(int error) +{ + unsigned int e; + + e = -error; + if(e <= nelem(gaitab) && gaitab[e] != nil) + return gaitab[e]; + return "bogus gai_strerror argument"; +} + --- /sys/src/ape/lib/bsd/gethostbyaddr.c Tue May 28 03:46:12 2013 +++ /sys/src/ape/lib/bsd/gethostbyaddr.c Tue May 28 03:46:12 2013 @@ -11,19 +11,10 @@ int h_errno; struct hostent* -gethostbyaddr(void *addr, int len, int type) +gethostbyaddr(void *addr, int len, int af) { - unsigned long y; - struct in_addr x; - unsigned char *p = addr; + char name[64]; - if(type != AF_INET || len < 4){ - h_errno = NO_RECOVERY; - return 0; - } - - y = (p[0]<<24)|(p[1]<<16)|(p[2]<<8)|p[3]; - x.s_addr = htonl(y); - - return gethostbyname(inet_ntoa(x)); + USED(len); + return gethostbyname(inet_ntop(af, addr, name, sizeof name)); } --- /sys/src/ape/lib/bsd/gethostbyname.c Tue May 28 03:46:12 2013 +++ /sys/src/ape/lib/bsd/gethostbyname.c Tue May 28 03:46:12 2013 @@ -30,13 +30,13 @@ { int i, t, fd, m; char *p, *bp; - int nn, na; - unsigned long x; + int nn, na, na6; static struct hostent h; static char buf[1024]; static char *nptr[Nname+1]; static char *aptr[Nname+1]; - static char addr[Nname][4]; + static char addr4[Nname][4]; + static char addr6[Nname][16]; h.h_name = 0; t = _sock_ipattr(name); @@ -79,7 +79,7 @@ buf[i] = 0; /* parse the reply */ - nn = na = 0; + nn = na = na6 = 0; for(bp = buf;;){ p = strchr(bp, '='); if(p == 0) @@ -94,15 +94,12 @@ if(nn < Nname) nptr[nn++] = p; } else if(strcmp(bp, "ip") == 0){ - x = inet_addr(p); - x = ntohl(x); - if(na < Nname){ - addr[na][0] = x>>24; - addr[na][1] = x>>16; - addr[na][2] = x>>8; - addr[na][3] = x; - aptr[na] = addr[na]; - na++; + if(strchr(p, ':') != nil){ + if(inet_pton(AF_INET6, p, addr6[na6]) == 1) + na6++; + }else{ + if(inet_pton(AF_INET, p, addr4[na]) == 1) + na++; } } while(*p && *p != ' ') @@ -111,17 +108,29 @@ *p++ = 0; bp = p; } - if(nn+na == 0){ + if(nn+na+na6 == 0){ h_errno = HOST_NOT_FOUND; return 0; } nptr[nn] = 0; - aptr[na] = 0; + + if(na == 0){ + for(i = 0; i < na6; i++) + aptr[i] = addr6[i]; + aptr[i] = 0; + h.h_addrtype = AF_INET6; + h.h_length = 16; + }else{ + for(i = 0; i < na; i++) + aptr[i] = addr4[i]; + aptr[i] = 0; + h.h_addrtype = AF_INET; + h.h_length = 4; + } + h.h_aliases = nptr; h.h_addr_list = aptr; - h.h_length = 4; - h.h_addrtype = AF_INET; if(h.h_name == 0) h.h_name = nptr[0]; if(h.h_name == 0) --- /sys/src/ape/lib/bsd/getpeername.c Tue May 28 03:46:12 2013 +++ /sys/src/ape/lib/bsd/getpeername.c Tue May 28 03:46:12 2013 @@ -6,6 +6,7 @@ #include #include #include +#include /* bsd extensions */ #include --- /sys/src/ape/lib/bsd/getprotobyname.c Tue May 28 03:46:12 2013 +++ /sys/src/ape/lib/bsd/getprotobyname.c Tue May 28 03:46:12 2013 @@ -24,11 +24,11 @@ static struct protoent r; -struct protoent *getprotobyname(const char *name) { +struct protoent* +getprotobyname(const char *name) { int fd, i, m; char *p, *bp; int nn, na; - unsigned long x; static char buf[1024], proto[1024]; static char *nptr[Nname+1]; --- /sys/src/ape/lib/bsd/getsockname.c Tue May 28 03:46:12 2013 +++ /sys/src/ape/lib/bsd/getsockname.c Tue May 28 03:46:12 2013 @@ -6,6 +6,7 @@ #include #include #include +#include /* bsd extensions */ #include @@ -16,11 +17,10 @@ #include "priv.h" int -getsockname(int fd, struct sockaddr *addr, int *alen) +getsockname(int fd, void *addr, int *alen) { Rock *r; int i; - struct sockaddr_in *lip; struct sockaddr_un *lunix; r = _sock_findrock(fd, 0); @@ -31,8 +31,8 @@ switch(r->domain){ case PF_INET: - lip = (struct sockaddr_in*)addr; - _sock_ingetaddr(r, lip, alen, "local"); + case PF_INET6: + _sock_ingetaddr(r, addr, alen, "local"); break; case PF_UNIX: lunix = (struct sockaddr_un*)&r->addr; --- /sys/src/ape/lib/bsd/herror.c Thu Jan 1 00:00:00 1970 +++ /sys/src/ape/lib/bsd/herror.c Tue May 28 03:46:13 2013 @@ -0,0 +1,46 @@ +/* posix */ +#include +#include +#include +#include +#include +#include + +/* bsd extensions */ +#include +#include +//#include + +#include "priv.h" + +int h_errno; + +static const char *hetab[] = { +[HOST_NOT_FOUND] "authoritative answer host not found", +[TRY_AGAIN] "non-authoritive host not found", +[NO_RECOVERY] "non recoverable error", +[NO_DATA] "valid name, no data record of requested type" +}; + +static const char* +getmsg(unsigned int e) +{ + const char *p; + + if(e > nelem(hetab) || (p = hetab[e]) == nil) + p = "unknown error"; + return p; +} + +void +herror(const char *s) +{ + fprintf(stderr, "%s: %s", s, getmsg(h_errno)); +} + + +const char* +hstrerror(int err) +{ + return getmsg(err); +} --- /sys/src/ape/lib/bsd/inet_ntop.c Thu Jan 1 00:00:00 1970 +++ /sys/src/ape/lib/bsd/inet_ntop.c Tue May 28 03:46:13 2013 @@ -0,0 +1,92 @@ +#define _SUSV2_SOURCE +#define _C99_SNPRINTF_EXTENSION +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#define nil ((void*)0) + +const char* +inet_ntop(int af, const void *src, char *dst, int size) +{ + char map[16/2], buf[32], *c; + int d, j, n, run, srun, maxrun, maxsrun; + uint8_t *u; + uint32_t i; + struct in_addr *ia; + struct in6_addr *ia6; + + switch(af){ + default: + errno = EAFNOSUPPORT; + return nil; + case AF_INET: + ia = (struct in_addr*)src; + i = ia->s_addr; + i = ntohl(i); + n = snprintf(dst, size, "%d.%d.%d.%d", + i>>24, i>>16 & 0xff, i>>8 & 0xff, i & 0xff); + if(n == -1){ + errno = ENOSPC; + return nil; + } + return dst; + case AF_INET6: + ia6 = (struct in6_addr*)src; + u = ia6->s6_addr; + + srun = run = 0; + maxrun = maxsrun = 0; + for(i = 0; i < 16; i += 2){ + if((u[i]|u[i+1]) == 0){ + map[i/2] = 1; + if(run == 0) + srun = i/2; + run++; + }else{ + if(run > 0 && run > maxrun){ + maxrun = run; + maxsrun = srun; + } + srun = run = 0; + } + } + if(run > 0 && run > maxrun){ + maxrun = run; + maxsrun = srun; + } + + /* buf must be bigger than biggest address, else -1 return gets us */ + memset(buf, 0, sizeof buf); + j = 0; + c = ":"; + for(i = 0; i < 8;){ + if(map[i] && i == maxsrun){ + j += snprintf(buf+j, sizeof buf-j, "%s:", c); + c = ""; + i += maxrun; + }else{ + d = u[i*2]<<8 | u[i*2+1]; + c = i<7? ":": ""; + j += snprintf(buf+j, sizeof buf-j, "%x%s", d, c); + c = ""; + i++; + } + } + if(strlen(buf)+1 > size){ + errno = ENOSPC; + return nil; + } + memcpy(dst, buf, strlen(buf)+1); + return dst; + } +} --- /sys/src/ape/lib/bsd/inet_pton.c Thu Jan 1 00:00:00 1970 +++ /sys/src/ape/lib/bsd/inet_pton.c Tue May 28 03:46:13 2013 @@ -0,0 +1,128 @@ +#define _SUSV2_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#define nil ((void*)0) +typedef unsigned char uchar; + +int classnetbytes[] = {1, 1, 2, 3, }; + +static char* +parseip4(uchar *u, char *s) +{ + char *v; + int i, d, b, n; + + for(i = 0; i < 4; i++){ + v = s; + d = strtoul(s, &s, 0); + if(d > 255) + return nil; + u[i] = d; + if(*s == '.') + s++; + else if(s == v) + break; + } + if(i < 4 && i > (b = classnetbytes[u[0]>>6])){ + n = i - b; + memmove(u+4-n, u+b, n); + memset(u+b, 0, 4-(b+n)); + i = 4; + } + if(i != 4) + return nil; + return s; +} + +static char* +parseip6(uchar *u, char *s) +{ + char *v; + int i, d, cc, is4; + + is4 = 1; + cc = -1; + for(i = 0; i < 16;){ + v = s; + d = strtoul(s, &s, 16); + switch(*s){ + case '.': + if(i + 4 > 16) + return nil; + s = parseip4(u+i, v); + if(s == nil) + return nil; + i += 4; + break; + case ':': + is4 = 0; + s++; + default: + if(d > 0xffff) + return nil; + u[i++] = d>>8; + u[i++] = d; + if(*s == ':'){ + if(cc != -1) + return nil; + cc = i; + s++; + } + if(s == v) + i -= 2; + break; + } + if(s == v) + break; + } + if(is4 && i == 4){ + memmove(u+12, u, 4); + memset(u, 0, 4); + memset(u+10, 0xff, 2); + } + else if(cc != -1 && i < 16){ + memmove(u+cc+(16-i), u+cc, i-cc); + memset(u+cc, 0, 16-i); + } + else if(i != 16) + return nil; + return s; +} + +int +inet_pton(int af, const char *src, void *dst) +{ + uchar u[16]; + struct in_addr *ia; + struct in6_addr *ia6; + + memset(u, 0, sizeof u); + switch(af){ + default: + errno = EAFNOSUPPORT; + return -1; + case AF_INET: + if(parseip4(u, src) == nil) + return 0; + ia = (struct in_addr*)dst; + memmove(&ia->s_addr, u, 4); + return 1; + case AF_INET6: + if(parseip6(u, src) == nil) + return 0; + ia6 = (struct in6_addr*)dst; + memmove(ia6->s6_addr, u, 16); + return 1; + } +} --- /sys/src/ape/lib/bsd/ip6const.c Thu Jan 1 00:00:00 1970 +++ /sys/src/ape/lib/bsd/ip6const.c Tue May 28 03:46:13 2013 @@ -0,0 +1,5 @@ +#include +#include + +const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT; +const struct in6_addr in6addr_loopback = IN6ADDR_LOOPBACK_INIT; --- /sys/src/ape/lib/bsd/listen.c Tue May 28 03:46:13 2013 +++ /sys/src/ape/lib/bsd/listen.c Tue May 28 03:46:13 2013 @@ -8,6 +8,7 @@ #include #include #include +#include #define _SUSV2_SOURCE #include --- /sys/src/ape/lib/bsd/lstat.c Tue May 28 03:46:13 2013 +++ /sys/src/ape/lib/bsd/lstat.c Tue May 28 03:46:13 2013 @@ -9,14 +9,14 @@ } int -symlink(char *name1, char *name2) +symlink(char*, char*) { errno = EPERM; return -1; } int -readlink(char *name, char *buf, int size) +readlink(char*, char*, int) { errno = EIO; return -1; --- /sys/src/ape/lib/bsd/mkfile Tue May 28 03:46:13 2013 +++ /sys/src/ape/lib/bsd/mkfile Tue May 28 03:46:13 2013 @@ -9,10 +9,13 @@ connect.$O\ endhostent.$O\ ffs.$O\ + gai_strerr.$O\ + getaddrinfo.$O\ getdtablesize.$O\ - gethostbyname.$O\ gethostbyaddr.$O\ + gethostbyname.$O\ gethostname.$O\ + getnameinfo.$O\ getopt.$O\ getpeername.$O\ getprotobyname.$O\ @@ -20,9 +23,13 @@ getservbyname.$O\ getsockname.$O\ gettimeofday.$O\ + herror.$O\ inet_addr.$O\ inet_ntoa.$O\ + inet_ntop.$O\ + inet_pton.$O\ ioctl.$O\ + ip6const.$O\ listen.$O\ lstat.$O\ mktemp.$O\ @@ -39,6 +46,7 @@ shutdown.$O\ _sock_ingetaddr.$O\ _sock_ipattr.$O\ + _sock_ntop.$O\ _sock_srv.$O\ strcasecmp.$O\ strncasecmp.$O\ @@ -51,4 +59,4 @@ #include #include +#include /* socket extensions */ #include @@ -19,10 +20,11 @@ static char lbotch[] = "rcmd: botch starting error stream\n"; static void -ding(int x) +ding(int) { } +/* no ip6 and i don't care */ int rcmd(char **dst, int port, char *luser, char *ruser, char *cmd, int *fd2p) { @@ -58,6 +60,7 @@ } /* error stream */ + lfd = -1; if(fd2p){ /* create an error stream and wait for a call in */ for(i = 0; i < 10; i++){ @@ -92,11 +95,12 @@ || write(fd, ruser, strlen(ruser)+1) < 0 || write(fd, cmd, strlen(cmd)+1) < 0){ if(fd2p) - close(fd2); + close(lfd); fprintf(stderr, pbotch); return -1; } + fd2 = -1; if(fd2p){ x = signal(SIGALRM, ding); alarm(15); --- /sys/src/ape/lib/bsd/readv.c Tue May 28 03:46:13 2013 +++ /sys/src/ape/lib/bsd/readv.c Tue May 28 03:46:13 2013 @@ -6,7 +6,6 @@ readv(int fd, struct iovec *v, int ent) { int x, i, n, len; - char *t; char buf[10*1024]; for(len = i = 0; i < ent; i++) --- /sys/src/ape/lib/bsd/send.c Tue May 28 03:46:13 2013 +++ /sys/src/ape/lib/bsd/send.c Tue May 28 03:46:13 2013 @@ -11,7 +11,7 @@ #include "priv.h" int -send(int fd, char *a, int n, int flags) +send(int fd, void *a, int n, int flags) { if(flags & MSG_OOB){ errno = EOPNOTSUPP; @@ -21,7 +21,7 @@ } int -recv(int fd, char *a, int n, int flags) +recv(int fd, void *a, int n, int flags) { if(flags & MSG_OOB){ errno = EOPNOTSUPP; --- /sys/src/ape/lib/bsd/sendto.c Tue May 28 03:46:13 2013 +++ /sys/src/ape/lib/bsd/sendto.c Tue May 28 03:46:14 2013 @@ -14,6 +14,7 @@ sendto(int fd, void *a, int n, int flags, void *to, int tolen) { + USED(to, tolen); /* actually, should do connect if not done already */ return send(fd, a, n, flags); } --- /sys/src/ape/lib/bsd/socketpair.c Tue May 28 03:46:14 2013 +++ /sys/src/ape/lib/bsd/socketpair.c Tue May 28 03:46:14 2013 @@ -11,6 +11,7 @@ int socketpair(int domain, int type, int protocol, int *sv) { + USED(protocol, type); switch(domain){ case PF_UNIX: return pipe(sv); --- /sys/src/ape/lib/bsd/writev.c Tue May 28 03:46:14 2013 +++ /sys/src/ape/lib/bsd/writev.c Tue May 28 03:46:14 2013 @@ -15,7 +15,7 @@ char *t, *e, *f; char buf[10*1024]; - written = n = 0; + written = 0; t = buf; e = buf+sizeof(buf); for(;ent ; v++, ent--){