- size_t pos;
-
- do {
- pos = 0;
- do {
- if (*result_len - pos < 10) {
- char *newstr = xrealloc(*result, *result_len * 2 + 80);
- *result = newstr;
- *result_len = *result_len * 2 + 80;
- }
-
- if (!fgets(*result + pos, *result_len - pos, f)) {
- if (ferror(f) == 0 && pos == 0)
- return 0;
- if (ferror(f) != 0)
- return 0;
- }
- pos += xstrlen(*result + pos);
- } while (pos == *result_len - 1 && (*result)[pos - 1] != '\n');
-
- if (pos != 0 && (*result)[pos - 1] == '\n') {
- (*result)[--pos] = '\0';
- }
-
- (*line)++;
- {
- int first = 0;
-
- while (isspace((*result)[first]) && (*result)[first]) {
- first++;
- }
-
- memmove(*result, *result + first, pos - first + 1);
- pos -= first;
- }
- } while ((*result)[0] == '#');
-
- while ((*result)[pos - 1] == '\\') {
- (*result)[--pos] = '\0';
- do {
- if (*result_len - pos < 10) {
- char *newstr = xrealloc(*result, *result_len * 2 + 80);
- *result = newstr;
- *result_len = *result_len * 2 + 80;
- }
-
- if (!fgets(*result + pos, *result_len - pos, f)) {
- if (ferror(f) == 0 && pos == 0)
- return 0;
- if (ferror(f) != 0)
- return 0;
- }
- pos += xstrlen(*result + pos);
- } while (pos == *result_len - 1 && (*result)[pos - 1] != '\n');
-
- if (pos != 0 && (*result)[pos - 1] == '\n') {
- (*result)[--pos] = '\0';