[PATCH 3/4] src/utilities/backend-destroy.c: Fix a PATH_MAX issue.
---
src/utilities/backend-destroy.c | 25 ++++++++++++++++++-------
1 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/src/utilities/backend-destroy.c b/src/utilities/backend-destroy.c
index cb94630..cebd229 100644
--- a/src/utilities/backend-destroy.c
+++ b/src/utilities/backend-destroy.c
@@ -109,21 +109,32 @@ int main(int argc, char *argv[])
}
}
- char lexf[PATH_MAX + 1];
- lexf[PATH_MAX] = '\0';
+ char *lexf = NULL;
+ int lexflen = 0;
int unlinked = 0, errs = 0;
for (fs_segment segment = 0; segment < FS_MAX_SEGMENTS; ++segment) {
- snprintf(lexf, PATH_MAX, "rm -rf " FS_SEG_DIR "*", name, segment);
+ lexflen = snprintf(NULL, 0, "rm -rf " FS_SEG_DIR "*", name, segment)+1;
+ lexf = malloc(lexflen);
+ if (!lexf)
+ return EXIT_FAILURE;
+ snprintf(lexf, lexflen, "rm -rf " FS_SEG_DIR "*", name, segment);
system(lexf);
- snprintf(lexf, PATH_MAX, FS_SEG_DIR, name, segment);
+ snprintf(lexf, lexflen, FS_SEG_DIR, name, segment);
unlinked += delete_it(lexf, &errs);
+ free(lexf);
}
- snprintf(lexf, PATH_MAX, FS_KB_DIR "metadata.nt", name);
+ /* This should be enough memory for the next three calls to snprintf(). */
+ lexflen = snprintf(NULL, 0, FS_KB_DIR "metadata.nt", name) + 1;
+ lexf = malloc(lexflen);
+ if (!lexf)
+ return EXIT_FAILURE;
+ snprintf(lexf, lexflen, FS_KB_DIR "metadata.nt", name);
unlinked += delete_it(lexf, &errs);
- snprintf(lexf, PATH_MAX, FS_KB_DIR "backup", name);
+ snprintf(lexf, lexflen, FS_KB_DIR "backup", name);
unlinked += delete_it(lexf, &errs);
- snprintf(lexf, PATH_MAX, FS_KB_DIR, name);
+ snprintf(lexf, lexflen, FS_KB_DIR, name);
unlinked += delete_it(lexf, &errs);
+ free(lexf);
if (unlinked > 0 && !errs) fs_error(LOG_INFO, "deleted data files for KB %s", name);
--
1.7.9.1
Reply to: