diff options
-rw-r--r-- | src/settings.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/settings.c b/src/settings.c index 115a71c..5731577 100644 --- a/src/settings.c +++ b/src/settings.c @@ -201,9 +201,8 @@ void BarSettingsRead (BarSettings_t *settings) { for (size_t j = 0; j < sizeof (configfiles) / sizeof (*configfiles); j++) { static const char *formatMsgPrefix = "format_msg_"; FILE *configfd; - /* getline allocates these on the first run */ - char *line = NULL; - size_t lineLen = 0, lineNum = 0; + char line[512]; + size_t lineNum = 0; char * const path = BarGetXdgConfigDir (configfiles[j]); assert (path != NULL); @@ -214,11 +213,16 @@ void BarSettingsRead (BarSettings_t *settings) { while (1) { ++lineNum; - ssize_t ret = getline (&line, &lineLen, configfd); - if (ret == -1) { + char * const ret = fgets (line, sizeof (line), configfd); + if (ret == NULL) { /* EOF or error */ break; } + if (strchr (line, '\n') == NULL && !feof (configfd)) { + BarUiMsg (settings, MSG_INFO, "Line %s:%zu too long, " + "ignoring\n", path, lineNum); + continue; + } /* parse lines that match "^\s*(.*?)\s?=\s?(.*)$". Windows and Unix * line terminators are supported. */ char *key = line; @@ -410,7 +414,6 @@ void BarSettingsRead (BarSettings_t *settings) { fclose (configfd); free (path); - free (line); } /* check environment variable if proxy is not set explicitly */ |