summaryrefslogtreecommitdiff
path: root/config.c
diff options
context:
space:
mode:
authormrb0nk500 <b0nk@b0nk.xyz>2021-06-05 20:35:12 -0400
committermrb0nk500 <b0nk@b0nk.xyz>2021-06-05 20:35:12 -0400
commitac402aa9aecc9a07d4615fcda1cba28fb6bc0600 (patch)
treec1f07754b56491cc030f39a256bb6a7cd283484d /config.c
parent2a9a76b3e7ebfa4c56a0f37074e90bdb7a90533a (diff)
Replace `find_line()` with `get_line()`.
The loop body was also changed accordingly. This was done to make the config parser easier to read.
Diffstat (limited to 'config.c')
-rw-r--r--config.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/config.c b/config.c
index fc5f6bd..948c3a5 100644
--- a/config.c
+++ b/config.c
@@ -59,9 +59,18 @@ char *read_file(const char *filename, long *size) {
return buf;
}
-char *find_line(char *str) {
- for (; *str != '\n' && *str != '\0'; str++);
- return str;
+char *get_line(char **str) {
+ char *s;
+ size_t i;
+
+ for (i = 0; *str[i] != '\n' && *str[i] != '\0'; i++);
+
+ s = malloc(i+1);
+ memset(s, 0, i+1);
+ memcpy(s, *str, i);
+
+ str += i;
+ return s;
}
config *parse_config(const char *filename) {
@@ -85,7 +94,8 @@ config *parse_config(const char *filename) {
return NULL;
}
- for (; *buf != '\0'; buf = find_line(buf)) {
+ while (*buf != '\0') {
+ char *line = get_line(&buf);
char *value;
char *name = strtok_r(buf, "=", &value);
}