summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbpc2003 <wpesfriendnva@gmail.com>2025-03-17 14:03:56 -0400
committerbpc2003 <wpesfriendnva@gmail.com>2025-03-17 14:03:56 -0400
commit0b3bce119ead5572e4ed48a2c8bc9203bfb1b90c (patch)
treea06de046c1a28a5522fa0f01929185df6377a261 /src
parent399dedb2cb91efd45e10203b8ff7f949679c02df (diff)
Add goto label for readdb fail condition
Diffstat (limited to 'src')
-rw-r--r--src/lib/file.c19
-rw-r--r--src/main.c2
2 files changed, 17 insertions, 4 deletions
diff --git a/src/lib/file.c b/src/lib/file.c
index 693d0e5..4a477a5 100644
--- a/src/lib/file.c
+++ b/src/lib/file.c
@@ -25,13 +25,13 @@ tablist_t *readdb(char *filename)
case 250:
p = getpair(&c, fp);
if (p == NULL)
- return NULL;
+ goto fail;
setkey(&list, i, p);
free(p);
break;
case 251:
if (open == 1)
- return NULL;
+ goto fail;
open = 1;
break;
case 254:
@@ -44,6 +44,17 @@ tablist_t *readdb(char *filename)
}
fclose(fp);
return list;
+
+fail:
+ fclose(fp);
+ for (int i = 0; i < list[0].len; ++i) {
+ int *indexes = getkeys(list, i);
+ for (int j = 0; indexes[j]; ++j)
+ delkey(list, i, list[i].tab[indexes[j]].key);
+ free(indexes);
+ }
+ free(list);
+ return NULL;
}
// writedb - writes a keytablist to a given file
@@ -51,7 +62,7 @@ void writedb(char *filename, tablist_t *list)
{
FILE *fp = fopen(filename, "wb");
for (int i = 0; i < list[0].len; ++i) {
- fprintf(fp, "\xfb");
+ fputc(0xFB, fp);
int *indexes = getkeys(list, i);
for (int j = 0; indexes[j]; ++j) {
fprintf(fp, "\xfa%s:", list[i].tab[indexes[j]].key);
@@ -69,7 +80,7 @@ void writedb(char *filename, tablist_t *list)
}
}
free(indexes);
- fprintf(fp, "\xfe");
+ fputc(0xFE, fp);
}
fclose(fp);
}
diff --git a/src/main.c b/src/main.c
index 95d93d2..14eb3ea 100644
--- a/src/main.c
+++ b/src/main.c
@@ -24,6 +24,8 @@ int main(int argc, char **argv)
if (argc == 2)
filename = argv[1];
tablist_t *list = readdb(filename);
+ if (list == NULL)
+ exit(1);
char *cmd = calloc(1024, sizeof(char));
while (fgets(cmd, 1024, stdin) != NULL) {