From 58a32dad0be010556b39f8ce4b55aa012c2762d0 Mon Sep 17 00:00:00 2001 From: bpc2003 Date: Sun, 9 Mar 2025 18:21:45 -0400 Subject: Added delkey command --- src/keytab.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'src/keytab.c') diff --git a/src/keytab.c b/src/keytab.c index 8d929dc..6186c9d 100644 --- a/src/keytab.c +++ b/src/keytab.c @@ -37,20 +37,15 @@ struct keytab getkey(struct keytab *tab, char *key) void setkey(struct keytab *tab, char *pair) { - char *tmp = calloc(strlen(pair) + 1, sizeof(char)); - strcpy(tmp, pair); char *tok = strtok(pair, ":"); - if (!strcmp(tmp, tok)) { - fprintf(stderr, "Invalid key-value pair: %s\n", tmp); - free(tmp); - return; - } - free(tmp); - char *key = calloc(strlen(tok) + 1, sizeof(char)); strcpy(key, tok); tok = strtok(NULL, ":"); + if (tok == NULL) { + fprintf(stderr, "Invalid key-value pair\n"); + return; + } union value v; int flag; if (isdigit(*tok)) { @@ -80,7 +75,25 @@ void setkey(struct keytab *tab, char *pair) tab[idx].flag = flag; } -int hash(char *key) +void delkey(struct keytab *tab, char *key) +{ + int idx = hash(key); + while (strcmp(tab[idx].key, key) && idx < TABLEN) + idx++; + if (idx >= TABLEN) { + fprintf(stderr, "Invalid key: %s\n", key); + return; + } + free(tab[idx].key); + tab[idx].key = NULL; + if (tab[idx].flag == 3) { + free(tab[idx].v.str); + tab[idx].v.str = NULL; + } + tab[idx].flag = 0; +} + +static int hash(char *key) { unsigned long h = 5381; for (int i = 0; i < strlen(key); ++i) -- cgit v1.2.3