]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.c
Fix all compiler warnings found using -Wall -W -pedantic.
[meshlink] / src / meshlink.c
index d4a5b2a4ef9e00f453f575bed743d82a1fbec97a..61b8b5616a77a35447ef95dd5e417abb6bf5e681 100644 (file)
@@ -444,7 +444,7 @@ static bool try_bind(int port) {
        return true;
 }
 
-static int check_port(meshlink_handle_t *mesh) {
+int check_port(meshlink_handle_t *mesh) {
        for(int i = 0; i < 1000; i++) {
                int port = 0x1000 + (rand() & 0x7fff);
 
@@ -454,7 +454,8 @@ static int check_port(meshlink_handle_t *mesh) {
                        FILE *f = fopen(filename, "a");
 
                        if(!f) {
-                               logger(mesh, MESHLINK_DEBUG, "Please change MeshLink's Port manually.\n");
+                               meshlink_errno = MESHLINK_ESTORAGE;
+                               logger(mesh, MESHLINK_DEBUG, "Could not store Port.\n");
                                return 0;
                        }
 
@@ -464,7 +465,8 @@ static int check_port(meshlink_handle_t *mesh) {
                }
        }
 
-       logger(mesh, MESHLINK_DEBUG, "Please change MeshLink's Port manually.\n");
+       meshlink_errno = MESHLINK_ENETWORK;
+       logger(mesh, MESHLINK_DEBUG, "Could not find any available network port.\n");
        return 0;
 }
 
@@ -639,9 +641,10 @@ static bool finalize_join(meshlink_handle_t *mesh) {
 static bool invitation_send(void *handle, uint8_t type, const void *data, size_t len) {
        (void)type;
        meshlink_handle_t *mesh = handle;
+       const char *ptr = data;
 
        while(len) {
-               int result = send(mesh->sock, data, len, 0);
+               int result = send(mesh->sock, ptr, len, 0);
 
                if(result == -1 && errno == EINTR) {
                        continue;
@@ -649,7 +652,7 @@ static bool invitation_send(void *handle, uint8_t type, const void *data, size_t
                        return false;
                }
 
-               data += result;
+               ptr += result;
                len -= result;
        }
 
@@ -788,7 +791,12 @@ static bool ecdsa_keygen(meshlink_handle_t *mesh) {
                logger(mesh, MESHLINK_DEBUG, "Done.\n");
        }
 
-       snprintf(privname, sizeof(privname), "%s" SLASH "ecdsa_key.priv", mesh->confbase);
+       if (snprintf(privname, sizeof(privname), "%s" SLASH "ecdsa_key.priv", mesh->confbase) >= PATH_MAX) {
+               logger(mesh, MESHLINK_DEBUG, "Filename too long: %s" SLASH "ecdsa_key.priv\n", mesh->confbase);
+               meshlink_errno = MESHLINK_ESTORAGE;
+               return false;
+       }
+
        f = fopen(privname, "wb");
 
        if(!f) {
@@ -948,10 +956,15 @@ static bool meshlink_setup(meshlink_handle_t *mesh) {
 
        if(!ecdsa_keygen(mesh)) {
                meshlink_errno = MESHLINK_EINTERNAL;
+               unlink(filename);
                return false;
        }
 
-       check_port(mesh);
+       if (check_port(mesh) == 0) {
+               meshlink_errno = MESHLINK_ENETWORK;
+               unlink(filename);
+               return false;
+       }
 
        return true;
 }
@@ -1013,6 +1026,8 @@ meshlink_handle_t *meshlink_open(const char *confbase, const char *name, const c
        event_loop_init(&mesh->loop);
        mesh->loop.data = mesh;
 
+       meshlink_queue_init(&mesh->outpacketqueue);
+
        // Check whether meshlink.conf already exists
 
        char filename[PATH_MAX];
@@ -1571,7 +1586,10 @@ static bool refresh_invitation_key(meshlink_handle_t *mesh) {
 
                char invname[PATH_MAX];
                struct stat st;
-               snprintf(invname, sizeof(invname), "%s" SLASH "%s", filename, ent->d_name);
+               if (snprintf(invname, sizeof(invname), "%s" SLASH "%s", filename, ent->d_name) >= PATH_MAX) {
+                       logger(mesh, MESHLINK_DEBUG, "Filename too long: %s" SLASH "%s", filename, ent->d_name);
+                       continue;
+               }
 
                if(!stat(invname, &st)) {
                        if(mesh->invitation_key && deadline < st.st_mtime) {