---
 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


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: 
http://lists.debian.org/[email protected]

Reply via email to