summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--Makefile43
-rw-r--r--src/lib/keytab.c9
3 files changed, 40 insertions, 17 deletions
diff --git a/.gitignore b/.gitignore
index 3a22b7f..46c80fd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,10 +3,7 @@
*.db~
# compiled files
-*.out
-*.o
-*.a
-*.so
+target/
# lsp
.ccls-cache
diff --git a/Makefile b/Makefile
index a1cdda6..c81978d 100644
--- a/Makefile
+++ b/Makefile
@@ -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;