add_compile_options(-ffunction-sections -fdata-sections)
add_compile_options(-fPIC)
add_compile_options(-g)
+add_compile_options(-fstack-protector -D_FORTIFY_SOURCE=2 -O2)
-set(CMAKE_C_FLAGS_PROFILING "-g -O2 -pg -Wp,-U_FORTIFY_SOURCE")
-set(CMAKE_C_FLAGS_DEBUG "-g -ggdb -Wp,-U_FORTIFY_SOURCE")
+set(CMAKE_C_FLAGS_PROFILING "-g -O2 -pg")
+set(CMAKE_C_FLAGS_DEBUG "-g -ggdb --fstack-protector -D_FORTIFY_SOURCE=2")
set(CMAKE_C_FLAGS_RELEASE "-g -O2")
set(CMAKE_C_FLAGS_CCOV "-g -O2 --coverage")
int8_t value;
/** fake ending character */
- char strings;
+ char strings[];
};
typedef struct item item_t;
uint32_t cacheid;
uint32_t used;
uint32_t count;
- uint8_t content[1];
+ uint8_t content[];
};
static
if (item->expire && item->expire < now)
drop_at(cache, iter);
else {
- if (match(&item->strings, key))
+ if (match(item->strings, key))
found = item;
iter += item->length;
}
item = search(cache, key);
if (item == NULL) {
/* create an item */
- size = (size_t)(&((item_t*)0)->strings)
+ size = sizeof *item
+ strlen(key->client)
+ strlen(key->session)
+ strlen(key->user)
drop_lre(cache);
item = itemat(cache, cache->used);
item->length = length;
- stpcpy(1 + stpcpy(1 + stpcpy(1 + stpcpy(&item->strings, key->client), key->session), key->user), key->permission);
+ stpcpy(1 + stpcpy(1 + stpcpy(1 + stpcpy(item->strings, key->client), key->session), key->user), key->permission);
cache->used += (uint32_t)size;
}
item->expire = expire;
while (c->used > newsize)
drop_lre(c);
- nc = realloc(c, newsize - 1 + sizeof *c);
+ nc = realloc(c, newsize + sizeof *c);
if (nc == NULL)
return -ENOMEM;