diff options
Diffstat (limited to 'libattr/attr_copy_action.c')
-rw-r--r-- | libattr/attr_copy_action.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/libattr/attr_copy_action.c b/libattr/attr_copy_action.c index 0d7aca5..2697328 100644 --- a/libattr/attr_copy_action.c +++ b/libattr/attr_copy_action.c @@ -53,7 +53,7 @@ free_attr_actions(void) static int attr_parse_attr_conf(struct error_context *ctx) { - char *text, *t; + char *text = NULL, *t; size_t size_guess = 4096, len; FILE *file; char *pattern = NULL; @@ -64,15 +64,16 @@ attr_parse_attr_conf(struct error_context *ctx) return 0; repeat: - text = malloc(size_guess + 1); - if (!text) - goto fail; - if ((file = fopen(ATTR_CONF, "r")) == NULL) { if (errno == ENOENT) return 0; goto fail; } + + text = malloc(size_guess + 1); + if (!text) + goto fail; + len = fread(text, 1, size_guess, file); if (ferror(file)) goto fail; @@ -80,6 +81,7 @@ repeat: fclose(file); file = NULL; free(text); + text = NULL; size_guess *= 2; goto repeat; } @@ -128,6 +130,7 @@ repeat: t += strcspn(t, "\n"); } + free(text); return 0; parse_error: |