diff options
| author | gingerBill <bill@gingerbill.org> | 2018-05-26 23:12:55 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2018-05-26 23:12:55 +0100 |
| commit | c067b90403ab8493daa0bf5867b2bd92319feea5 (patch) | |
| tree | f8d8162cc7d0e937c925ed8b07831ffc0e9c75de /src/common.cpp | |
| parent | 5b6770f3d297c0639bdbe8b1b029616c16669165 (diff) | |
Add basic package support (no IR support yet)
Diffstat (limited to 'src/common.cpp')
| -rw-r--r-- | src/common.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/common.cpp b/src/common.cpp index 194f1e386..15412f108 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -748,6 +748,8 @@ enum ReadDirectoryError { ReadDirectory_None, ReadDirectory_InvalidPath, + ReadDirectory_NotExists, + ReadDirectory_Permission, ReadDirectory_NotDir, ReadDirectory_EOF, ReadDirectory_Unknown, @@ -760,6 +762,8 @@ enum ReadDirectoryError { ReadDirectoryError read_directory(String path, Array<FileInfo> *fi) { GB_ASSERT(fi != nullptr); + gbAllocator a = heap_allocator(); + while (path.len > 0) { Rune end = path[path.len-1]; if (end == '/') { @@ -774,11 +778,25 @@ ReadDirectoryError read_directory(String path, Array<FileInfo> *fi) { if (path.len == 0) { return ReadDirectory_InvalidPath; } + { + char *c_str = alloc_cstring(a, path); + defer (gb_free(a, c_str)); + + gbFile f = {}; + gbFileError file_err = gb_file_open(&f, c_str); + defer (gb_file_close(&f)); + + switch (file_err) { + case gbFileError_Invalid: return ReadDirectory_InvalidPath; + case gbFileError_NotExists: return ReadDirectory_NotExists; + // case gbFileError_Permission: return ReadDirectory_Permission; + } + } + if (!path_is_directory(path)) { return ReadDirectory_NotDir; } - gbAllocator a = heap_allocator(); char *new_path = gb_alloc_array(a, char, path.len+3); defer (gb_free(a, new_path)); |