]> sourceware.org Git - lvm2.git/commitdiff
cleanup: easier to read loop code
authorZdenek Kabelac <zkabelac@redhat.com>
Tue, 18 Jun 2013 09:59:22 +0000 (11:59 +0200)
committerZdenek Kabelac <zkabelac@redhat.com>
Tue, 18 Jun 2013 20:13:41 +0000 (22:13 +0200)
buffer_write now accepts const pointer
Simplify loops and drop goto when not needed.

libdaemon/client/daemon-io.c
libdaemon/client/daemon-io.h

index 6ede8a8277e17a2be9c3852b9766766250823a3b..906f375471ec0eb5bb00ee4ede01704a8f39859e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2012 Red Hat, Inc.
+ * Copyright (C) 2011-2013 Red Hat, Inc.
  *
  * This file is part of LVM2.
  *
  * See also write_buffer about blocking (read_buffer has identical behaviour).
  */
 int buffer_read(int fd, struct buffer *buffer) {
+       int result;
+
        if (!buffer_realloc(buffer, 32)) /* ensure we have some space */
-               goto fail;
+               return 0;
 
        while (1) {
-               int result = read(fd, buffer->mem + buffer->used, buffer->allocated - buffer->used);
+               result = read(fd, buffer->mem + buffer->used, buffer->allocated - buffer->used);
                if (result > 0) {
                        buffer->used += result;
                        if (!strncmp((buffer->mem) + buffer->used - 4, "\n##\n", 4)) {
-                               *(buffer->mem + buffer->used - 4) = 0;
                                buffer->used -= 4;
+                               buffer->mem[buffer->used] = 0;
                                break; /* success, we have the full message now */
                        }
-                       if (buffer->allocated - buffer->used < 32)
-                               if (!buffer_realloc(buffer, 1024))
-                                       goto fail;
-                       continue;
-               }
-               if (result == 0) {
+                       if ((buffer->allocated - buffer->used < 32) &&
+                           !buffer_realloc(buffer, 1024))
+                               return 0;
+               } else if (result == 0) {
                        errno = ECONNRESET;
-                       goto fail; /* we should never encounter EOF here */
-               }
-               if (result < 0 && errno != EAGAIN && errno != EWOULDBLOCK && errno != EINTR)
-                       goto fail;
+                       return 0; /* we should never encounter EOF here */
+               } else if (result < 0 && errno != EAGAIN && errno != EWOULDBLOCK && errno != EINTR)
+                       return 0;
                /* TODO call select here if we encountered EAGAIN/EWOULDBLOCK/EINTR */
        }
+
        return 1;
-fail:
-       return 0;
 }
 
 /*
@@ -65,28 +63,21 @@ fail:
  *
  * TODO use select on EWOULDBLOCK/EAGAIN/EINTR to avoid useless spinning
  */
-int buffer_write(int fd, struct buffer *buffer) {
-       struct buffer terminate = { .mem = (char *) "\n##\n", .used = 4 };
-       int done = 0;
-       int written = 0;
-       struct buffer *use = buffer;
-write:
-       while (1) {
-               int result = write(fd, use->mem + written, use->used - written);
-               if (result > 0)
-                       written += result;
-               if (result < 0 && errno != EWOULDBLOCK && errno != EAGAIN && errno != EINTR)
-                       return 0; /* too bad */
-               if (written == use->used) {
-                       if (done)
-                               return 1;
-                       else
-                               break; /* done */
+int buffer_write(int fd, const struct buffer *buffer) {
+       static const struct buffer _terminate = { .mem = (char *) "\n##\n", .used = 4 };
+       const struct buffer *use;
+       int done, written, result;
+
+       for (done = 0; done < 2; ++done) {
+               use = (done == 0) ? buffer : &_terminate;
+               for (written = 0; written < use->used;) {
+                       result = write(fd, use->mem + written, use->used - written);
+                       if (result > 0)
+                               written += result;
+                       else if (result < 0 && errno != EWOULDBLOCK && errno != EAGAIN && errno != EINTR)
+                               return 0; /* too bad */
                }
        }
 
-       use = &terminate;
-       written = 0;
-       done = 1;
-       goto write;
+       return 1;
 }
index 1f55af7ae47d738b3af65e5b8241af1e35a1a5ca..52aaa9cf0d4017136acb5740114dfdc448bfa674 100644 (file)
@@ -26,6 +26,6 @@
 /* TODO function names */
 
 int buffer_read(int fd, struct buffer *buffer);
-int buffer_write(int fd, struct buffer *buffer);
+int buffer_write(int fd, const struct buffer *buffer);
 
 #endif /* _LVM_DAEMON_SHARED_H */
This page took 0.038693 seconds and 5 git commands to generate.