[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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