This commit is contained in:
gingerBill
2021-02-19 00:05:02 +00:00
2 changed files with 25 additions and 12 deletions
+11 -7
View File
@@ -28,7 +28,7 @@ read_dir :: proc(fd: Handle, n: int, allocator := context.allocator) -> (fi: []F
size = 100; size = 100;
} }
dfi := make([dynamic]File_Info, 0, size); dfi := make([dynamic]File_Info, 0, size, allocator);
for { for {
entry: Dirent; entry: Dirent;
@@ -36,7 +36,7 @@ read_dir :: proc(fd: Handle, n: int, allocator := context.allocator) -> (fi: []F
entry, err, end_of_stream = _readdir(dirp); entry, err, end_of_stream = _readdir(dirp);
if err != ERROR_NONE { if err != ERROR_NONE {
for fi_ in dfi { for fi_ in dfi {
file_info_delete(fi_); file_info_delete(fi_, allocator);
} }
delete(dfi); delete(dfi);
return; return;
@@ -45,15 +45,19 @@ read_dir :: proc(fd: Handle, n: int, allocator := context.allocator) -> (fi: []F
} }
fi_: File_Info; fi_: File_Info;
filename := cast(string)(transmute(cstring)mem.Raw_Cstring{ data = &entry.name[0] }); filename := cast(string)(transmute(cstring)mem.Raw_Cstring{ data = &entry.name[0] });
fullpath := strings.join( []string{ dirpath, filename }, "/" );
defer delete(fullpath);
fi_, err = stat(fullpath); if filename == "." || filename == ".." {
continue;
}
fullpath := strings.join( []string{ dirpath, filename }, "/", context.temp_allocator);
defer delete(fullpath, context.temp_allocator);
fi_, err = stat(fullpath, allocator);
if err != ERROR_NONE { if err != ERROR_NONE {
for fi__ in dfi { for fi__ in dfi {
file_info_delete(fi__); file_info_delete(fi__, allocator);
} }
delete(dfi); delete(dfi);
return; return;
+9
View File
@@ -71,6 +71,9 @@ _fill_file_info_from_stat :: proc(fi: ^File_Info, s: Stat) {
} }
lstat :: proc(name: string, allocator := context.allocator) -> (fi: File_Info, err: Errno) { lstat :: proc(name: string, allocator := context.allocator) -> (fi: File_Info, err: Errno) {
context.allocator = allocator;
s: Stat; s: Stat;
s, err = _lstat(name); s, err = _lstat(name);
if err != ERROR_NONE { if err != ERROR_NONE {
@@ -86,6 +89,9 @@ lstat :: proc(name: string, allocator := context.allocator) -> (fi: File_Info, e
} }
stat :: proc(name: string, allocator := context.allocator) -> (fi: File_Info, err: Errno) { stat :: proc(name: string, allocator := context.allocator) -> (fi: File_Info, err: Errno) {
context.allocator = allocator;
s: Stat; s: Stat;
s, err = _stat(name); s, err = _stat(name);
if err != ERROR_NONE { if err != ERROR_NONE {
@@ -101,6 +107,9 @@ stat :: proc(name: string, allocator := context.allocator) -> (fi: File_Info, er
} }
fstat :: proc(fd: Handle, allocator := context.allocator) -> (fi: File_Info, err: Errno) { fstat :: proc(fd: Handle, allocator := context.allocator) -> (fi: File_Info, err: Errno) {
context.allocator = allocator;
s: Stat; s: Stat;
s, err = _fstat(fd); s, err = _fstat(fd);
if err != ERROR_NONE { if err != ERROR_NONE {