diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-19 22:48:04 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-19 22:48:04 +0000 |
| commit | 23065ddf6ed0b3762dda5f5059888eb52b5c2415 (patch) | |
| tree | aec187b8211203081e8dacb07a5ce325eb348cc4 /std/fs.zc | |
| parent | 3af5dcf34d705cc52c1ffe5b85c2a90b5104e4c9 (diff) | |
Fixes related to memory safety. I will work more on this related to the stdlib.
Diffstat (limited to 'std/fs.zc')
| -rw-r--r-- | std/fs.zc | 18 |
1 files changed, 14 insertions, 4 deletions
@@ -50,7 +50,7 @@ struct Metadata { is_file: bool; } -@derive(Eq) +// @derive(Eq) - Removed to avoid double-free on String field struct DirEntry { name: String; is_dir: bool; @@ -87,7 +87,11 @@ impl File { var s = String::new(buffer); free(buffer); - return Result<String>::Ok(s); + var res = Result<String>::Ok(s); + s.forget(); + var ret = res; + res.forget(); + return ret; } fn read_all(path: char*) -> Result<String> { @@ -97,7 +101,9 @@ impl File { var f: File = res.unwrap(); var s_res = f.read_to_string(); f.close(); - return s_res; + var ret = s_res; + s_res.forget(); + return ret; } fn write_string(self, content: char*) -> Result<bool> { @@ -157,6 +163,10 @@ impl File { free(name_buf); closedir(dir); - return Result< Vec<DirEntry> >::Ok(entries); + var res = Result< Vec<DirEntry> >::Ok(entries); + entries.forget(); + var ret = res; + res.forget(); + return ret; } } |
