config: Remove use of %m sscanf format specifier
The %m format specifier isn't defined by the C standards and so produces
an error under CFLAGS=`-pedantic -Werror`.
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
Change-Id: I7fd818582472ced3f8e6adc2ea5d545b5b7dc020
diff --git a/config.c b/config.c
index 51ab0f3..5cdd76b 100644
--- a/config.c
+++ b/config.c
@@ -16,6 +16,7 @@
#include <ctype.h>
#include <err.h>
+#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <stdint.h>
@@ -58,10 +59,10 @@
struct config_item *item;
char *name, *value;
char *p, *line;
- int rc;
for (p = NULL, line = strtok_r(buf, "\n", &p); line;
line = strtok_r(NULL, "\n", &p)) {
+ int rc;
/* trim leading space */
for (;*line == ' ' || *line == '\t'; line++)
@@ -71,10 +72,15 @@
if (*line == '#')
continue;
- name = value = NULL;
+ name = malloc(strlen(line));
+ value = malloc(strlen(line));
+ if (name && value) {
+ rc = sscanf(line, "%[^ =] = %s ", name, value);
+ } else {
+ rc = -ENOMEM;
+ }
- rc = sscanf(line, "%m[^ =] = %ms ", &name, &value);
- if (rc != 2 || !strlen(name) || !strlen(value)) {
+ if (rc != 2) {
free(name);
free(value);
continue;