]> git.meshlink.io Git - utcp/blobdiff - selftest.c
Handle channel closure during a receive callback when the ringbuffer wraps.
[utcp] / selftest.c
index 2c299437388e3d6cef3700860f7f3397bd6a70ea..dacdd0c9e7748706fafe64fd34b68a2feb278bb5 100644 (file)
@@ -10,53 +10,65 @@ struct utcp *a;
 struct utcp *b;
 struct utcp_connection *c;
 
-int do_recv(struct utcp_connection *x, const void *data, size_t len) {
+ssize_t do_recv(struct utcp_connection *x, const void *data, size_t len) {
        if(!len) {
-               if(errno)
-                       fprintf(stderr, "%p Error: %s\n", x->utcp, strerror(errno));
-               else
-                       fprintf(stderr, "%p Connection closed by peer\n", x->utcp);
+               if(errno) {
+                       fprintf(stderr, "%p Error: %s\n", (void *)x->utcp, strerror(errno));
+               } else {
+                       fprintf(stderr, "%p Connection closed by peer\n", (void *)x->utcp);
+               }
+
                if(x != c) {
                        fprintf(stderr, "closing my side too...\n");
                        utcp_close(x);
                }
+
                return -1;
        }
 
-       if(x == c)
-               write(0, data, len);
-       else
-               utcp_send(x, data, len);
-
-       return 0;
+       if(x == c) {
+               return write(0, data, len);
+       } else {
+               return utcp_send(x, data, len);
+       }
 }
 
 bool do_pre_accept(struct utcp *utcp, uint16_t port) {
+       (void)utcp;
        fprintf(stderr, "pre-accept\n");
-       if(port != 7)
+
+       if(port != 7) {
                return false;
+       }
+
        return true;
 }
 
 void do_accept(struct utcp_connection *c, uint16_t port) {
+       (void)port;
        fprintf(stderr, "accept\n");
        utcp_accept(c, do_recv, NULL);
 }
 
-int do_send(struct utcp *utcp, const void *data, size_t len) {
+ssize_t do_send(struct utcp *utcp, const void *data, size_t len) {
        static int count = 0;
+
        if(++count > 1000) {
                fprintf(stderr, "Too many packets!\n");
                abort();
        }
 
-       if(utcp == a)
+       if(utcp == a) {
                return utcp_recv(b, data, len);
-       else
+       } else {
                return utcp_recv(a, data, len);
+       }
 }
 
 int main(int argc, char *argv[]) {
+       (void)argc;
+       (void)argv;
+
        srand(time(NULL));
 
        a = utcp_init(do_accept, do_pre_accept, do_send, NULL);
@@ -84,18 +96,21 @@ int main(int argc, char *argv[]) {
        ssize_t len = utcp_send(c, "Hello world!\n", 13);
 
        if(len != 13) {
-               if(len < 0)
+               if(len == -1) {
                        fprintf(stderr, "Error: %s\n", strerror(errno));
-               else
+               } else {
                        fprintf(stderr, "Short write %zd!\n", len);
+               }
        }
+
        len = utcp_send(c, "This is a test.\n", 16);
 
        if(len != 16) {
-               if(len < 0)
+               if(len == -1) {
                        fprintf(stderr, "Error: %s\n", strerror(errno));
-               else
+               } else {
                        fprintf(stderr, "Short write %zd!\n", len);
+               }
        }
 
        fprintf(stderr, "closing...\n");
@@ -107,9 +122,11 @@ int main(int argc, char *argv[]) {
        utcp_set_sndbuf(c, 10240);
        char buf[20480] = "buf";
 
-       len = utcp_send(c, buf, sizeof buf);
-       if(len != 10240)
+       len = utcp_send(c, buf, sizeof(buf));
+
+       if(len != 10240) {
                fprintf(stderr, "Error: utcp_send() returned %zd, expected 10240\n", len);
+       }
 
        fprintf(stderr, "closing...\n");
        utcp_close(c);