[PATCH 4/4] src/utilities/backend-copy.c: Fix a PATH_MAX issue.
---
src/utilities/backend-copy.c | 17 +++++++++++++----
1 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/src/utilities/backend-copy.c b/src/utilities/backend-copy.c
index 92917c1..f8d1e23 100644
--- a/src/utilities/backend-copy.c
+++ b/src/utilities/backend-copy.c
@@ -105,9 +105,12 @@ int main(int argc, char *argv[])
}
}
- char lexf[PATH_MAX + 1];
- lexf[PATH_MAX] = '\0';
- snprintf(lexf, PATH_MAX, FS_STORE_ROOT "/%s", tokb);
+ char *lexf = NULL;
+ int lexflen = snprintf(NULL, 0, FS_STORE_ROOT "/%s", tokb) + 1;
+ lexf = malloc(lexflen);
+ if (!lexf)
+ return EXIT_FAILURE;
+ snprintf(lexf, lexflen, FS_STORE_ROOT "/%s", tokb);
int result = mkdir(lexf, 0777);
if (result) {
@@ -119,13 +122,19 @@ int main(int argc, char *argv[])
return 3;
}
- snprintf(lexf, PATH_MAX, "cp -a " FS_KB_DIR "* " FS_STORE_ROOT "/%s", fromkb, tokb);
+ lexflen = snprintf(NULL, 0, "cp -a " FS_KB_DIR "* " FS_STORE_ROOT "/%s", fromkb, tokb) + 1;
+ lexf = realloc(lexf, lexflen);
+ if (!lexf)
+ return EXIT_FAILURE;
+ snprintf(lexf, lexflen, "cp -a " FS_KB_DIR "* " FS_STORE_ROOT "/%s", fromkb, tokb);
if (verbosity) printf("executing %s\n", lexf);
if (system(lexf)) {
fs_error(LOG_ERR, "problem while copying data files from “%s” to “%s”", fromkb, tokb);
return 4;
}
+ free(lexf);
+
/* fix up */
fs_metadata *meta = fs_metadata_open(tokb);
--
1.7.9.1
Reply to: