return true;
}
-static const char* itoa(int value)
+static const char* __itoa(int value)
{
static char buffer[sizeof(int) * 8 + 1]; // not thread safe
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
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))
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))
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));