From a5ffef40b0124a88c3ad3b9f3a8c27922f54f11f Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Wed, 6 Dec 2023 08:18:28 +0000 Subject: - Use std::string for pattern to avoid apparent gcc13 bug incorrectly thinking pattern can become nullptr. --- fbench/src/splitfile/splitfile.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/fbench/src/splitfile/splitfile.cpp b/fbench/src/splitfile/splitfile.cpp index 8eddc163463..18005e9ce42 100644 --- a/fbench/src/splitfile/splitfile.cpp +++ b/fbench/src/splitfile/splitfile.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include /** @@ -16,22 +17,21 @@ int main(int argc, char** argv) { // parameters with default values. - const char *pattern = "query%03d.txt"; + std::string pattern = "query%03d.txt"; int linebufsize = 10240; // parse options and override defaults. int opt; - bool optError; + bool optError = false; - optError = false; while((opt = getopt(argc, argv, "p:m:")) != -1) { switch(opt) { case 'p': - pattern = optarg; - if (pattern == nullptr) { + if (optarg == nullptr) { printf("Missing 'pattern' argument to -p option !\n"); return -1; } + pattern = optarg; break; case 'm': linebufsize = atoi(optarg); @@ -65,10 +65,6 @@ main(int argc, char** argv) return -1; } - int i; - int res; - std::vector linebuf(linebufsize); - char filename[1024]; std::unique_ptr input = std::make_unique(); std::vector> output; @@ -86,8 +82,10 @@ main(int argc, char** argv) // open output files output.reserve(outcnt); - for (i = 0; i < outcnt; i++) { - snprintf(filename, 1024, pattern, i); + for (int i = 0; i < outcnt; i++) { + char filename[1024]; + int written = snprintf(filename, sizeof(filename), pattern.c_str(), i); + assert(written < int(sizeof(filename))); output.emplace_back(std::make_unique(filename, std::ofstream::out | std::ofstream::binary | std::ofstream::trunc)); if (! output.back()) { printf("could not open output file: %s\n", filename); @@ -97,11 +95,13 @@ main(int argc, char** argv) } // split file + std::vector linebuf(linebufsize); + int res; while ((res = input->ReadLine(&linebuf[0], linebufsize - 1)) >= 0) { if (res < linebufsize - 1) { linebuf[res] = '\n'; linebuf[res + 1] = '\0'; // just in case - i = random() % outcnt; + int i = random() % outcnt; if (!output[i]->write(&linebuf[0], res + 1)) { printf("error writing to file '%d'\n", i); } -- cgit v1.2.3