diff -r 0b42a35d6add -r 437562f5681d src/server/util/object.c --- a/src/server/util/object.c Tue Nov 08 22:35:18 2022 +0100 +++ b/src/server/util/object.c Wed Nov 09 10:37:52 2022 +0100 @@ -56,25 +56,22 @@ } -void object_add_directive(httpd_object *obj, directive *dir, int dt) { +int object_add_directive(httpd_object *obj, directive *dir, int dt) { dtable *l = object_get_dtable(obj, dt); // allocate space for the new directive - - //l->dirs = realloc(l->dirs, (l->ndir+1)*sizeof(void*)); - // TODO: use realloc - - directive **drs = pool_malloc(obj->pool, (l->ndir+1)*sizeof(void*)); - for(int i=0;indir;i++) { - drs[i] = l->dirs[i]; + if(l->ndir >= l->alloc) { + l->alloc += 8; + directive **drs = pool_realloc(obj->pool, l->dirs, (l->alloc)*sizeof(void*)); + if(!drs) { + l->alloc -= 8; + return -1; + } + l->dirs = drs; } - if(l->dirs != NULL) { - pool_free(obj->pool, l->dirs); - } - l->dirs = drs; - + // add directive - l->dirs[l->ndir] = dir; - l->ndir++; + l->dirs[l->ndir++] = dir; + return 0; }