diff options
author | Harley Acheson <harley.acheson@gmail.com> | 2020-02-21 19:18:29 +0300 |
---|---|---|
committer | Harley Acheson <harley.acheson@gmail.com> | 2020-02-21 19:20:58 +0300 |
commit | 1fb62d1272db477277534c5d31ce220afd100637 (patch) | |
tree | 152044d21435b9f3d347b132b8b860d0d706b1f4 /source/blender/blenlib/intern/storage.c | |
parent | b1b020806e2d5ca403de62dc956c4a27f36bc377 (diff) |
UI: Windows File Attributes and Hidden Items
File Browser using Windows file attributes for decorating and hiding items.
Differential Revision: https://developer.blender.org/D6816
Reviewed by Campbell Barton
Diffstat (limited to 'source/blender/blenlib/intern/storage.c')
-rw-r--r-- | source/blender/blenlib/intern/storage.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c index 7c481868d64..04b3e8abca2 100644 --- a/source/blender/blenlib/intern/storage.c +++ b/source/blender/blenlib/intern/storage.c @@ -199,6 +199,69 @@ size_t BLI_file_size(const char *path) return stats.st_size; } +eFileAttributes BLI_file_attributes(const char *path) +{ + int ret = 0; + +#ifdef WIN32 + wchar_t wline[FILE_MAXDIR]; + BLI_strncpy_wchar_from_utf8(wline, path, ARRAY_SIZE(wline)); + DWORD attr = GetFileAttributesW(wline); + if (attr & FILE_ATTRIBUTE_READONLY) { + ret |= FILE_ATTR_READONLY; + } + if (attr & FILE_ATTRIBUTE_HIDDEN) { + ret |= FILE_ATTR_HIDDEN; + } + if (attr & FILE_ATTRIBUTE_SYSTEM) { + ret |= FILE_ATTR_SYSTEM; + } + if (attr & FILE_ATTRIBUTE_ARCHIVE) { + ret |= FILE_ATTR_ARCHIVE; + } + if (attr & FILE_ATTRIBUTE_COMPRESSED) { + ret |= FILE_ATTR_COMPRESSED; + } + if (attr & FILE_ATTRIBUTE_ENCRYPTED) { + ret |= FILE_ATTR_ENCRYPTED; + } + if (attr & FILE_ATTRIBUTE_TEMPORARY) { + ret |= FILE_ATTR_TEMPORARY; + } + if (attr & FILE_ATTRIBUTE_SPARSE_FILE) { + ret |= FILE_ATTR_SPARSE_FILE; + } + if (attr & FILE_ATTRIBUTE_OFFLINE) { + ret |= FILE_ATTR_OFFLINE; + } + if (attr & FILE_ATTRIBUTE_REPARSE_POINT) { + ret |= FILE_ATTR_REPARSE_POINT; + } + +#endif + +#ifdef __APPLE__ + + /* TODO: + * If Hidden (Invisible) set FILE_ATTR_HIDDEN + * If Locked set FILE_ATTR_READONLY + * If Restricted set FILE_ATTR_RESTRICTED + */ + +#endif + +#ifdef __linux__ + + /* TODO: + * If Immutable set FILE_ATTR_READONLY + * If Archived set FILE_ATTR_ARCHIVE + */ + +#endif + + return ret; +} + /** * Returns the st_mode from stat-ing the specified path name, or 0 if stat fails * (most likely doesn't exist or no access). |