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-"))
|
||||
&& 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);
|
||||
shput(route_hashtable.value, path, &route_generic_blog);
|
||||
route_hashtable.value[shgeti(route_hashtable.value, path)].context_data = (void *)resource;
|
||||
@ -144,11 +144,11 @@ void init_route_hashtable(void)
|
||||
{
|
||||
lockx(&route_hashtable);
|
||||
shdefault(route_hashtable.value, &route_page_not_found);
|
||||
shput(route_hashtable.value, "/", &route_home);
|
||||
shput(route_hashtable.value, "/page-missing", &route_page_not_found);
|
||||
shput(route_hashtable.value, "/blog", &route_blog);
|
||||
shput(route_hashtable.value, clonestr("/"), &route_home);
|
||||
shput(route_hashtable.value, clonestr("/page-missing"), &route_page_not_found);
|
||||
shput(route_hashtable.value, clonestr("/blog"), &route_blog);
|
||||
#if MY_DEBUG
|
||||
shput(route_hashtable.value, "/build-id", &route_build_id);
|
||||
shput(route_hashtable.value, clonestr("/build-id"), &route_build_id);
|
||||
#endif
|
||||
|
||||
baked_resource_each(&route_hashtable_put_blogs, nil);
|
||||
@ -158,6 +158,9 @@ void init_route_hashtable(void)
|
||||
void free_route_hashtable(void)
|
||||
{
|
||||
lockx(&route_hashtable);
|
||||
for (size_t i = 0; i < shlen(route_hashtable.value); i++) {
|
||||
free(route_hashtable.value[i].key);
|
||||
}
|
||||
shfree(route_hashtable.value);
|
||||
unlockx(&route_hashtable);
|
||||
}
|
||||
|
Reference in New Issue
Block a user