net: rock: Use a helper for conversation filenames (XCC) This pops up a few times, and it is safer to use a common helper. Rebuild glibc. Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
diff --git a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/accept4.c b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/accept4.c index 67a57de..7aa659f 100644 --- a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/accept4.c +++ b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/accept4.c
@@ -30,7 +30,6 @@ struct sockaddr_in *ip; char name[Ctlsize]; char file[8 + Ctlsize + 1]; - char *p; const char *net = 0; char listen[Ctlsize]; int open_flags; @@ -52,13 +51,8 @@ break; } /* at this point, our FD is for the data file. we need to open the - * listen file. The line is stored in r->ctl (e.g. - * /net/tcp/666/ctl) */ - strcpy(listen, r->ctl); - p = strrchr(listen, '/'); - if (p == 0) - return -1; - strcpy(p + 1, "listen"); + * listen file. */ + _sock_get_conv_filename(r, "listen", listen); open_flags = O_RDWR; /* This is for the listen - maybe don't block on open */ open_flags |= (r->sopts & SOCK_NONBLOCK ? O_NONBLOCK : 0);
diff --git a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/plan9_sockets.c b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/plan9_sockets.c index a7303dd..ceb065a 100644 --- a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/plan9_sockets.c +++ b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/plan9_sockets.c
@@ -26,6 +26,20 @@ #include <sys/plan9_helpers.h> +/* Puts the path of the conversation file for 'name' for the Rock in retval, + * which must be a char [Ctlsize]. */ +void _sock_get_conv_filename(Rock *r, const char *name, char *retloc) +{ + char *p; + + strlcpy(retloc, r->ctl, Ctlsize); + p = strrchr(retloc, '/'); + assert(p); + p++; + *p = 0; + strlcat(retloc, name, Ctlsize); +} + void _sock_ingetaddr(Rock *r, struct sockaddr_in *ip, socklen_t *alen, const char *a) @@ -36,9 +50,7 @@ int open_flags; /* get remote address */ - strcpy(name, r->ctl); - p = strrchr(name, '/'); - strcpy(p + 1, a); + _sock_get_conv_filename(r, a, name); open_flags = O_RDONLY; open_flags |= (r->sopts & SOCK_CLOEXEC ? O_CLOEXEC : 0); fd = open(name, open_flags); @@ -317,28 +329,11 @@ * success, -1 on error. This is racy, like a lot of other Rock stuff. */ static int _rock_open_listen_fd(Rock *r) { - char listen_file[Ctlsize + 3]; - char *p; + char listen_file[Ctlsize]; int ret; int open_flags; - if (r->ctl == NULL || r->ctl[0] != '/') { - fprintf(stderr, "r->ctl corrupt: '%s' (domain = %d)\n", - (r->ctl == NULL ? "NULL" : r->ctl), r->domain); - assert(r->ctl != NULL && r->ctl[0] == '/'); - } - strlcpy(listen_file, r->ctl, sizeof(listen_file)); - /* We want the conversation directory. We look for '/ctl' at - * the end of the string. */ - p = strrchr(listen_file, '/'); - if (p == NULL) - p = listen_file; - ++p; - if (strcmp(p, "ctl") != 0) { - fprintf(stderr, "ctl file does not end in '/ctl': is '%s'\n", p); - assert(strcmp(p, "ctl") == 0); - } - strlcpy(p, "listen", sizeof(listen_file) - (p - listen_file)); + _sock_get_conv_filename(r, "listen", listen_file); open_flags = O_PATH; open_flags |= (r->sopts & SOCK_CLOEXEC ? O_CLOEXEC : 0); ret = open(listen_file, open_flags);
diff --git a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/sys/plan9_helpers.h b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/sys/plan9_helpers.h index a67a8b8..2c922a6 100644 --- a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/sys/plan9_helpers.h +++ b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/sys/plan9_helpers.h
@@ -71,6 +71,7 @@ extern int _sock_srv(char *, int); extern int _sock_data(int, const char *, int, int, int, Rock **); extern int _sock_ipattr(const char *); +extern void _sock_get_conv_filename(Rock *r, const char *name, char *retloc); extern void _sock_ingetaddr(Rock *, struct sockaddr_in *, socklen_t *, const char *); extern int _sock_strip_opts(int type);