aboutsummaryrefslogtreecommitdiff
path: root/src/os.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-03-21 20:32:48 -0400
committerAndrew Kelley <andrew@ziglang.org>2020-03-21 20:32:48 -0400
commit4b0ddb817bb5d4effd8cd2dd0844ac278e35e1d5 (patch)
treeea0112fc930bf6a51b62136f10a60560c3c96bd9 /src/os.cpp
parent28ad78cb7f4a567ce6a595b8ff466e90b311f3e4 (diff)
downloadzig-4b0ddb817bb5d4effd8cd2dd0844ac278e35e1d5.tar.gz
zig-4b0ddb817bb5d4effd8cd2dd0844ac278e35e1d5.zip
zig cc: better support for the preprocessor option (-E)
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;