summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorbpc2003 <wpesfriendnva@gmail.com>2025-05-22 14:07:29 -0400
committerbpc2003 <wpesfriendnva@gmail.com>2025-05-22 14:07:29 -0400
commit175c04f2972c2a65e29ba2456ba5d058c35dcf87 (patch)
tree6eb27a6c74a1ef0f89e8e109bf8225c4ce9d39a4 /src/include
parenta08b44e1c6fbd8b56011a969f8c11bcc630e1ee0 (diff)
Improve file formatting
Diffstat (limited to 'src/include')
-rw-r--r--src/include/engine/file.c33
-rw-r--r--src/include/engine/setkeys.c2
-rw-r--r--src/include/engine/utils.c2
-rw-r--r--src/include/xml/decode.c31
4 files changed, 43 insertions, 25 deletions
diff --git a/src/include/engine/file.c b/src/include/engine/file.c
index ab77010..4ff7263 100644
--- a/src/include/engine/file.c
+++ b/src/include/engine/file.c
@@ -1,9 +1,15 @@
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "engine.h"
+static const uint32_t ND_MARK = 0xffffffff;
+static const uint32_t V_MARK = 0xfeffffff;
+
+static const char *HEAD = "XDBF";
+
static int check(char **known, int len, char *str);
static void freeknown(char ***known, int len);
@@ -23,13 +29,19 @@ tablist_t *readdb(char *filename) {
fread(buf, sizeof(char), sz, fp);
fclose(fp);
+ if (strncmp(buf, HEAD, 4)) {
+ free(buf);
+ free(list);
+ return NULL;
+ }
+
int tlen, vlen, t = 0, v = 0, l = -1;
char **ktags = calloc((tlen = 2), sizeof(char *));
char **kvalues = calloc((vlen = 2), sizeof(char *));
char *key, *value;
- for (int i = 0; i < sz; ++i) {
- if (buf[i] == ':') {
- ++i;
+ for (int i = 4; i < sz; ++i) {
+ if (checkmark(buf, i) == 2) {
+ i += 4;
value = readidx(buf, &i, &kvalues, &vlen, &v);
char *pair = calloc(strlen(key) + strlen(value) + 2, sizeof(char));
sprintf(pair, "%s:%s", key, value);
@@ -50,7 +62,7 @@ tablist_t *readdb(char *filename) {
static char *readidx(char *buf, int *i, char ***known, int *len, int *pos) {
char *r = NULL;
- if (checkmark(buf, *i)) {
+ if (checkmark(buf, *i) == 1) {
if (*len >= *pos) {
*len *= 2;
*known = realloc(*known, *len * sizeof(char *));
@@ -75,8 +87,11 @@ static char *readidx(char *buf, int *i, char ***known, int *len, int *pos) {
}
static int checkmark(char *buf, int pos) {
- int marker = 0xffffffff;
- return !memcmp(buf + pos, &marker, sizeof(int));
+ if (!memcmp(buf + pos, &ND_MARK, sizeof(uint32_t)))
+ return 1;
+ else if (!memcmp(buf + pos, &V_MARK, sizeof(uint32_t)))
+ return 2;
+ return 0;
}
static long getsz(FILE *fp) {
@@ -93,6 +108,7 @@ void writedb(char *filename, tablist_t *list) {
FILE *fp = fopen(filename, "wb");
if (fp == NULL)
return;
+ fwrite(HEAD, sizeof(char), 4, fp);
int tlen, vlen, t = 0, v = 0;
char **ktags = calloc((tlen = 2), sizeof(char *));
writeidx(&ktags, &tlen, &t, "documents", fp);
@@ -106,7 +122,7 @@ void writedb(char *filename, tablist_t *list) {
writeidx(&ktags, &tlen, &t, "document", fp);
for (int j = 0; indexes[i].tab[j].flag; ++j) {
writeidx(&ktags, &tlen, &t, indexes[i].tab[j].key, fp);
- fputc(':', fp);
+ fwrite(&V_MARK, sizeof(uint32_t), 1, fp);
switch (indexes[i].tab[j].flag) {
case 1:
snprintf(buf, 64, "%g", indexes[i].tab[j].value.num);
@@ -131,8 +147,7 @@ void writedb(char *filename, tablist_t *list) {
static void newtag(char *tag, FILE *fp) {
int len = strlen(tag);
- int marker = 0xffffffff;
- fwrite(&marker, sizeof(int), 1, fp);
+ fwrite(&ND_MARK, sizeof(uint32_t), 1, fp);
fwrite(&len, sizeof(int), 1, fp);
fwrite(tag, sizeof(char), len, fp);
}
diff --git a/src/include/engine/setkeys.c b/src/include/engine/setkeys.c
index f8797e6..fd9e8f9 100644
--- a/src/include/engine/setkeys.c
+++ b/src/include/engine/setkeys.c
@@ -120,7 +120,7 @@ static int setkey(tablist_t **list, int id, char *pair) {
static char **getkv(char *pair) {
char **kv = calloc(2, sizeof(char *));
- int i = 0;
+ unsigned long i = 0;
while (pair[i] != ':' && i < strlen(pair))
i++;
if (i >= strlen(pair)) {
diff --git a/src/include/engine/utils.c b/src/include/engine/utils.c
index f8ef7f0..134ace0 100644
--- a/src/include/engine/utils.c
+++ b/src/include/engine/utils.c
@@ -16,7 +16,7 @@ void dellist(tablist_t *list) {
int hash(char *key) {
unsigned long h = 5381;
- for (int i = 0; i < strlen(key); ++i)
+ for (unsigned long i = 0; i < strlen(key); ++i)
h = ((h << 5) + h) + key[i];
return h % TABLEN;
}
diff --git a/src/include/xml/decode.c b/src/include/xml/decode.c
index dccbc2f..1962f7e 100644
--- a/src/include/xml/decode.c
+++ b/src/include/xml/decode.c
@@ -3,21 +3,22 @@
#include "xml.h"
-static char *get_tag(char *xml, int *pos);
+static char *get_tag(char *xml, unsigned long *pos);
static attr_t *get_attrs(char *parsed, char **tag, int *n_attrs);
-static int check_closing_tag(char *xml, int *pos, char *tag, int *err);
-static void set_tag(char *xml, map_t **map, int *closed, int *pos);
-static void set_value(char *xml, int *pos, map_t **map);
+static int check_closing_tag(char *xml, unsigned long *pos, char *tag, int *err);
+static void set_tag(char *xml, map_t **map, int *closed, unsigned long *pos);
+static void set_value(char *xml, unsigned long *pos, map_t **map);
-static map_t *decode_helper(char *xml, int *pos, int *len);
+static map_t *decode_helper(char *xml, unsigned long *pos, int *len);
map_t *decode(char *xml) {
- int start = 0, len = 0;
+ int len = 0;
+ unsigned long start = 0;
return decode_helper(xml, &start, &len);
}
-static map_t *decode_helper(char *xml, int *pos, int *len) {
+static map_t *decode_helper(char *xml, unsigned long *pos, int *len) {
if (*len)
++(*len);
else
@@ -25,7 +26,7 @@ static map_t *decode_helper(char *xml, int *pos, int *len) {
map_t *decoded = calloc(1, sizeof(map_t));
int err = 0, closed = 1;
- for (int i = *pos; i < strlen(xml); ++i) {
+ for (unsigned long i = *pos; i < strlen(xml); ++i) {
if (check_closing_tag(xml, &i, decoded->tag, &err)) {
if (!err)
*pos = i;
@@ -52,8 +53,9 @@ static map_t *decode_helper(char *xml, int *pos, int *len) {
return decoded;
}
-static char *get_tag(char *xml, int *pos) {
- int len, i;
+static char *get_tag(char *xml, unsigned long *pos) {
+ int len;
+ unsigned long i;
for (i = *pos, len = 0; xml[i] != '>' && i < strlen(xml); ++i, ++len)
;
if (i >= strlen(xml))
@@ -64,8 +66,9 @@ static char *get_tag(char *xml, int *pos) {
return title;
}
-static void set_value(char *xml, int *pos, map_t **map) {
- int len, i;
+static void set_value(char *xml, unsigned long *pos, map_t **map) {
+ int len;
+ unsigned long i;
for (i = *pos, len = 0; xml[i] != '<' && i < strlen(xml); ++i, ++len)
;
if (i >= strlen(xml))
@@ -122,14 +125,14 @@ static attr_t *get_attrs(char *parsed, char **tag, int *n_attrs) {
return attrs;
}
-static void set_tag(char *xml, map_t **map, int *closed, int *pos) {
+static void set_tag(char *xml, map_t **map, int *closed, unsigned long *pos) {
(*pos)++;
(*map)->attrs =
get_attrs(get_tag(xml, pos), &((*map)->tag), &((*map)->n_attrs));
*closed = 0;
}
-static int check_closing_tag(char *xml, int *pos, char *tag, int *err) {
+static int check_closing_tag(char *xml, unsigned long *pos, char *tag, int *err) {
if (!strncmp(xml + *pos, "</", 2)) {
*pos += 2;
char *tmp = get_tag(xml, pos);