chiark / gitweb /
prefork-interp: wip compile
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 17 Jul 2022 17:27:11 +0000 (18:27 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 21 Aug 2022 20:21:10 +0000 (21:21 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
cprogs/prefork-interp.c

index 65aa679a93f2054a6987c97566219c2d09cf75d1..9e3c8fd53eea3ea91105ed127fa5e21a790f846c 100644 (file)
@@ -262,15 +262,15 @@ static int connect_existing(void) {
   if (fd==-1) diee("socket() for client");
 
   socklen_t salen = sizeof(sun);
-  r = connect(client, (const struct sockaddr*)&socket_sun, salen);
+  r = connect(fd, (const struct sockaddr*)&socket_sun, salen);
   if (r==-1) {
-    if (errno==ECONNREFUSED || errno==ENOENT) goto x_garbgae;
+    if (errno==ECONNREFUSED || errno==ENOENT) goto x_garbage;
     diee("connect() %s", socket_path);
   }
 
   for (;;) {
     char ack;
-    sr = read(fd, &ack, 1);
+    size_t sr = read(fd, &ack, 1);
     if (sr == -1) {
       if (errno==ECONNRESET) goto x_garbage;
       if (errno==EINTR) continue;
@@ -282,7 +282,7 @@ static int connect_existing(void) {
   }
 
   // We're committed now, send the request (or bail out)
-  send_request(call, argv);
+  send_request(fd);
 
   return fd;
 
@@ -291,9 +291,8 @@ static int connect_existing(void) {
   return -1;
 }
 
-static void become_setup(int sfd, int fake_pair[2])
-  __attribute__((noreturn))
-{
+static __attribute__((noreturn))
+void become_setup(int sfd, int fake_pair[2]) {
   close(fake_pair[0]);
   int call_fd = fake_pair[1];
 
@@ -304,14 +303,16 @@ static void become_setup(int sfd, int fake_pair[2])
   if (dup2(null_0, 0)) diee("dup2 /dev/null onto stdin");
   if (dup2(2, 1) != 1) die("dup2 stderr onto stdout");
 
-  putenv(asprintf("PREFORK_INTERP=%d,%d,%d,%d,%s",
-                 sfd, call_fd, fd0_save, fd1_save, socket_path));
+  putenv(m_asprintf("PREFORK_INTERP=%d,%d,%d,%d,%s",
+                   sfd, call_fd, fd0_save, fd1_save, socket_path));
 
-  execvp(executor_argv[0], executor_argv);
+  execvp(executor_argv[0], (char**)executor_argv);
   diee("execute %s", executor_argv[0]);
 }
 
 static int connect_or_spawn(void) {
+  int r;
+
   int fd = connect_existing();
   if (fd >= 0) return fd;
 
@@ -321,8 +322,8 @@ static int connect_or_spawn(void) {
 
   // We must start a fresh one, and we hold the lock
 
-  r = unlink(socketpath);
-  if (r<0) diee("failed to remove stale socket %s", socketpath);
+  r = unlink(socket_path);
+  if (r<0) diee("failed to remove stale socket %s", socket_path);
 
   int fake_pair[2];
   r = socketpair(AF_UNIX, SOCK_STREAM, 0, fake_pair);
@@ -331,8 +332,8 @@ static int connect_or_spawn(void) {
   int sfd = socket(AF_UNIX, SOCK_STREAM, 0);
   if (sfd<0) diee("socket() for new listener");
 
-  salen_t salen = sizeof(sun);
-  r= bind(sfd, (const struct sockaddr*)&socket_sun, saledn);
+  socklen_t salen = sizeof(sun);
+  r= bind(sfd, (const struct sockaddr*)&socket_sun, salen);
   if (r<0) diee("bind() on new listener");
 
   // We never want callers to get ECONNREFUSED!.