From a3635e22af63ac4c0f87c7be5ed0a332b3886936 Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Thu, 28 Feb 2019 13:03:22 +0000 Subject: [PATCH] Repair double slash in configfile location on Macs. Add some protection against a NULL dirp. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4193 --- src/misc/cross.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/misc/cross.cpp b/src/misc/cross.cpp index 80b2324b..8fbefbfc 100644 --- a/src/misc/cross.cpp +++ b/src/misc/cross.cpp @@ -85,7 +85,7 @@ void Cross::CreatePlatformConfigDir(std::string& in) { in += "\\DOSBox"; mkdir(in.c_str()); #elif defined(MACOSX) - in = "~/Library/Preferences/"; + in = "~/Library/Preferences"; ResolveHomedir(in); //Don't create it. Assume it exists #else @@ -155,6 +155,7 @@ dir_information* open_directory(const char* dirname) { } bool read_directory_first(dir_information* dirp, char* entry_name, bool& is_directory) { + if (!dirp) return false; dirp->handle = FindFirstFile(dirp->base_path, &dirp->search_data); if (INVALID_HANDLE_VALUE == dirp->handle) { return false; @@ -169,6 +170,7 @@ bool read_directory_first(dir_information* dirp, char* entry_name, bool& is_dire } bool read_directory_next(dir_information* dirp, char* entry_name, bool& is_directory) { + if (!dirp) return false; int result = FindNextFile(dirp->handle, &dirp->search_data); if (result==0) return false; @@ -181,7 +183,7 @@ bool read_directory_next(dir_information* dirp, char* entry_name, bool& is_direc } void close_directory(dir_information* dirp) { - if (dirp->handle != INVALID_HANDLE_VALUE) { + if (dirp && dirp->handle != INVALID_HANDLE_VALUE) { FindClose(dirp->handle); dirp->handle = INVALID_HANDLE_VALUE; } @@ -197,10 +199,12 @@ dir_information* open_directory(const char* dirname) { } bool read_directory_first(dir_information* dirp, char* entry_name, bool& is_directory) { + if (!dirp) return false; return read_directory_next(dirp,entry_name,is_directory); } bool read_directory_next(dir_information* dirp, char* entry_name, bool& is_directory) { + if (!dirp) return false; struct dirent* dentry = readdir(dirp->dir); if (dentry==NULL) { return false; @@ -236,7 +240,7 @@ bool read_directory_next(dir_information* dirp, char* entry_name, bool& is_direc } void close_directory(dir_information* dirp) { - closedir(dirp->dir); + if (dirp) closedir(dirp->dir); } #endif