aboutsummaryrefslogtreecommitdiff
path: root/src/os.cpp
diff options
context:
space:
mode:
authorLeRoyce Pearson <leroycepearson@geemili.xyz>2020-03-23 21:39:10 -0600
committerLeRoyce Pearson <leroycepearson@geemili.xyz>2020-03-23 21:39:16 -0600
commit113b217593ab5b0369b76251b99a195f361cc220 (patch)
tree9aa8e8d78304afcc51bef0ace49bb5b3017804f6 /src/os.cpp
parent0b93932a2103b178d3ab5235c837df14173ed38c (diff)
parentdc44fe053c609f389e375f6857f96b6bb3794897 (diff)
downloadzig-113b217593ab5b0369b76251b99a195f361cc220.tar.gz
zig-113b217593ab5b0369b76251b99a195f361cc220.zip
Merge branch 'master' into feature-file-locks
Diffstat (limited to 'src/os.cpp')
-rw-r--r--src/os.cpp24
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;