chiark / gitweb /
Moved xmalloc etc. into both.c
[userv.git] / client.c
index 740aac54e44ecd357b2e21a61b58f82ab22b71b4..f7bc9a4928965e4a90d984194e8e4878e6097d54 100644 (file)
--- a/client.c
+++ b/client.c
@@ -168,7 +168,7 @@ static void NONRETURNPRINTFFORMAT(1,2) miscerror(const char *fmt, ...) {
   exit(-1);
 }
 
-static void NONRETURNPRINTFFORMAT(1,2) syscallerror(const char *fmt, ...) {
+static void NONRETURNPRINTFFORMAT(1,2) fsyscallerror(const char *fmt, ...) {
   va_list al;
   int e;
 
@@ -181,6 +181,10 @@ static void NONRETURNPRINTFFORMAT(1,2) syscallerror(const char *fmt, ...) {
   exit(-1);
 }
 
+void syscallerror(const char *what) {
+  fsyscallerror("%s",what);
+}
+
 static void NONRETURNING protoreaderror(FILE *file, const char *where) {
   int e;
 
@@ -300,18 +304,7 @@ static void getprogress(struct progress_msg *progress_r, FILE *file) {
  * the signal asynchronicity starts.  They can do anything they like.
  */
 
-static void *xmalloc(size_t s) {
-  void *p;
-  p= malloc(s?s:1);
-  if (!p) syscallerror("malloc (%lu bytes)",(unsigned long)s);
-  return p;
-}
-
-static void *xrealloc(void *p, size_t s) {
-  p= realloc(p,s);
-  if (!p) syscallerror("realloc (%lu bytes)",(unsigned long)s);
-  return p;
-}
+/* This includes xmalloc and xrealloc from both.c */
 
 static void xfwritestring(const char *s, FILE *file) {
   int l;
@@ -348,7 +341,7 @@ static void disconnect(void) /* DOES return, unlike in daemon */ {
     event_mbuf.type= et_disconnect;
     r= fwrite(&event_mbuf,1,sizeof(event_mbuf),swfile);
     if ((r != sizeof(event_mbuf) || fflush(swfile)) && errno != EPIPE)
-      syscallerror("write to server when disconnecting\n");
+      syscallerror("write to server when disconnecting");
   }
   systemerror= 1;
 }
@@ -590,9 +583,9 @@ static void of_file(const struct optioninfo *oip, const char *value, char *key)
     }
     r= fstat(copyfd,&stab);
     if (r) {
-      if (oip) syscallerror("check filedescriptor %lu (named as target of file "
-                           "descriptor redirection for %lu)",copyfd,fd);
-      else syscallerror("check basic filedescriptor %lu at program start",copyfd);
+      if (oip) fsyscallerror("check filedescriptor %lu (named as target of file "
+                            "descriptor redirection for %lu)",copyfd,fd);
+      else fsyscallerror("check basic filedescriptor %lu at program start",copyfd);
     }
     fdsetup[fd].copyfd= copyfd;
   }
@@ -694,7 +687,7 @@ static void of_copyright(const struct optioninfo *oip, const char *value, char *
 " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General\n"
 " Public License for more details.\n\n"
 " You should have received a copy of the GNU General Public License along\n"
-" with userv; if not, write to Ian Jackson <ian@chiark.greenend.org.uk> or\n"
+" with userv; if not, write to Ian Jackson <ian@davenant.greenend.org.uk> or\n"
 " to the Free Software Foundation, 59 Temple Place - Suite 330, Boston,\n"
 " MA 02111-1307, USA.\n",
            stdout) < 0) syscallerror("write usage to stderr");
@@ -946,7 +939,7 @@ static void process_override(const char *servicename) {
     break;
   case ot_file:
     ovfile= fopen(overridevalue,"r");
-    if (!ovfile) syscallerror("open overriding configuration file `%s'",overridevalue);
+    if (!ovfile) fsyscallerror("open overriding configuration file `%s'",overridevalue);
     ovbuf= 0; ovavail= ovused= 0;
     while ((c= getc(ovfile)) != EOF) {
       if (!c) miscerror("overriding config file `%s' contains null(s)",overridevalue);
@@ -958,7 +951,7 @@ static void process_override(const char *servicename) {
       ovbuf[ovused++]= c;
     }
     if (ferror(ovfile) || fclose(ovfile))
-      syscallerror("read overriding configuration file `%s'",overridevalue);
+      fsyscallerror("read overriding configuration file `%s'",overridevalue);
     ovbuf= xrealloc(ovbuf,ovused+1);
     ovbuf[ovused]= 0;
     break;
@@ -995,7 +988,7 @@ static int server_connect(void) {
     if (errno == ECONNREFUSED || errno == ENOENT)
       syscallerror("uservd daemon is not running - service not available");
     if (errno != EINTR)
-      syscallerror("unable to connect to uservd daemon: %m");
+      fsyscallerror("unable to connect to uservd daemon: %m");
   }
 
   return sfd;
@@ -1028,16 +1021,16 @@ static void server_preparepipes(void) {
     assert(!pipepathbuf[PIPEPATHMAXLEN]);
     priv_resume();
     if (unlink(pipepathbuf) && errno != ENOENT)
-      syscallerror("remove any old pipe `%s'",pipepathbuf);
+      fsyscallerror("remove any old pipe `%s'",pipepathbuf);
     if (mkfifo(pipepathbuf,0600)) /* permissions are irrelevant */
-      syscallerror("create pipe `%s'",pipepathbuf);
+      fsyscallerror("create pipe `%s'",pipepathbuf);
     tempfd= open(pipepathbuf,O_RDWR);
-    if (tempfd<0) syscallerror("prelim open pipe `%s' for read+write",pipepathbuf);
+    if (tempfd<0) fsyscallerror("prelim open pipe `%s' for read+write",pipepathbuf);
     assert(fdsetup[fd].mods & (fdm_read|fdm_write));
     fdsetup[fd].pipefd=
       open(pipepathbuf, (fdsetup[fd].mods & fdm_read) ? O_WRONLY : O_RDONLY);
-    if (fdsetup[fd].pipefd<0) syscallerror("real open pipe `%s'",pipepathbuf);
-    if (close(tempfd)) syscallerror("close prelim fd onto pipe `%s'",pipepathbuf);
+    if (fdsetup[fd].pipefd<0) fsyscallerror("real open pipe `%s'",pipepathbuf);
+    if (close(tempfd)) fsyscallerror("close prelim fd onto pipe `%s'",pipepathbuf);
     priv_suspend();
   }
 }
@@ -1142,13 +1135,13 @@ static void connect_pipes(void) {
       fdsetup[fd].copyfd=
        open(fdsetup[fd].filename,fdsetup[fd].oflags|O_NOCTTY,0777);
       if (fdsetup[fd].copyfd<0)
-       syscallerror("open file `%s' for fd %d",fdsetup[fd].filename,fd);
+       fsyscallerror("open file `%s' for fd %d",fdsetup[fd].filename,fd);
     }
     blocksignals(SIG_BLOCK);
     child= fork();
     fdsetup[fd].catpid= child;
     blocksignals(SIG_UNBLOCK);
-    if (child==-1) syscallerror("fork for cat for fd %d",fd);
+    if (child==-1) fsyscallerror("fork for cat for fd %d",fd);
     if (!child) {
       snprintf(catnamebuf,sizeof(catnamebuf),"cat fd%d",fd);
       catnamebuf[sizeof(catnamebuf)-1]= 0;
@@ -1168,8 +1161,8 @@ static void connect_pipes(void) {
       exit(-1);
     }
     if (fdsetup[fd].copyfd>2)
-      if (close(fdsetup[fd].copyfd)) syscallerror("close real fd for %d",fd);
-    if (close(fdsetup[fd].pipefd)) syscallerror("close pipe fd for %d",fd);
+      if (close(fdsetup[fd].copyfd)) fsyscallerror("close real fd for %d",fd);
+    if (close(fdsetup[fd].pipefd)) fsyscallerror("close pipe fd for %d",fd);
   }
 }
 
@@ -1204,7 +1197,7 @@ static void dispose_remaining_pipes(void) {
   blocksignals(SIG_BLOCK);
   for (fd=0; fd<fdsetupsize; fd++) {
     if (!(fdsetup[fd].catpid!=-1 && (fdsetup[fd].mods & fdm_close))) continue;
-    if (kill(fdsetup[fd].catpid,SIGKILL)) syscallerror("kill cat for %d",fd);
+    if (kill(fdsetup[fd].catpid,SIGKILL)) fsyscallerror("kill cat for %d",fd);
     fdsetup[fd].killed= 1;
   }
   blocksignals(SIG_UNBLOCK);