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