summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/file/winfile.cpp
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2016-06-25 03:00:31 +1000
committer Vas Crabb <vas@vastheman.com>2016-06-25 03:35:23 +1000
commit5cee9e9bc4fe03dc561d3a7a87ecadcf89743e2b (patch)
tree84c962bcfb8f0fdfd73d6b4e317f140034958ce3 /src/osd/modules/file/winfile.cpp
parent20a95045e16ab69cfb13c6d3cf520e63aa553102 (diff)
POSIX implementation for new directory read features, cleanup of Windows implementation, return directory handle as smart pointer, fix full build [Vas Crabb]
Diffstat (limited to 'src/osd/modules/file/winfile.cpp')
-rw-r--r--src/osd/modules/file/winfile.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/osd/modules/file/winfile.cpp b/src/osd/modules/file/winfile.cpp
index 13af3a025c8..c304259b915 100644
--- a/src/osd/modules/file/winfile.cpp
+++ b/src/osd/modules/file/winfile.cpp
@@ -381,9 +381,11 @@ std::unique_ptr<osd::directory::entry> osd_stat(const std::string &path)
// create an osd::directory::entry; be sure to make sure that the caller can
// free all resources by just freeing the resulting osd::directory::entry
- osd::directory::entry *result = (osd::directory::entry *) ::operator new(sizeof(*result) + path.length() + 1);
- if (!result)
- return nullptr;
+ osd::directory::entry *result;
+ try { result = reinterpret_cast<osd::directory::entry *>(::operator new(sizeof(*result) + path.length() + 1)); }
+ catch (...) { return nullptr; }
+ new (result) osd::directory::entry;
+
strcpy(((char *) result) + sizeof(*result), path.c_str());
result->name = ((char *) result) + sizeof(*result);
result->type = win_attributes_to_entry_type(find_data.dwFileAttributes);