Whamcloud - gitweb
uuidd: Fix warn_unused_result warnings from gcc
[tools/e2fsprogs.git] / misc / uuidd.c
index c964b4e..e2d3656 100644 (file)
@@ -78,7 +78,7 @@ static void create_daemon(void)
        open("/dev/null", O_RDWR);
        open("/dev/null", O_RDWR);
 
-       chdir("/");
+       if (chdir("/")) {}      /* Silence warn_unused_result warning */
        (void) setsid();
        euid = geteuid();
        if (setreuid(euid, euid) < 0)
@@ -105,6 +105,25 @@ static int read_all(int fd, char *buf, size_t count)
        return c;
 }
 
+static int write_all(int fd, char *buf, size_t count)
+{
+       ssize_t ret;
+       int c = 0;
+
+       while (count > 0) {
+               ret = write(fd, buf, count);
+               if (ret < 0) {
+                       if ((errno == EAGAIN) || (errno == EINTR))
+                               continue;
+                       return -1;
+               }
+               count -= ret;
+               buf += ret;
+               c += ret;
+       }
+       return c;
+}
+
 static const char *cleanup_pidfile, *cleanup_socket;
 
 static void terminate_intr(int signo CODE_ATTR((unused)))
@@ -161,7 +180,7 @@ static int call_daemon(const char *socket_path, int op, char *buf,
                op_len += sizeof(int);
        }
 
-       ret = write(s, op_buf, op_len);
+       ret = write_all(s, op_buf, op_len);
        if (ret < op_len) {
                if (err_context)
                        *err_context = _("write");
@@ -206,12 +225,12 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
                        int debug, int timeout, int quiet)
 {
        struct sockaddr_un      my_addr, from_addr;
-       unsigned char           reply_buf[1024], *cp;
        struct flock            fl;
        socklen_t               fromlen;
        int32_t                 reply_len = 0;
        uuid_t                  uu;
        mode_t                  save_umask;
+       char                    reply_buf[1024], *cp;
        char                    op, str[37];
        int                     i, s, ns, len, num;
        int                     fd_pidfile, ret;
@@ -291,9 +310,9 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
        signal(SIGALRM, terminate_intr);
        signal(SIGPIPE, SIG_IGN);
 
-       sprintf(reply_buf, "%d\n", getpid());
-       ftruncate(fd_pidfile, 0);
-       write(fd_pidfile, reply_buf, strlen(reply_buf));
+       sprintf(reply_buf, "%8d\n", getpid());
+       if (ftruncate(fd_pidfile, 0)) {} /* Silence warn_unused_result */
+       write_all(fd_pidfile, reply_buf, strlen(reply_buf));
        if (fd_pidfile > 1)
                close(fd_pidfile); /* Unlock the pid file */
 
@@ -329,12 +348,12 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
 
                switch(op) {
                case UUIDD_OP_GETPID:
-                       sprintf((char *) reply_buf, "%d", getpid());
-                       reply_len = strlen((char *) reply_buf)+1;
+                       sprintf(reply_buf, "%d", getpid());
+                       reply_len = strlen(reply_buf)+1;
                        break;
                case UUIDD_OP_GET_MAXOP:
-                       sprintf((char *) reply_buf, "%d", UUIDD_MAX_OP);
-                       reply_len = strlen((char *) reply_buf)+1;
+                       sprintf(reply_buf, "%d", UUIDD_MAX_OP);
+                       reply_len = strlen(reply_buf)+1;
                        break;
                case UUIDD_OP_TIME_UUID:
                        num = 1;
@@ -375,12 +394,13 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
                                num = 1000;
                        if (num*16 > (int) (sizeof(reply_buf)-sizeof(num)))
                                num = (sizeof(reply_buf)-sizeof(num)) / 16;
-                       uuid__generate_random(reply_buf+sizeof(num), &num);
+                       uuid__generate_random((unsigned char *) reply_buf +
+                                             sizeof(num), &num);
                        if (debug) {
                                printf(_("Generated %d UUID's:\n"), num);
                                for (i=0, cp=reply_buf+sizeof(num);
                                     i < num; i++, cp+=16) {
-                                       uuid_unparse(cp, str);
+                                       uuid_unparse((unsigned char *)cp, str);
                                        printf("\t%s\n", str);
                                }
                        }
@@ -392,8 +412,8 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
                                printf(_("Invalid operation %d\n"), op);
                        goto shutdown_socket;
                }
-               write(ns, &reply_len, sizeof(reply_len));
-               write(ns, reply_buf, reply_len);
+               write_all(ns, (char *) &reply_len, sizeof(reply_len));
+               write_all(ns, reply_buf, reply_len);
        shutdown_socket:
                close(ns);
        }
@@ -476,7 +496,7 @@ int main(int argc, char **argv)
                if (setregid(gid, gid) < 0)
                        die("setregid");
 #endif
-       
+
 #ifdef HAVE_SETRESUID
                if (setresuid(uid, uid, uid) < 0)
                        die("setresuid");