Commit 8be30350 authored by Sergey Lyubka's avatar Sergey Lyubka

mg_set_option(): allow NULL as value. Fast success if old_value == new_value.

parent 2609a2ab
......@@ -4415,15 +4415,26 @@ const char *mg_set_option(struct mg_server *server, const char *name,
const char *value) {
int ind = get_option_index(name);
const char *error_msg = NULL;
char **v = NULL;
if (ind < 0) {
error_msg = "No such option";
} else {
if (server->config_options[ind] != NULL) {
free(server->config_options[ind]);
if (ind < 0) return "No such option";
v = &server->config_options[ind];
// Return success immediately if setting to the same value
if ((*v == NULL && value == NULL) ||
(value != NULL && *v != NULL && !strcmp(value, *v))) {
return NULL;
}
if (*v != NULL) {
free(*v);
*v = NULL;
}
server->config_options[ind] = mg_strdup(value);
DBG(("%s [%s]", name, value));
if (value == NULL) return NULL;
*v = mg_strdup(value);
DBG(("%s [%s]", name, *v));
if (ind == LISTENING_PORT) {
int port = ns_bind(&server->ns_server, value);
......@@ -4435,8 +4446,8 @@ const char *mg_set_option(struct mg_server *server, const char *name,
if (!strcmp(value, "0")) {
char buf[10];
mg_snprintf(buf, sizeof(buf), "%d", port);
free(server->config_options[ind]);
server->config_options[ind] = mg_strdup(buf);
free(*v);
*v = mg_strdup(buf);
}
}
#ifndef _WIN32
......@@ -4462,7 +4473,6 @@ const char *mg_set_option(struct mg_server *server, const char *name,
}
#endif
}
}
return error_msg;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment