]> git.lizzy.rs Git - dragonblocks_alpha.git/commitdiff
Fix #14
authorElias Fleckenstein <eliasfleckenstein@web.de>
Thu, 1 Apr 2021 17:22:27 +0000 (19:22 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Thu, 1 Apr 2021 17:22:27 +0000 (19:22 +0200)
src/clientcommands.c
src/types.c
src/types.h

index 3965b51aae86ec5ea4c476e2be3cc1b3365975ea..cc586e9b33d1835ce7c59c13e178fe8549d1027f 100644 (file)
@@ -46,15 +46,8 @@ static bool block_handler(Client *client, bool good)
                return false;
 
        char data[header];
-       size_t n_read_total = 0;
-       int n_read;
-       while (n_read_total < header) {
-               if ((n_read = read(client->fd, data + n_read_total, header - n_read_total)) == -1) {
-                       perror("read");
-                       return false;
-               }
-               n_read_total += n_read;
-       }
+       if (! read_full(client->fd, data, header))
+               return false;
 
        MapBlock *block;
 
index 2a101272cdc648c68d7bc1fa16d60621317842f0..94e9fd379f2dbd0c62b240545a2d82c21174e55f 100644 (file)
@@ -4,6 +4,20 @@
 #include <poll.h>
 #include "types.h"
 
+bool read_full(int fd, char *buffer, size_t size)
+{
+       size_t n_read_total = 0;
+       int n_read;
+       while (n_read_total < size) {
+               if ((n_read = read(fd, buffer + n_read_total, size - n_read_total)) == -1) {
+                       perror("read");
+                       return false;
+               }
+               n_read_total += n_read;
+       }
+       return true;
+}
+
 #define htobe8(x) x
 #define be8toh(x) x
 
        bool read_ ## type(int fd, type *buf) \
        { \
                u ## bits encoded; \
-               int n_read; \
-               if ((n_read = read(fd, &encoded, sizeof(encoded))) != sizeof(encoded)) { \
-                       if (n_read == -1) \
-                               perror("read"); \
+               if (! read_full(fd, (char *) &encoded, sizeof(type))) \
                        return false; \
-               } \
                *buf = be ## bits ## toh(encoded); \
                return true; \
        } \
@@ -84,12 +94,8 @@ DEFTYPES(64)
 #define DEFFLOAT(type) \
        bool read_ ## type(int fd, type *buf) \
        { \
-               int n_read; \
-               if ((n_read = read(fd, buf, sizeof(type))) != sizeof(type)) { \
-                       if (n_read == -1) \
-                               perror("read"); \
+               if (! read_full(fd, (char *) buf, sizeof(type))) \
                        return false; \
-               } \
                return true; \
        } \
        bool write_ ## type(int fd, type val) \
index 435f5069458a6c8ad12b21576e841dfbd8ab5e12..1f4f21947da8c14f47776ba323ce30a82fa5c080 100644 (file)
@@ -4,6 +4,8 @@
 #include <stdint.h>
 #include <stdbool.h>
 
+bool read_full(int fd, char *buffer, size_t size);
+
 #define DEFRW(type) \
        bool read_ ## type(int fd, type *ptr); \
        bool write_ ## type(int fd, type val);