Fixes for gcc warnings - mostly WRT check of returns values
[yaz-moved-to-github.git] / src / unix.c
index 77cea3c..268deba 100644 (file)
@@ -1,9 +1,6 @@
-/*
- * Copyright (C) 1995-2005, Index Data ApS
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) 1995-2008 Index Data
  * See the file LICENSE for details.
- *
- * $Id: unix.c,v 1.17 2006-09-06 15:01:53 adam Exp $
- * UNIX socket COMSTACK. By Morten Bøgeskov.
  */
 /**
  * \file unix.c
@@ -90,7 +87,7 @@ typedef struct unix_state
 
     int written;  /* -1 if we aren't writing */
     int towrite;  /* to verify against user input */
-    int (*complete)(const unsigned char *buf, int len); /* length/comple. */
+    int (*complete)(const char *buf, int len); /* length/complete. */
     struct sockaddr_un addr;  /* returned by cs_straddr */
     int uid;
     int gid;
@@ -185,7 +182,8 @@ static int unix_strtoaddr_ex(const char *str, struct sockaddr_un *add)
         return 0;
     TRC(fprintf(stderr, "unix_strtoaddress: %s\n", str ? str : "NULL"));
     add->sun_family = AF_UNIX;
-    strncpy(add->sun_path, str, sizeof(add->sun_path));
+    strncpy(add->sun_path, str, sizeof(add->sun_path)-1);
+    add->sun_path[sizeof(add->sun_path)-1] = 0;
     cp = strchr (add->sun_path, ':');
     if (cp)
         *cp = '\0';
@@ -308,8 +306,7 @@ static int unix_more(COMSTACK h)
 {
     unix_state *sp = (unix_state *)h->cprivate;
 
-    return sp->altlen && (*sp->complete)((unsigned char *) sp->altbuf,
-                                         sp->altlen);
+    return sp->altlen && (*sp->complete)(sp->altbuf, sp->altlen);
 }
 
 /*
@@ -405,7 +402,8 @@ static int unix_bind(COMSTACK h, void *address, int mode)
             return -1;
         }
         socket_unix.sun_family = AF_UNIX;
-        strncpy(socket_unix.sun_path, path, sizeof(socket_unix.sun_path));
+        strncpy(socket_unix.sun_path, path, sizeof(socket_unix.sun_path)-1);
+        socket_unix.sun_path[sizeof(socket_unix.sun_path)-1] = 0;
         if(connect(socket_out, (struct sockaddr *) &socket_unix, SUN_LEN(&socket_unix)) < 0) {
             if(yaz_errno() == ECONNREFUSED) {
                 TRC (fprintf (stderr, "Socket exists but nobody is listening\n"));
@@ -427,8 +425,16 @@ static int unix_bind(COMSTACK h, void *address, int mode)
         h->cerrno = CSYSERR;
         return -1;
     }
-    chown(path, sp->uid, sp->gid);
-    chmod(path, sp->umask != -1 ? sp->umask : 0666);
+    if (chown(path, sp->uid, sp->gid))
+    {
+        h->cerrno = CSYSERR;
+        return -1;
+    }
+    if (chmod(path, sp->umask != -1 ? sp->umask : 0666))
+    {
+        h->cerrno = CSYSERR;
+        return -1;
+    }
     if (mode == CS_SERVER && listen(h->iofile, 100) < 0)
     {
         h->cerrno = CSYSERR;
@@ -573,7 +579,7 @@ static int unix_get(COMSTACK h, char **buf, int *bufsize)
         sp->altsize = tmpi;
     }
     h->io_pending = 0;
-    while (!(berlen = (*sp->complete)((unsigned char *)*buf, hasread)))
+    while (!(berlen = (*sp->complete)(*buf, hasread)))
     {
         if (!*bufsize)
         {