diff --git a/src/librc/librc-misc.c b/src/librc/librc-misc.c index 7244dee..1e1915b 100644 --- a/src/librc/librc-misc.c +++ b/src/librc/librc-misc.c @@ -70,10 +70,8 @@ rc_getline(char **line, size_t *len, FILE *fp) if (fgets(p, BUFSIZ, fp) == NULL) break; last += strlen(p); - if (last && (*line)[last - 1] == '\n') { - (*line)[last - 1] = '\0'; + if (last) break; - } } return last; } diff --git a/src/librc/librc.c b/src/librc/librc.c index a6ff0fe..508567f 100644 --- a/src/librc/librc.c +++ b/src/librc/librc.c @@ -771,15 +771,25 @@ rc_service_value_get(const char *service, const char *option) char *line = NULL; size_t len = 0; char file[PATH_MAX]; + char *value = NULL; snprintf(file, sizeof(file), RC_SVCDIR "/options/%s/%s", service, option); if ((fp = fopen(file, "r"))) { - rc_getline(&line, &len, fp); + while (rc_getline(&line, &len, fp)) { + if (value == NULL) { + value = (char *)xmalloc((len + 1) * sizeof(char)); + strncpy(value, line, (len + 1)); + } + else { + value = (char *)xrealloc(value, ((strlen(value) + len) * sizeof(char))); + strncat(value, line, (len + 1)); + } + } fclose(fp); } - return line; + return value; } librc_hidden_def(rc_service_value_get)