]> git.meshlink.io Git - meshlink/blobdiff - src/devtools.c
mingw compatibility
[meshlink] / src / devtools.c
index 9c017307e6c947de293e2d968724d177296cf117..2102e9bc49529bdc5dfadef425d3dac7c6029080 100644 (file)
@@ -31,7 +31,7 @@ static bool fstrwrite(const char* str, FILE* stream)
        return true;
 }
 
-static const char* itoa(int value)
+static const char* __itoa(int value)
 {
        static char buffer[sizeof(int) * 8 + 1];        // not thread safe
 
@@ -54,7 +54,7 @@ bool devtool_export_json_all_edges_state(meshlink_handle_t *mesh, FILE* stream)
        meshlink_node_t **nodes = meshlink_get_all_nodes(mesh, NULL, &node_count);
        meshlink_edge_t **edges = meshlink_get_all_edges_state(mesh, NULL, &edge_count);
 
-       if(!nodes || !edges)
+       if((!nodes && node_count != 0) || (!edges && edge_count != 0))
                { goto fail; }
 
        // export begin
@@ -73,10 +73,10 @@ bool devtool_export_json_all_edges_state(meshlink_handle_t *mesh, FILE* stream)
                if(!fstrwrite("\t\t\t\"name\": \"", stream) || !fstrwrite(((node_t*)nodes[i])->name, stream) || !fstrwrite("\",\n", stream))
                        goto fail;
 
-               if(!fstrwrite("\t\t\t\"options\": ", stream) || !fstrwrite(itoa(((node_t*)nodes[i])->options), stream) || !fstrwrite(",\n", stream))
+               if(!fstrwrite("\t\t\t\"options\": ", stream) || !fstrwrite(__itoa(((node_t*)nodes[i])->options), stream) || !fstrwrite(",\n", stream))
                        goto fail;
 
-               if(!fstrwrite("\t\t\t\"devclass\": ", stream) || !fstrwrite(itoa(((node_t*)nodes[i])->devclass), stream) || !fstrwrite("\n", stream))
+               if(!fstrwrite("\t\t\t\"devclass\": ", stream) || !fstrwrite(__itoa(((node_t*)nodes[i])->devclass), stream) || !fstrwrite("\n", stream))
                        goto fail;
 
                if(!fstrwrite((i+1) != node_count ? "\t\t},\n" : "\t\t}\n", stream))
@@ -120,10 +120,10 @@ bool devtool_export_json_all_edges_state(meshlink_handle_t *mesh, FILE* stream)
 
                free(address);
 
-               if(!fstrwrite("\t\t\t\"options\": ", stream) || !fstrwrite(itoa(edges[i]->options), stream) || !fstrwrite(",\n", stream))
+               if(!fstrwrite("\t\t\t\"options\": ", stream) || !fstrwrite(__itoa(edges[i]->options), stream) || !fstrwrite(",\n", stream))
                        goto fail;
 
-               if(!fstrwrite("\t\t\t\"weight\": ", stream) || !fstrwrite(itoa(edges[i]->weight), stream) || !fstrwrite("\n", stream))
+               if(!fstrwrite("\t\t\t\"weight\": ", stream) || !fstrwrite(__itoa(edges[i]->weight), stream) || !fstrwrite("\n", stream))
                        goto fail;
 
                if(!fstrwrite((i+1) != edge_count ? "\t\t},\n" : "\t\t}\n", stream))
@@ -145,12 +145,14 @@ fail:
 
 done:
 
-       free(nodes);
+       if(nodes)
+               { free(nodes); }
 
        for(size_t i = 0; edges && i < edge_count; ++i)
                { free(edges[i]); }
 
-       free(edges);
+       if(nodes)
+               { free(edges); }
 
        pthread_mutex_unlock(&(mesh->mesh_mutex));