diff options
author | Glenn Strauss <gstrauss@gluelogic.com> | 2019-02-12 22:36:04 -0500 |
---|---|---|
committer | Glenn Strauss <gstrauss@gluelogic.com> | 2019-02-12 22:36:04 -0500 |
commit | d28bac32fef755997b720f6f2cd5962cb1cb57d3 (patch) | |
tree | 9c1a456f73a08a8626c3b0c5de4a788ec6adfaa7 | |
parent | 31b546e367b9eddb0d6998e03589a0daa55417ee (diff) | |
download | lighttpd-git-d28bac32fef755997b720f6f2cd5962cb1cb57d3.tar.gz |
[multiple] reduce code dup in list resizing
reduce code duplication in list resizing
realloc() of NULL ptr has behavior similar to malloc()
Note that if initial size == 0, then code used to adjust size
must be += x to ensure the size is non-zero for reallocation.
(Multiplying 0 * x, e.g. power-2 resizing, will result in 0.)
-rw-r--r-- | src/array.c | 9 | ||||
-rw-r--r-- | src/fdevent_poll.c | 12 | ||||
-rw-r--r-- | src/gw_backend.c | 27 | ||||
-rw-r--r-- | src/joblist.c | 12 | ||||
-rw-r--r-- | src/keyvalue.c | 13 | ||||
-rw-r--r-- | src/mod_accesslog.c | 18 | ||||
-rw-r--r-- | src/mod_cgi.c | 6 | ||||
-rw-r--r-- | src/mod_dirlisting.c | 11 | ||||
-rw-r--r-- | src/mod_magnet_cache.c | 5 | ||||
-rw-r--r-- | src/mod_uploadprogress.c | 8 | ||||
-rw-r--r-- | src/mod_webdav.c | 5 | ||||
-rw-r--r-- | src/network.c | 8 | ||||
-rw-r--r-- | src/plugin.c | 7 |
13 files changed, 22 insertions, 119 deletions
diff --git a/src/array.c b/src/array.c index 9abaeada..4331b67b 100644 --- a/src/array.c +++ b/src/array.c @@ -275,14 +275,7 @@ static data_unset **array_find_or_insert(array *a, data_unset *entry) { /* there couldn't possibly be enough memory to store so many entries */ force_assert(a->used + 1 <= SSIZE_MAX); - if (a->size == 0) { - a->size = 16; - a->data = malloc(sizeof(*a->data) * a->size); - a->sorted = malloc(sizeof(*a->sorted) * a->size); - force_assert(a->data); - force_assert(a->sorted); - for (j = a->used; j < a->size; j++) a->data[j] = NULL; - } else if (a->size == a->used) { + if (a->size == a->used) { a->size += 16; a->data = realloc(a->data, sizeof(*a->data) * a->size); a->sorted = realloc(a->sorted, sizeof(*a->sorted) * a->size); diff --git a/src/fdevent_poll.c b/src/fdevent_poll.c index 76e94139..c53b3935 100644 --- a/src/fdevent_poll.c +++ b/src/fdevent_poll.c @@ -45,11 +45,7 @@ static int fdevent_poll_event_del(fdevents *ev, int fde_ndx, int fd) { /* ev->pollfds[k].events = 0; */ /* ev->pollfds[k].revents = 0; */ - if (ev->unused.size == 0) { - ev->unused.size = 16; - ev->unused.ptr = malloc(sizeof(*(ev->unused.ptr)) * ev->unused.size); - force_assert(NULL != ev->unused.ptr); - } else if (ev->unused.size == ev->unused.used) { + if (ev->unused.size == ev->unused.used) { ev->unused.size += 16; ev->unused.ptr = realloc(ev->unused.ptr, sizeof(*(ev->unused.ptr)) * ev->unused.size); force_assert(NULL != ev->unused.ptr); @@ -106,11 +102,7 @@ static int fdevent_poll_event_set(fdevents *ev, int fde_ndx, int fd, int events) return k; } else { - if (ev->size == 0) { - ev->size = 16; - ev->pollfds = malloc(sizeof(*ev->pollfds) * ev->size); - force_assert(NULL != ev->pollfds); - } else if (ev->size == ev->used) { + if (ev->size == ev->used) { ev->size += 16; ev->pollfds = realloc(ev->pollfds, sizeof(*ev->pollfds) * ev->size); force_assert(NULL != ev->pollfds); diff --git a/src/gw_backend.c b/src/gw_backend.c index 84ccc956..bf405fd5 100644 --- a/src/gw_backend.c +++ b/src/gw_backend.c @@ -200,11 +200,7 @@ static int gw_extension_insert(gw_exts *ext, buffer *key, gw_host *fh) { fe->last_used_ndx = -1; buffer_copy_buffer(fe->key, key); - if (ext->size == 0) { - ext->size = 8; - ext->exts = malloc(ext->size * sizeof(*(ext->exts))); - force_assert(ext->exts); - } else if (ext->used == ext->size) { + if (ext->used == ext->size) { ext->size += 8; ext->exts = realloc(ext->exts, ext->size * sizeof(*(ext->exts))); force_assert(ext->exts); @@ -435,11 +431,7 @@ static int env_add(char_array *env, const char *key, size_t key_len, const char } } - if (env->size == 0) { - env->size = 16; - env->ptr = malloc(env->size * sizeof(*env->ptr)); - force_assert(env->ptr); - } else if (env->size == env->used + 1) { + if (env->size <= env->used + 1) { env->size += 16; env->ptr = realloc(env->ptr, env->size * sizeof(*env->ptr)); force_assert(env->ptr); @@ -738,10 +730,7 @@ static int parse_binpath(char_array *env, buffer *b) { case '\t': /* a WS, stop here and copy the argument */ - if (env->size == 0) { - env->size = 16; - env->ptr = malloc(env->size * sizeof(*env->ptr)); - } else if (env->size == env->used) { + if (env->size == env->used) { env->size += 16; env->ptr = realloc(env->ptr, env->size * sizeof(*env->ptr)); } @@ -758,10 +747,7 @@ static int parse_binpath(char_array *env, buffer *b) { } } - if (env->size == 0) { - env->size = 16; - env->ptr = malloc(env->size * sizeof(*env->ptr)); - } else if (env->size == env->used) { /*need one extra for terminating NULL*/ + if (env->size == env->used) { /*need one extra for terminating NULL*/ env->size += 16; env->ptr = realloc(env->ptr, env->size * sizeof(*env->ptr)); } @@ -769,10 +755,7 @@ static int parse_binpath(char_array *env, buffer *b) { /* the rest */ env->ptr[env->used++] = strdup(start); - if (env->size == 0) { - env->size = 16; - env->ptr = malloc(env->size * sizeof(*env->ptr)); - } else if (env->size == env->used) { /*need one extra for terminating NULL*/ + if (env->size == env->used) { /*need one extra for terminating NULL*/ env->size += 16; env->ptr = realloc(env->ptr, env->size * sizeof(*env->ptr)); } diff --git a/src/joblist.c b/src/joblist.c index 7c210247..5a137a9e 100644 --- a/src/joblist.c +++ b/src/joblist.c @@ -7,11 +7,7 @@ #include <string.h> int joblist_append(server *srv, connection *con) { - if (srv->joblist->size == 0) { - srv->joblist->size = 16; - srv->joblist->ptr = malloc(sizeof(*srv->joblist->ptr) * srv->joblist->size); - force_assert(NULL != srv->joblist->ptr); - } else if (srv->joblist->used == srv->joblist->size) { + if (srv->joblist->used == srv->joblist->size) { srv->joblist->size += 16; srv->joblist->ptr = realloc(srv->joblist->ptr, sizeof(*srv->joblist->ptr) * srv->joblist->size); force_assert(NULL != srv->joblist->ptr); @@ -44,11 +40,7 @@ connection *fdwaitqueue_unshift(server *srv, connections *fdwaitqueue) { } int fdwaitqueue_append(server *srv, connection *con) { - if (srv->fdwaitqueue->size == 0) { - srv->fdwaitqueue->size = 16; - srv->fdwaitqueue->ptr = malloc(sizeof(*(srv->fdwaitqueue->ptr)) * srv->fdwaitqueue->size); - force_assert(NULL != srv->fdwaitqueue->ptr); - } else if (srv->fdwaitqueue->used == srv->fdwaitqueue->size) { + if (srv->fdwaitqueue->used == srv->fdwaitqueue->size) { srv->fdwaitqueue->size += 16; srv->fdwaitqueue->ptr = realloc(srv->fdwaitqueue->ptr, sizeof(*(srv->fdwaitqueue->ptr)) * srv->fdwaitqueue->size); force_assert(NULL != srv->fdwaitqueue->ptr); diff --git a/src/keyvalue.c b/src/keyvalue.c index c1b6b019..90351d7a 100644 --- a/src/keyvalue.c +++ b/src/keyvalue.c @@ -38,18 +38,7 @@ int pcre_keyvalue_buffer_append(server *srv, pcre_keyvalue_buffer *kvb, buffer * if (!key) return -1; - if (kvb->size == 0) { - kvb->size = 4; - kvb->used = 0; - - kvb->kv = malloc(kvb->size * sizeof(*kvb->kv)); - force_assert(NULL != kvb->kv); - - for(i = 0; i < kvb->size; i++) { - kvb->kv[i] = calloc(1, sizeof(**kvb->kv)); - force_assert(NULL != kvb->kv[i]); - } - } else if (kvb->used == kvb->size) { + if (kvb->used == kvb->size) { kvb->size += 4; kvb->kv = realloc(kvb->kv, kvb->size * sizeof(*kvb->kv)); diff --git a/src/mod_accesslog.c b/src/mod_accesslog.c index 753cdb4b..3cc24a72 100644 --- a/src/mod_accesslog.c +++ b/src/mod_accesslog.c @@ -257,11 +257,7 @@ static int accesslog_parse_format(server *srv, format_fields *fields, buffer *fo case '%': if (i > 0 && start != i) { /* copy the string before this % */ - if (fields->size == 0) { - fields->size = 16; - fields->used = 0; - fields->ptr = malloc(fields->size * sizeof(format_field * )); - } else if (fields->used == fields->size) { + if (fields->used == fields->size) { fields->size += 16; fields->ptr = realloc(fields->ptr, fields->size * sizeof(format_field * )); } @@ -277,11 +273,7 @@ static int accesslog_parse_format(server *srv, format_fields *fields, buffer *fo /* we need a new field */ - if (fields->size == 0) { - fields->size = 16; - fields->used = 0; - fields->ptr = malloc(fields->size * sizeof(format_field * )); - } else if (fields->used == fields->size) { + if (fields->used == fields->size) { fields->size += 16; fields->ptr = realloc(fields->ptr, fields->size * sizeof(format_field * )); } @@ -412,11 +404,7 @@ static int accesslog_parse_format(server *srv, format_fields *fields, buffer *fo if (start < i) { /* copy the string */ - if (fields->size == 0) { - fields->size = 16; - fields->used = 0; - fields->ptr = malloc(fields->size * sizeof(format_field * )); - } else if (fields->used == fields->size) { + if (fields->used == fields->size) { fields->size += 16; fields->ptr = realloc(fields->ptr, fields->size * sizeof(format_field * )); } diff --git a/src/mod_cgi.c b/src/mod_cgi.c index d39277d2..39045a9b 100644 --- a/src/mod_cgi.c +++ b/src/mod_cgi.c @@ -249,11 +249,7 @@ SETDEFAULTS_FUNC(mod_fastcgi_set_defaults) { static void cgi_pid_add(plugin_data *p, pid_t pid, void *ctx) { buffer_pid_t *r = &(p->cgi_pid); - if (r->size == 0) { - r->size = 16; - r->ptr = malloc(sizeof(*r->ptr) * r->size); - force_assert(r->ptr); - } else if (r->used == r->size) { + if (r->used == r->size) { r->size += 16; r->ptr = realloc(r->ptr, sizeof(*r->ptr) * r->size); force_assert(r->ptr); diff --git a/src/mod_dirlisting.c b/src/mod_dirlisting.c index 2f746740..0144a9bd 100644 --- a/src/mod_dirlisting.c +++ b/src/mod_dirlisting.c @@ -95,16 +95,7 @@ static int excludes_buffer_append(excludes_buffer *exb, buffer *string) { if (!string) return -1; - if (exb->size == 0) { - exb->size = 4; - exb->used = 0; - - exb->ptr = malloc(exb->size * sizeof(*exb->ptr)); - - for(i = 0; i < exb->size ; i++) { - exb->ptr[i] = calloc(1, sizeof(**exb->ptr)); - } - } else if (exb->used == exb->size) { + if (exb->used == exb->size) { exb->size += 4; exb->ptr = realloc(exb->ptr, exb->size * sizeof(*exb->ptr)); diff --git a/src/mod_magnet_cache.c b/src/mod_magnet_cache.c index 204bb8e1..9f09cca2 100644 --- a/src/mod_magnet_cache.c +++ b/src/mod_magnet_cache.c @@ -96,10 +96,7 @@ lua_State *script_cache_get_script(server *srv, connection *con, script_cache *c if (sc == NULL) { sc = script_init(); - if (cache->size == 0) { - cache->size = 16; - cache->ptr = malloc(cache->size * sizeof(*(cache->ptr))); - } else if (cache->used == cache->size) { + if (cache->used == cache->size) { cache->size += 16; cache->ptr = realloc(cache->ptr, cache->size * sizeof(*(cache->ptr))); } diff --git a/src/mod_uploadprogress.c b/src/mod_uploadprogress.c index 3dbd61e1..bf2a20e4 100644 --- a/src/mod_uploadprogress.c +++ b/src/mod_uploadprogress.c @@ -78,13 +78,7 @@ static int connection_map_insert(connection_map *cm, connection *con, const char connection_map_entry *cme; size_t i; - if (cm->size == 0) { - cm->size = 16; - cm->ptr = malloc(cm->size * sizeof(*(cm->ptr))); - for (i = 0; i < cm->size; i++) { - cm->ptr[i] = NULL; - } - } else if (cm->used == cm->size) { + if (cm->used == cm->size) { cm->size += 16; cm->ptr = realloc(cm->ptr, cm->size * sizeof(*(cm->ptr))); for (i = cm->used; i < cm->size; i++) { diff --git a/src/mod_webdav.c b/src/mod_webdav.c index 67153e3c..990560da 100644 --- a/src/mod_webdav.c +++ b/src/mod_webdav.c @@ -1391,10 +1391,7 @@ static handler_t mod_webdav_propfind(server *srv, connection *con, plugin_data * } /* add property to requested list */ - if (req_props->size == 0) { - req_props->size = 16; - req_props->ptr = malloc(sizeof(*(req_props->ptr)) * req_props->size); - } else if (req_props->used == req_props->size) { + if (req_props->used == req_props->size) { req_props->size += 16; req_props->ptr = realloc(req_props->ptr, sizeof(*(req_props->ptr)) * req_props->size); } diff --git a/src/network.c b/src/network.c index 016d0d5b..811d7e90 100644 --- a/src/network.c +++ b/src/network.c @@ -124,16 +124,12 @@ static int network_host_parse_addr(server *srv, sock_addr *addr, socklen_t *addr } static void network_srv_sockets_append(server *srv, server_socket *srv_socket) { - if (srv->srv_sockets.size == 0) { - srv->srv_sockets.size = 4; - srv->srv_sockets.used = 0; - srv->srv_sockets.ptr = malloc(srv->srv_sockets.size * sizeof(server_socket*)); - force_assert(NULL != srv->srv_sockets.ptr); - } else if (srv->srv_sockets.used == srv->srv_sockets.size) { + if (srv->srv_sockets.used == srv->srv_sockets.size) { srv->srv_sockets.size += 4; srv->srv_sockets.ptr = realloc(srv->srv_sockets.ptr, srv->srv_sockets.size * sizeof(server_socket*)); force_assert(NULL != srv->srv_sockets.ptr); } + srv->srv_sockets.ptr[srv->srv_sockets.used++] = srv_socket; } diff --git a/src/plugin.c b/src/plugin.c index a509e4e6..d88bd6bf 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -88,12 +88,7 @@ static void plugin_free(plugin *p) { static int plugins_register(server *srv, plugin *p) { plugin **ps; - if (0 == srv->plugins.size) { - srv->plugins.size = 4; - srv->plugins.ptr = malloc(srv->plugins.size * sizeof(*ps)); - force_assert(NULL != srv->plugins.ptr); - srv->plugins.used = 0; - } else if (srv->plugins.used == srv->plugins.size) { + if (srv->plugins.used == srv->plugins.size) { srv->plugins.size += 4; srv->plugins.ptr = realloc(srv->plugins.ptr, srv->plugins.size * sizeof(*ps)); force_assert(NULL != srv->plugins.ptr); |