diff --git a/src/helpers.h b/src/helpers.h index 53bfcf81..418e39b4 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -25,7 +25,9 @@ #ifndef FINIT_HELPERS_H_ #define FINIT_HELPERS_H_ +#include #include +#include #include #include #include /* Not included by default in musl libc */ @@ -114,6 +116,45 @@ static inline int dprint(int fd, const char *s, size_t len) return rc; } +static inline char *fgetval(char *line, const char *key, char *sep) +{ + char *ptr, *str, *copy; + size_t len; + + str = copy = strdup(line); + if (!copy) + return NULL; + + ptr = strsep(&str, sep); + if (ptr && strcmp(ptr, key)) { + fail: + free(copy); + return NULL; + } + + ptr = strsep(&str, sep); + if (!ptr) + goto fail; + + if (*ptr == '"' || *ptr == '\'') { + char *end = &ptr[strlen(ptr) - 1]; + char q = *ptr; + + while (end > ptr && isspace(*end)) + *end-- = 0; + + if (*end == q) { + *end = 0; + ptr++; + } + } + + len = strlen(ptr) + 1; + memmove(copy, ptr, len); + + return realloc(copy, len); +} + #endif /* FINIT_HELPERS_H_ */ /** diff --git a/src/initctl.c b/src/initctl.c index 4cef6de6..9f0420b0 100644 --- a/src/initctl.c +++ b/src/initctl.c @@ -1363,32 +1363,6 @@ static int cmd_parse(int argc, char *argv[], struct cmd *command) return command[0].cb(NULL); /* default cmd */ } -static char *fgetval(char *line, const char *key, char *sep) -{ - char *ptr, *str, *copy; - size_t len; - - str = copy = strdup(line); - if (!copy) - return NULL; - - ptr = strsep(&str, sep); - if (ptr && strcmp(ptr, key)) { - fail: - free(copy); - return NULL; - } - - ptr = strsep(&str, sep); - if (!ptr) - goto fail; - - len = strlen(ptr) + 1; - memmove(copy, ptr, len); - - return realloc(copy, len); -} - static void cleanup(void) { if (finit_conf)