54 //free(obj->name); |
54 //free(obj->name); |
55 //free(obj->dt); |
55 //free(obj->dt); |
56 } |
56 } |
57 |
57 |
58 |
58 |
59 void object_add_directive(httpd_object *obj, directive *dir, int dt) { |
59 int object_add_directive(httpd_object *obj, directive *dir, int dt) { |
60 dtable *l = object_get_dtable(obj, dt); |
60 dtable *l = object_get_dtable(obj, dt); |
61 // allocate space for the new directive |
61 // allocate space for the new directive |
62 |
62 if(l->ndir >= l->alloc) { |
63 //l->dirs = realloc(l->dirs, (l->ndir+1)*sizeof(void*)); |
63 l->alloc += 8; |
64 // TODO: use realloc |
64 directive **drs = pool_realloc(obj->pool, l->dirs, (l->alloc)*sizeof(void*)); |
|
65 if(!drs) { |
|
66 l->alloc -= 8; |
|
67 return -1; |
|
68 } |
|
69 l->dirs = drs; |
|
70 } |
65 |
71 |
66 directive **drs = pool_malloc(obj->pool, (l->ndir+1)*sizeof(void*)); |
|
67 for(int i=0;i<l->ndir;i++) { |
|
68 drs[i] = l->dirs[i]; |
|
69 } |
|
70 if(l->dirs != NULL) { |
|
71 pool_free(obj->pool, l->dirs); |
|
72 } |
|
73 l->dirs = drs; |
|
74 |
|
75 // add directive |
72 // add directive |
76 l->dirs[l->ndir] = dir; |
73 l->dirs[l->ndir++] = dir; |
77 l->ndir++; |
74 return 0; |
78 } |
75 } |
79 |
76 |
80 |
77 |
81 /* objset functions */ |
78 /* objset functions */ |
82 httpd_objset* objset_create(pool_handle_t *pool) { |
79 httpd_objset* objset_create(pool_handle_t *pool) { |