aboutsummaryrefslogtreecommitdiff
path: root/src/os.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-04-02 15:21:08 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-04-02 15:21:08 -0400
commit0cccba71d41afee519d0000eb719f8c95f288166 (patch)
tree430cf30a31f5b72fd7ca08c7075646599c1643e9 /src/os.cpp
parent27e31f04758d95cb7cf51a74e2a3903553ce3bc5 (diff)
downloadzig-0cccba71d41afee519d0000eb719f8c95f288166.tar.gz
zig-0cccba71d41afee519d0000eb719f8c95f288166.zip
better error message when os_file_overwrite fails
Diffstat (limited to 'src/os.cpp')
-rw-r--r--src/os.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/os.cpp b/src/os.cpp
index 1dd22b7183..470d222307 100644
--- a/src/os.cpp
+++ b/src/os.cpp
@@ -2048,9 +2048,9 @@ Error os_file_overwrite(OsFile file, Buf *contents) {
return ErrorNone;
#else
if (lseek(file, 0, SEEK_SET) == -1)
- return ErrorFileSystem;
+ return ErrorUnexpectedSeekFailure;
if (ftruncate(file, 0) == -1)
- return ErrorFileSystem;
+ return ErrorUnexpectedFileTruncationFailure;
for (;;) {
if (write(file, buf_ptr(contents), buf_len(contents)) == -1) {
switch (errno) {
@@ -2060,8 +2060,20 @@ Error os_file_overwrite(OsFile file, Buf *contents) {
zig_unreachable();
case EBADF:
zig_unreachable();
- default:
+ case EFAULT:
+ zig_unreachable();
+ case EDQUOT:
+ return ErrorDiskQuota;
+ case ENOSPC:
+ return ErrorDiskSpace;
+ case EFBIG:
+ return ErrorFileTooBig;
+ case EIO:
return ErrorFileSystem;
+ case EPERM:
+ return ErrorAccess;
+ default:
+ return ErrorUnexpectedWriteFailure;
}
}
return ErrorNone;