From 3d532402e5d58312a81d8e01600f67ca66b5d413 Mon Sep 17 00:00:00 2001 From: AJR Date: Thu, 16 Feb 2023 20:08:15 -0500 Subject: regrep.cpp: Code cleanup - Eliminate use of sprintf to construct temporary strings - Pass string views instead of string references wherever convenient - Use util::path_concat for building paths --- src/tools/regrep.cpp | 70 +++++++++++++++++++++++++--------------------------- 1 file changed, 34 insertions(+), 36 deletions(-) diff --git a/src/tools/regrep.cpp b/src/tools/regrep.cpp index 11f1fb861dc..fd6f002ac89 100644 --- a/src/tools/regrep.cpp +++ b/src/tools/regrep.cpp @@ -8,7 +8,9 @@ #include "corefile.h" #include "corestr.h" +#include "path.h" #include "png.h" +#include "strformat.h" #include "osdcomm.h" @@ -20,9 +22,6 @@ #include -using util::string_format; - - /*************************************************************************** CONSTANTS & DEFINES ***************************************************************************/ @@ -155,15 +154,15 @@ static int CLIB_DECL compare_file(const void *file0ptr, const void *file1ptr); static summary_file *sort_file_list(void); /* HTML helpers */ -static util::core_file::ptr create_file_and_output_header(std::string &filename, std::string &templatefile, std::string &title); -static void output_footer_and_close_file(util::write_stream::ptr &&file, std::string &templatefile, std::string &title); +static util::core_file::ptr create_file_and_output_header(std::string_view filename, std::string_view templatefile, const std::string &title); +static void output_footer_and_close_file(util::write_stream::ptr &&file, std::string_view templatefile, const std::string &title); /* report generators */ -static void output_report(std::string &dirname, std::string &tempheader, std::string &tempfooter, summary_file *filelist); +static void output_report(std::string_view dirname, std::string_view tempheader, std::string_view tempfooter, summary_file *filelist); static int compare_screenshots(summary_file *curfile); -static int generate_png_diff(const summary_file *curfile, std::string &destdir, const char *destname); -static void create_linked_file(std::string &dirname, const summary_file *curfile, const summary_file *prevfile, const summary_file *nextfile, const char *pngfile, std::string &tempheader, std::string &tempfooter); -static void append_driver_list_table(const char *header, std::string &dirname, util::core_file &indexfile, const summary_file *listhead, std::string &tempheader, std::string &tempfooter); +static int generate_png_diff(const summary_file *curfile, std::string_view destdir, std::string_view destname); +static void create_linked_file(std::string_view dirname, const summary_file *curfile, const summary_file *prevfile, const summary_file *nextfile, std::string_view pngfile, std::string_view tempheader, std::string_view tempfooter); +static void append_driver_list_table(const char *header, std::string_view dirname, util::core_file &indexfile, const summary_file *listhead, std::string_view tempheader, std::string_view tempfooter); @@ -242,7 +241,7 @@ int main(int argc, char *argv[]) /* read the template file into an astring */ std::string tempheader; - if (!util::core_file::load(tempfilename.c_str(), &buffer, bufsize)) + if (!util::core_file::load(tempfilename, &buffer, bufsize)) { tempheader.assign((const char *)buffer, bufsize); free(buffer); @@ -567,7 +566,7 @@ static summary_file *sort_file_list(void) HTML file with a standard header -------------------------------------------------*/ -static util::core_file::ptr create_file_and_output_header(std::string &filename, std::string &templatefile, std::string &title) +static util::core_file::ptr create_file_and_output_header(std::string_view filename, std::string_view templatefile, const std::string &title) { util::core_file::ptr file; @@ -577,7 +576,7 @@ static util::core_file::ptr create_file_and_output_header(std::string &filename, /* print a header */ std::string modified(templatefile); - strreplace(modified, "", title.c_str()); + strreplace(modified, "", title); std::size_t written; file->write(modified.c_str(), modified.length(), written); // FIXME: check for errors @@ -591,10 +590,10 @@ static util::core_file::ptr create_file_and_output_header(std::string &filename, standard footer to an HTML file and close it -------------------------------------------------*/ -static void output_footer_and_close_file(util::write_stream::ptr &&file, std::string &templatefile, std::string &title) +static void output_footer_and_close_file(util::write_stream::ptr &&file, std::string_view templatefile, const std::string &title) { std::string modified(templatefile); - strreplace(modified, "", title.c_str()); + strreplace(modified, "", title); std::size_t written; file->write(modified.c_str(), modified.length(), written); // FIXME: check for errors file.reset(); @@ -611,7 +610,7 @@ static void output_footer_and_close_file(util::write_stream::ptr &&file, std::st report HTML files -------------------------------------------------*/ -static void output_report(std::string &dirname, std::string &tempheader, std::string &tempfooter, summary_file *filelist) +static void output_report(std::string_view dirname, std::string_view tempheader, std::string_view tempfooter, summary_file *filelist) { summary_file *buckethead[BUCKET_COUNT], **buckettailptr[BUCKET_COUNT]; summary_file *curfile; @@ -694,7 +693,7 @@ static void output_report(std::string &dirname, std::string &tempheader, std::st *buckettailptr[bucknum] = nullptr; /* output header */ - std::string tempname = string_format("%s" PATH_SEPARATOR "%s", dirname.c_str(), "index.html"); + std::string tempname = util::path_concat(dirname, "index.html"); indexfile = create_file_and_output_header(tempname, tempheader, title); if (!indexfile) { @@ -739,7 +738,7 @@ static int compare_screenshots(summary_file *curfile) util::core_file::ptr file; /* get the filename for the image */ - fullname = string_format("%s" PATH_SEPARATOR "snap" PATH_SEPARATOR "%s" PATH_SEPARATOR "final.png", lists[listnum].dir, curfile->name); + fullname = util::path_concat(lists[listnum].dir, "snap", curfile->name, "final.png"); /* open the file */ filerr = util::core_file::open(fullname, OPEN_FLAG_READ, file); @@ -748,7 +747,7 @@ static int compare_screenshots(summary_file *curfile) if (filerr) { /* get the filename for the image */ - fullname = string_format("%s" PATH_SEPARATOR "snap" PATH_SEPARATOR "_%s.png", lists[listnum].dir, curfile->name); + fullname = util::path_concat(lists[listnum].dir, "snap", util::string_format("_%s.png", curfile->name)); /* open the file */ filerr = util::core_file::open(fullname, OPEN_FLAG_READ, file); @@ -834,7 +833,7 @@ static int compare_screenshots(summary_file *curfile) side with a third set of differences -------------------------------------------------*/ -static int generate_png_diff(const summary_file *curfile, std::string &destdir, const char *destname) +static int generate_png_diff(const summary_file *curfile, std::string_view destdir, std::string_view destname) { bitmap_argb32 bitmaps[MAX_COMPARES]; std::string srcimgname; @@ -848,14 +847,14 @@ static int generate_png_diff(const summary_file *curfile, std::string &destdir, int starty; /* generate the common source filename */ - dstfilename = string_format("%s" PATH_SEPARATOR "%s", destdir.c_str(), destname); - srcimgname = string_format("snap" PATH_SEPARATOR "%s" PATH_SEPARATOR "final.png", curfile->name); + dstfilename = util::path_concat(destdir, destname); + srcimgname = util::path_concat("snap", curfile->name, "final.png"); /* open and load all unique bitmaps */ for (int listnum = 0; listnum < list_count; listnum++) if (curfile->matchbitmap[listnum] == listnum) { - std::string tempname = string_format("%s" PATH_SEPARATOR "%s", lists[listnum].dir, srcimgname.c_str()); + std::string tempname = util::path_concat(lists[listnum].dir, srcimgname); /* open the source image */ filerr = util::core_file::open(tempname, OPEN_FLAG_READ, file); @@ -952,7 +951,7 @@ error: file between differing versions -------------------------------------------------*/ -static void create_linked_file(std::string &dirname, const summary_file *curfile, const summary_file *prevfile, const summary_file *nextfile, const char *pngfile, std::string &tempheader, std::string &tempfooter) +static void create_linked_file(std::string_view dirname, const summary_file *curfile, const summary_file *prevfile, const summary_file *nextfile, std::string_view pngfile, std::string_view tempheader, std::string_view tempfooter) { std::string linkname; std::string filename; @@ -961,11 +960,11 @@ static void create_linked_file(std::string &dirname, const summary_file *curfile int listnum; /* create the filename */ - filename = string_format("%s.html", curfile->name); + filename = util::string_format("%s.html", curfile->name); /* output header */ - title = string_format("%s Regressions (%s)", curfile->name, curfile->source); - linkname = string_format("%s" PATH_SEPARATOR "%s", dirname.c_str(), filename.c_str()); + title = util::string_format("%s Regressions (%s)", curfile->name, curfile->source); + linkname = util::path_concat(dirname, filename); linkfile = create_file_and_output_header(linkname, tempheader, title); if (linkfile == nullptr) { @@ -997,7 +996,7 @@ static void create_linked_file(std::string &dirname, const summary_file *curfile linkfile->printf("\n\t

%s

\n", lists[listnum].version); linkfile->printf("\t

\n"); linkfile->printf("\tStatus: %s\n", status_text[curfile->status[listnum]]); - if (pngfile != nullptr) + if (!pngfile.empty()) imageindex = get_unique_index(curfile, listnum); if (imageindex != -1) linkfile->printf(" [%d]", imageindex); @@ -1006,13 +1005,13 @@ static void create_linked_file(std::string &dirname, const summary_file *curfile { linkfile->printf("\t

\n"); linkfile->printf("\tErrors:\n"); - linkfile->printf("\t

%s
\n", curfile->text[listnum].c_str()); + linkfile->printf("\t
%s
\n", curfile->text[listnum]); linkfile->printf("\t

\n"); } } /* output link to the image */ - if (pngfile != nullptr) + if (!pngfile.empty()) { linkfile->printf("\n\t

Screenshot Comparisons

\n"); linkfile->printf("\t

\n"); @@ -1030,7 +1029,7 @@ static void create_linked_file(std::string &dirname, const summary_file *curfile of drivers from a list to an HTML file -------------------------------------------------*/ -static void append_driver_list_table(const char *header, std::string &dirname, util::core_file &indexfile, const summary_file *listhead, std::string &tempheader, std::string &tempfooter) +static void append_driver_list_table(const char *header, std::string_view dirname, util::core_file &indexfile, const summary_file *listhead, std::string_view tempheader, std::string_view tempfooter) { const summary_file *curfile, *prevfile; int width = 100 / (2 + list_count); @@ -1058,7 +1057,6 @@ static void append_driver_list_table(const char *header, std::string &dirname, u for (prevfile = nullptr, curfile = listhead; curfile != nullptr; prevfile = curfile, curfile = curfile->next) { int rowspan = 0, uniqueshots = 0; - char pngdiffname[40]; /* if this is the first entry in this source file, count how many rows we need to span */ if (prevfile == nullptr || strcmp(prevfile->source, curfile->source) != 0) @@ -1072,19 +1070,19 @@ static void append_driver_list_table(const char *header, std::string &dirname, u } /* create screenshots if necessary */ - pngdiffname[0] = 0; + std::string pngdiffname; for (listnum = 0; listnum < list_count; listnum++) if (curfile->matchbitmap[listnum] == listnum) uniqueshots++; if (uniqueshots > 1) { - sprintf(pngdiffname, "compare_%s.png", curfile->name); + pngdiffname = util::string_format("compare_%s.png", curfile->name); if (generate_png_diff(curfile, dirname, pngdiffname) != 0) - pngdiffname[0] = 0; + pngdiffname.clear(); } /* create a linked file */ - create_linked_file(dirname, curfile, prevfile, curfile->next, (pngdiffname[0] == 0) ? nullptr : pngdiffname, tempheader, tempfooter); + create_linked_file(dirname, curfile, prevfile, curfile->next, pngdiffname, tempheader, tempfooter); /* create a row */ indexfile.printf("\t\t\n\t\t\t"); @@ -1095,7 +1093,7 @@ static void append_driver_list_table(const char *header, std::string &dirname, u { int unique_index = -1; - if (pngdiffname[0] != 0) + if (!pngdiffname.empty()) unique_index = get_unique_index(curfile, listnum); if (unique_index != -1) indexfile.printf("    %s [%d]", status_color[curfile->status[listnum]], status_text[curfile->status[listnum]], pngdiffname, unique_index); -- cgit v1.2.3