diff options
Diffstat (limited to 'parsing.c')
-rw-r--r-- | parsing.c | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -64,19 +64,21 @@ int read_config_line(FILE *f, char *line, const char **value, int bufsize) | |||
64 | 64 | ||
65 | int cgit_read_config(const char *filename, configfn fn) | 65 | int cgit_read_config(const char *filename, configfn fn) |
66 | { | 66 | { |
67 | int ret = 0, len; | 67 | static int nesting; |
68 | int len; | ||
68 | char line[256]; | 69 | char line[256]; |
69 | const char *value; | 70 | const char *value; |
70 | FILE *f = fopen(filename, "r"); | 71 | FILE *f; |
71 | 72 | ||
72 | if (!f) | 73 | /* cancel the reading of yet another configfile after 16 invocations */ |
74 | if (nesting++ > 16) | ||
75 | return -1; | ||
76 | if (!(f = fopen(filename, "r"))) | ||
73 | return -1; | 77 | return -1; |
74 | |||
75 | while((len = read_config_line(f, line, &value, sizeof(line))) > 0) | 78 | while((len = read_config_line(f, line, &value, sizeof(line))) > 0) |
76 | (*fn)(line, value); | 79 | (*fn)(line, value); |
77 | |||
78 | fclose(f); | 80 | fclose(f); |
79 | return ret; | 81 | return 0; |
80 | } | 82 | } |
81 | 83 | ||
82 | char *convert_query_hexchar(char *txt) | 84 | char *convert_query_hexchar(char *txt) |