diff options
| author | LeRoyce Pearson <leroycepearson@geemili.xyz> | 2020-03-23 21:39:10 -0600 |
|---|---|---|
| committer | LeRoyce Pearson <leroycepearson@geemili.xyz> | 2020-03-23 21:39:16 -0600 |
| commit | 113b217593ab5b0369b76251b99a195f361cc220 (patch) | |
| tree | 9aa8e8d78304afcc51bef0ace49bb5b3017804f6 /src/os.cpp | |
| parent | 0b93932a2103b178d3ab5235c837df14173ed38c (diff) | |
| parent | dc44fe053c609f389e375f6857f96b6bb3794897 (diff) | |
| download | zig-113b217593ab5b0369b76251b99a195f361cc220.tar.gz zig-113b217593ab5b0369b76251b99a195f361cc220.zip | |
Merge branch 'master' into feature-file-locks
Diffstat (limited to 'src/os.cpp')
| -rw-r--r-- | src/os.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/os.cpp b/src/os.cpp index f65a578e17..351b61cd66 100644 --- a/src/os.cpp +++ b/src/os.cpp @@ -1051,6 +1051,30 @@ static Error copy_open_files(FILE *src_f, FILE *dest_f) { } } +Error os_dump_file(Buf *src_path, FILE *dest_file) { + Error err; + + FILE *src_f = fopen(buf_ptr(src_path), "rb"); + if (!src_f) { + int err = errno; + if (err == ENOENT) { + return ErrorFileNotFound; + } else if (err == EACCES || err == EPERM) { + return ErrorAccess; + } else { + return ErrorFileSystem; + } + } + copy_open_files(src_f, dest_file); + if ((err = copy_open_files(src_f, dest_file))) { + fclose(src_f); + return err; + } + + fclose(src_f); + return ErrorNone; +} + #if defined(ZIG_OS_WINDOWS) static void windows_filetime_to_os_timestamp(FILETIME *ft, OsTimeStamp *mtime) { mtime->sec = (((ULONGLONG) ft->dwHighDateTime) << 32) + ft->dwLowDateTime; |
