[MESHLINK_ENOENT] = "No such node",
};
-const char *meshlink_strerror(meshlink_errno_t errno) {
- return errstr[errno];
+const char *meshlink_strerror(meshlink_errno_t err) {
+ if(err < 0 || err >= sizeof errstr / sizeof *errstr)
+ return "Invalid error code";
+ return errstr[err];
}
static bool ecdsa_keygen(meshlink_handle_t *mesh) {
}
void meshlink_close(meshlink_handle_t *mesh) {
- if(!mesh)
+ if(!mesh || !mesh->confbase)
return;
// Close and free all resources used.
exit_configuration(&mesh->config);
event_loop_exit(&mesh->loop);
- free(mesh);
-
#ifdef HAVE_MINGW
- WSACleanup();
+ if(mesh->confbase)
+ WSACleanup();
#endif
+
+ ecdsa_free(mesh->invitation_key);
+
+ free(mesh->name);
+ free(mesh->confbase);
+
+ memset(mesh, 0, sizeof *mesh);
+
+ free(mesh);
}
void meshlink_set_receive_cb(meshlink_handle_t *mesh, meshlink_receive_cb_t cb) {