From c82e4beee3c3a6c353f988fbc3788d0a3e12e72e Mon Sep 17 00:00:00 2001 From: Mike Jones Date: Wed, 24 Sep 2025 12:09:40 -0400 Subject: [PATCH] Fix: Respect -t temporary directory option in sorting operations (#368) Enhance fqsort function to accept a temporary directory parameter for file handling. Update calls to fqsort in main.cpp, sort.cpp, sort.hpp, and unit.cpp to utilize the new parameter, ensuring temporary files are created in the specified directory. --- main.cpp | 4 ++-- sort.cpp | 10 +++++----- sort.hpp | 2 +- unit.cpp | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/main.cpp b/main.cpp index d3ee44c6..21b80036 100644 --- a/main.cpp +++ b/main.cpp @@ -2018,7 +2018,7 @@ std::pair read_input(std::vector &sources, char *fname, i vertex_readers.push_back(readers[i].vertexfile); rewind(readers[i].vertexfile); } - fqsort(vertex_readers, sizeof(vertex), vertexcmp, vertex_out, memsize / 20); + fqsort(vertex_readers, sizeof(vertex), vertexcmp, vertex_out, memsize / 20, tmpdir); for (size_t i = 0; i < CPUS; i++) { if (fclose(readers[i].vertexfile) != 0) { @@ -2087,7 +2087,7 @@ std::pair read_input(std::vector &sources, char *fname, i rewind(readers[i].nodefile); } - fqsort(node_readers, sizeof(node), nodecmp, node_out, memsize / 20); + fqsort(node_readers, sizeof(node), nodecmp, node_out, memsize / 20, tmpdir); for (size_t i = 0; i < CPUS; i++) { if (fclose(readers[i].nodefile) != 0) { diff --git a/sort.cpp b/sort.cpp index c5350c8b..0c61e395 100644 --- a/sort.cpp +++ b/sort.cpp @@ -6,7 +6,7 @@ #define MAX_MEMORY (1024 * 1024 * 1024) // 1 GB -void fqsort(std::vector &inputs, size_t width, int (*cmp)(const void *, const void *), FILE *out, size_t mem) { +void fqsort(std::vector &inputs, size_t width, int (*cmp)(const void *, const void *), FILE *out, size_t mem, const char *tmpdir) { std::string pivot; FILE *fp1, *fp2; @@ -67,8 +67,8 @@ void fqsort(std::vector &inputs, size_t width, int (*cmp)(const void *, size_t pivot_off = width * (buf.size() / width / 2); pivot = std::string(buf, pivot_off, width); - std::string t1 = "/tmp/sort1.XXXXXX"; - std::string t2 = "/tmp/sort2.XXXXXX"; + std::string t1 = std::string(tmpdir) + "/sort1.XXXXXX"; + std::string t2 = std::string(tmpdir) + "/sort2.XXXXXX"; int fd1 = mkstemp((char *) t1.c_str()); unlink(t1.c_str()); @@ -117,11 +117,11 @@ void fqsort(std::vector &inputs, size_t width, int (*cmp)(const void *, std::vector v1; v1.emplace_back(fp1); - fqsort(v1, width, cmp, out, mem); + fqsort(v1, width, cmp, out, mem, tmpdir); fclose(fp1); std::vector v2; v2.emplace_back(fp2); - fqsort(v2, width, cmp, out, mem); + fqsort(v2, width, cmp, out, mem, tmpdir); fclose(fp2); } diff --git a/sort.hpp b/sort.hpp index cfae2cf9..fe6dc113 100644 --- a/sort.hpp +++ b/sort.hpp @@ -1,6 +1,6 @@ #ifndef SORT_HPP #define SORT_HPP -void fqsort(std::vector &inputs, size_t width, int (*cmp)(const void *, const void *), FILE *out, size_t mem); +void fqsort(std::vector &inputs, size_t width, int (*cmp)(const void *, const void *), FILE *out, size_t mem, const char *tmpdir); #endif diff --git a/unit.cpp b/unit.cpp index 7f70298f..fff6b7c4 100644 --- a/unit.cpp +++ b/unit.cpp @@ -73,7 +73,7 @@ TEST_CASE("External quicksort", "fqsort") { unlink(tmpname.c_str()); FILE *f = fdopen(fd, "w+b"); - fqsort(inputs, sizeof(int), intcmp, f, 256); + fqsort(inputs, sizeof(int), intcmp, f, 256, "/tmp"); rewind(f); int prev = INT_MIN;