diff options
-rw-r--r-- | .gitignore | 5 | ||||
-rw-r--r-- | Makefile | 43 | ||||
-rw-r--r-- | src/lib/keytab.c | 9 |
3 files changed, 40 insertions, 17 deletions
@@ -3,10 +3,7 @@ *.db~ # compiled files -*.out -*.o -*.a -*.so +target/ # lsp .ccls-cache @@ -1,12 +1,35 @@ +CC = gcc +BUILD = target +C_FLAGS = -Wall -lmdb -std=c11 -O2 +D_FLAGS = -L$(BUILD) -Wl,-rpath=$(BUILD) +L_FLAGS = -c -fPIC -Wall -Werror + +all: mdb mdb: lib - gcc src/*.c -Lsrc/lib -lmdb -std=c11 -O2 -o mdb.out -lib: - gcc src/lib/*.c -c -O2 - ld -r *.o -o src/lib/libmdb.so - rm -rf *.o + $(CC) src/*.c $(D_FLAGS) $(C_FLAGS) -o $(BUILD)/mdb.out +lib: $(BUILD) + $(CC) src/lib/*.c $(L_FLAGS) + $(CC) -shared -o $(BUILD)/libmdb.so *.o + rm *.o + dev: dev_lib - gcc src/*.c -g -std=c11 -Lsrc/lib -lmdb -dev_lib: - gcc src/lib/*.c -c -g - ld -r *.o -o src/lib/libmdb.so - rm -rf *.o + $(CC) src/*.c $(D_FLAGS) -g $(C_FLAGS) -o $(BUILD)/devmdb.out +dev_lib: $(BUILD) + $(CC) src/lib/*.c $(L_FLAGS) -g + $(CC) -shared -o $(BUILD)/libmdb.so *.o + rm *.o + +$(BUILD): + mkdir $(BUILD) + +install: lib + cp src/lib/mdb.h /usr/include/mdb.h + mv $(BUILD)/libmdb.so /usr/lib/libmdb.so + ldconfig + $(CC) src/*.c $(C_FLAGS) -o /usr/bin/mdb + +uninstall: + rm /usr/bin/mdb + rm /usr/lib/libmdb.so + rm /usr/include/mdb.h +remove: uninstall diff --git a/src/lib/keytab.c b/src/lib/keytab.c index 74dc47f..ed61264 100644 --- a/src/lib/keytab.c +++ b/src/lib/keytab.c @@ -29,12 +29,12 @@ struct keytab getkey(struct keytablist *list, int id, char *key) { int idx = hash(key); if (list[id].tab[idx].key == NULL) - return (struct keytab) { .key = NULL, .flag = 0, .v = 0 }; + return (struct keytab) { .key = NULL, .flag = 0, .v = { 0 } }; while (strcmp(list[id].tab[idx].key, key) && idx < TABLEN) idx++; if (idx >= TABLEN) - return (struct keytab) { .key = NULL, .flag = 0, .v = 0 }; + return (struct keytab) { .key = NULL, .flag = 0, .v = { 0 } }; return list[id].tab[idx]; } @@ -83,8 +83,11 @@ int setkey(struct keytablist **list, int id, char *pair) } if (!(*list)[id].tab[idx].key) (*list)[id].tab[idx].key = key; - else + else { free(key); + if ((*list)[id].tab[idx].flag == 3) + free((*list)[id].tab[idx].v.str); + } (*list)[id].tab[idx].v = v; (*list)[id].tab[idx].flag = flag; return 0; |