Fix: store route_hashtable keys on the heap
This commit is contained in:
13
main.c
13
main.c
@ -133,7 +133,7 @@ void route_hashtable_put_blogs(Baked_Resource *resource, void *udata)
|
|||||||
{
|
{
|
||||||
if ((strlen(resource->key) >= strlen("blog-"))
|
if ((strlen(resource->key) >= strlen("blog-"))
|
||||||
&& strncmp(resource->key, "blog-", strlen("blog-")) == 0) {
|
&& strncmp(resource->key, "blog-", strlen("blog-")) == 0) {
|
||||||
char path[MG_PATH_MAX];
|
char *path = malloc(MG_PATH_MAX);
|
||||||
snprintf(path, MG_PATH_MAX, "/%s", resource->key);
|
snprintf(path, MG_PATH_MAX, "/%s", resource->key);
|
||||||
shput(route_hashtable.value, path, &route_generic_blog);
|
shput(route_hashtable.value, path, &route_generic_blog);
|
||||||
route_hashtable.value[shgeti(route_hashtable.value, path)].context_data = (void *)resource;
|
route_hashtable.value[shgeti(route_hashtable.value, path)].context_data = (void *)resource;
|
||||||
@ -144,11 +144,11 @@ void init_route_hashtable(void)
|
|||||||
{
|
{
|
||||||
lockx(&route_hashtable);
|
lockx(&route_hashtable);
|
||||||
shdefault(route_hashtable.value, &route_page_not_found);
|
shdefault(route_hashtable.value, &route_page_not_found);
|
||||||
shput(route_hashtable.value, "/", &route_home);
|
shput(route_hashtable.value, clonestr("/"), &route_home);
|
||||||
shput(route_hashtable.value, "/page-missing", &route_page_not_found);
|
shput(route_hashtable.value, clonestr("/page-missing"), &route_page_not_found);
|
||||||
shput(route_hashtable.value, "/blog", &route_blog);
|
shput(route_hashtable.value, clonestr("/blog"), &route_blog);
|
||||||
#if MY_DEBUG
|
#if MY_DEBUG
|
||||||
shput(route_hashtable.value, "/build-id", &route_build_id);
|
shput(route_hashtable.value, clonestr("/build-id"), &route_build_id);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
baked_resource_each(&route_hashtable_put_blogs, nil);
|
baked_resource_each(&route_hashtable_put_blogs, nil);
|
||||||
@ -158,6 +158,9 @@ void init_route_hashtable(void)
|
|||||||
void free_route_hashtable(void)
|
void free_route_hashtable(void)
|
||||||
{
|
{
|
||||||
lockx(&route_hashtable);
|
lockx(&route_hashtable);
|
||||||
|
for (size_t i = 0; i < shlen(route_hashtable.value); i++) {
|
||||||
|
free(route_hashtable.value[i].key);
|
||||||
|
}
|
||||||
shfree(route_hashtable.value);
|
shfree(route_hashtable.value);
|
||||||
unlockx(&route_hashtable);
|
unlockx(&route_hashtable);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user