From bdf2059bf4bfb44b2ac2e55fbfb18408aba6d59d Mon Sep 17 00:00:00 2001 From: Nathan Woods Date: Mon, 4 Jul 2016 23:22:37 -0400 Subject: [PATCH] As per Vas Crabb, readding overloads that take a std::string& parameter for the result --- src/emu/diimage.cpp | 2 +- src/frontend/mame/ui/imgcntrl.cpp | 2 +- src/lib/util/zippath.cpp | 49 +++++++++++++++++++++++++++---- src/lib/util/zippath.h | 3 ++ 4 files changed, 48 insertions(+), 8 deletions(-) diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp index 120147a7d79..ebf7804fbad 100644 --- a/src/emu/diimage.cpp +++ b/src/emu/diimage.cpp @@ -156,7 +156,7 @@ void device_image_interface::device_compute_hash(hash_collection &hashes, const image_error_t device_image_interface::set_image_filename(const char *filename) { m_image_name = filename; - m_working_directory = util::zippath_parent(filename); + util::zippath_parent(m_working_directory, filename); m_basename.assign(m_image_name); int loc1 = m_image_name.find_last_of('\\'); diff --git a/src/frontend/mame/ui/imgcntrl.cpp b/src/frontend/mame/ui/imgcntrl.cpp index 3fae7859c4c..f58fb81bc33 100644 --- a/src/frontend/mame/ui/imgcntrl.cpp +++ b/src/frontend/mame/ui/imgcntrl.cpp @@ -61,7 +61,7 @@ menu_control_device_image::menu_control_device_image(mame_ui_manager &mui, rende if (image->exists()) { m_current_file.assign(image->filename()); - m_current_directory = util::zippath_parent(m_current_file.c_str()); + util::zippath_parent(m_current_directory, m_current_file.c_str()); } else m_current_directory.assign(image->working_directory()); diff --git a/src/lib/util/zippath.cpp b/src/lib/util/zippath.cpp index 9ac9df5979a..1a13bfe7784 100644 --- a/src/lib/util/zippath.cpp +++ b/src/lib/util/zippath.cpp @@ -140,12 +140,11 @@ static void parse_parent_path(const char *path, int *beginpos, int *endpos) // zippath_parent - retrieves the parent directory // ------------------------------------------------- -std::string zippath_parent(const char *path) +std::string &zippath_parent(std::string &dst, const char *path) { int pos; parse_parent_path(path, &pos, nullptr); - std::string dst; if (pos >= 0) dst.assign(path, pos + 1); else @@ -155,6 +154,19 @@ std::string zippath_parent(const char *path) +// ------------------------------------------------- +// zippath_parent - retrieves the parent directory +// ------------------------------------------------- + +std::string zippath_parent(const char *path) +{ + std::string result; + zippath_parent(result, path); + return result; +} + + + // ------------------------------------------------- // zippath_parent_basename - retrieves the parent // directory basename @@ -171,9 +183,8 @@ std::string zippath_parent(const char *path) * @return A std::string& */ -std::string zippath_parent_basename(const char *path) +std::string &zippath_parent_basename(std::string &dst, const char *path) { - std::string dst; int beginpos, endpos; parse_parent_path(path, &beginpos, &endpos); dst.copy((char*)(path + beginpos + 1), endpos - beginpos); @@ -182,6 +193,20 @@ std::string zippath_parent_basename(const char *path) +// ------------------------------------------------- +// zippath_parent_basename - retrieves the parent +// directory basename +// ------------------------------------------------- + +std::string zippath_parent_basename(const char *path) +{ + std::string result; + zippath_parent_basename(result, path); + return result; +} + + + // ------------------------------------------------- // zippath_combine - combines two paths // ------------------------------------------------- @@ -198,9 +223,8 @@ std::string zippath_parent_basename(const char *path) * @return A std::string& */ -std::string zippath_combine(const char *path1, const char *path2) +std::string &zippath_combine(std::string &dst, const char *path1, const char *path2) { - std::string dst; if (!strcmp(path2, ".")) { dst.assign(path1); @@ -226,6 +250,19 @@ std::string zippath_combine(const char *path1, const char *path2) +// ------------------------------------------------- +// zippath_combine - combines two paths +// ------------------------------------------------- + +std::string zippath_combine(const char *path1, const char *path2) +{ + std::string result; + zippath_combine(result, path1, path2); + return result; +} + + + /*************************************************************************** FILE OPERATIONS ***************************************************************************/ diff --git a/src/lib/util/zippath.h b/src/lib/util/zippath.h index a22ce873364..d0b017f86eb 100644 --- a/src/lib/util/zippath.h +++ b/src/lib/util/zippath.h @@ -34,12 +34,15 @@ class zippath_directory; // ----- path operations ----- // retrieves the parent directory +std::string &zippath_parent(std::string &dst, const char *path); std::string zippath_parent(const char *path); // retrieves the parent directory basename +std::string &zippath_parent_basename(std::string &dst, const char *path); std::string zippath_parent_basename(const char *path); // combines two paths +std::string &zippath_combine(std::string &dst, const char *path1, const char *path2); std::string zippath_combine(const char *path1, const char *path2);