diff options
author | 2016-06-25 03:00:31 +1000 | |
---|---|---|
committer | 2016-06-25 03:35:23 +1000 | |
commit | 5cee9e9bc4fe03dc561d3a7a87ecadcf89743e2b (patch) | |
tree | 84c962bcfb8f0fdfd73d6b4e317f140034958ce3 /src/osd/modules/file/winfile.cpp | |
parent | 20a95045e16ab69cfb13c6d3cf520e63aa553102 (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.cpp | 8 |
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); |