From 4567db2fdb279026545195748964eb9f00fcef46 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 12 May 2016 18:19:28 -0700 Subject: [PATCH] Add std::filesystem::filesystem_error object. Not a standards-compliant implementation, but has the same vague shape, so should be easier to port later(?). --- firmware/application/file.cpp | 26 ++++++++++++++++++++++++++ firmware/application/file.hpp | 10 ++++++++++ 2 files changed, 36 insertions(+) diff --git a/firmware/application/file.cpp b/firmware/application/file.cpp index 7c73a7298..7a815fc57 100644 --- a/firmware/application/file.cpp +++ b/firmware/application/file.cpp @@ -140,6 +140,32 @@ std::string next_filename_stem_matching_pattern(const std::string& filename_stem namespace std { namespace filesystem { +std::string filesystem_error::what() const { + switch(err) { + case FR_OK: return ""; + case FR_DISK_ERR: return "disk error"; + case FR_INT_ERR: return "insanity detected"; + case FR_NOT_READY: return "not ready"; + case FR_NO_FILE: return "no file"; + case FR_NO_PATH: return "no path"; + case FR_INVALID_NAME: return "invalid name"; + case FR_DENIED: return "denied"; + case FR_EXIST: return "exists"; + case FR_INVALID_OBJECT: return "invalid object"; + case FR_WRITE_PROTECTED: return "write protected"; + case FR_INVALID_DRIVE: return "invalid drive"; + case FR_NOT_ENABLED: return "not enabled"; + case FR_NO_FILESYSTEM: return "no filesystem"; + case FR_MKFS_ABORTED: return "mkfs aborted"; + case FR_TIMEOUT: return "timeout"; + case FR_LOCKED: return "locked"; + case FR_NOT_ENOUGH_CORE: return "not enough core"; + case FR_TOO_MANY_OPEN_FILES: return "too many open files"; + case FR_INVALID_PARAMETER: return "invalid parameter"; + default: return "unknown"; + } +} + directory_iterator::directory_iterator( const char* path, const char* wild diff --git a/firmware/application/file.hpp b/firmware/application/file.hpp index fde40db2b..56f9525d4 100644 --- a/firmware/application/file.hpp +++ b/firmware/application/file.hpp @@ -76,6 +76,16 @@ std::string next_filename_stem_matching_pattern(const std::string& filename_stem namespace std { namespace filesystem { +struct filesystem_error { + const BYTE err; + + operator bool() const { + return err != FR_OK; + } + + std::string what() const; +}; + using path = std::string; using file_status = BYTE;