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);