@@ -60,10 +60,10 @@ pub const Iterator = switch (native_os) {
60
60
if (rc == 0 ) return null ;
61
61
if (rc < 0 ) {
62
62
switch (posix .errno (rc )) {
63
- .BADF = > unreachable , // Dir is invalid or was opened without iteration ability
64
- .FAULT = > unreachable ,
65
- .NOTDIR = > unreachable ,
66
- .INVAL = > unreachable ,
63
+ // .BADF => unreachable, // Dir is invalid or was opened without iteration ability
64
+ // .FAULT => unreachable,
65
+ // .NOTDIR => unreachable,
66
+ // .INVAL => unreachable,
67
67
else = > | err | return posix .unexpectedErrno (err ),
68
68
}
69
69
}
@@ -242,10 +242,10 @@ pub const Iterator = switch (native_os) {
242
242
if (self .first_iter ) {
243
243
switch (@as (posix .E , @enumFromInt (posix .system ._kern_rewind_dir (self .dir .fd )))) {
244
244
.SUCCESS = > {},
245
- .BADF = > unreachable , // Dir is invalid
246
- .FAULT = > unreachable ,
247
- .NOTDIR = > unreachable ,
248
- .INVAL = > unreachable ,
245
+ // .BADF => unreachable, // Dir is invalid
246
+ // .FAULT => unreachable,
247
+ // .NOTDIR => unreachable,
248
+ // .INVAL => unreachable,
249
249
.ACCES = > return error .AccessDenied ,
250
250
.PERM = > return error .AccessDenied ,
251
251
else = > | err | return posix .unexpectedErrno (err ),
@@ -261,11 +261,11 @@ pub const Iterator = switch (native_os) {
261
261
if (rc == 0 ) return null ;
262
262
if (rc < 0 ) {
263
263
switch (@as (posix .E , @enumFromInt (rc ))) {
264
- .BADF = > unreachable , // Dir is invalid
265
- .FAULT = > unreachable ,
266
- .NOTDIR = > unreachable ,
267
- .INVAL = > unreachable ,
268
- .OVERFLOW = > unreachable ,
264
+ // .BADF => unreachable, // Dir is invalid
265
+ // .FAULT => unreachable,
266
+ // .NOTDIR => unreachable,
267
+ // .INVAL => unreachable,
268
+ // .OVERFLOW => unreachable,
269
269
.ACCES = > return error .AccessDenied ,
270
270
.PERM = > return error .AccessDenied ,
271
271
else = > | err | return posix .unexpectedErrno (err ),
@@ -290,14 +290,14 @@ pub const Iterator = switch (native_os) {
290
290
0 ,
291
291
)))) {
292
292
.SUCCESS = > {},
293
- .INVAL = > unreachable ,
294
- .BADF = > unreachable , // Dir is invalid
293
+ // .INVAL => unreachable,
294
+ // .BADF => unreachable, // Dir is invalid
295
295
.NOMEM = > return error .SystemResources ,
296
296
.ACCES = > return error .AccessDenied ,
297
297
.PERM = > return error .AccessDenied ,
298
- .FAULT = > unreachable ,
299
- .NAMETOOLONG = > unreachable ,
300
- .LOOP = > unreachable ,
298
+ // .FAULT => unreachable,
299
+ // .NAMETOOLONG => unreachable,
300
+ // .LOOP => unreachable,
301
301
.NOENT = > continue ,
302
302
else = > | err | return posix .unexpectedErrno (err ),
303
303
}
@@ -364,9 +364,9 @@ pub const Iterator = switch (native_os) {
364
364
const rc = linux .getdents64 (self .dir .fd , & self .buf , self .buf .len );
365
365
switch (linux .E .init (rc )) {
366
366
.SUCCESS = > {},
367
- .BADF = > unreachable , // Dir is invalid or was opened without iteration ability
368
- .FAULT = > unreachable ,
369
- .NOTDIR = > unreachable ,
367
+ // .BADF => unreachable, // Dir is invalid or was opened without iteration ability
368
+ // .FAULT => unreachable,
369
+ // .NOTDIR => unreachable,
370
370
.NOENT = > return error .DirNotFound , // The directory being iterated was deleted during iteration.
371
371
.INVAL = > return error .Unexpected , // Linux may in some cases return EINVAL when reading /proc/$PID/net.
372
372
.ACCES = > return error .AccessDenied , // Do not have permission to iterate this directory.
@@ -527,10 +527,10 @@ pub const Iterator = switch (native_os) {
527
527
var bufused : usize = undefined ;
528
528
switch (w .fd_readdir (self .dir .fd , & self .buf , self .buf .len , self .cookie , & bufused )) {
529
529
.SUCCESS = > {},
530
- .BADF = > unreachable , // Dir is invalid or was opened without iteration ability
531
- .FAULT = > unreachable ,
532
- .NOTDIR = > unreachable ,
533
- .INVAL = > unreachable ,
530
+ // .BADF => unreachable, // Dir is invalid or was opened without iteration ability
531
+ // .FAULT => unreachable,
532
+ // .NOTDIR => unreachable,
533
+ // .INVAL => unreachable,
534
534
.NOENT = > return error .DirNotFound , // The directory being iterated was deleted during iteration.
535
535
.NOTCAPABLE = > return error .AccessDenied ,
536
536
.ILSEQ = > return error .InvalidUtf8 , // An entry's name cannot be encoded as UTF-8.
@@ -698,7 +698,7 @@ pub const Walker = struct {
698
698
self .name_buffer .appendAssumeCapacity (0 );
699
699
if (base .kind == .directory ) {
700
700
var new_dir = top .iter .dir .openDir (base .name , .{ .iterate = true }) catch | err | switch (err ) {
701
- error .NameTooLong = > unreachable , // no path sep in base.name
701
+ error .NameTooLong = > return error . Unexpected , // no path sep in base.name
702
702
else = > | e | return e ,
703
703
};
704
704
{
@@ -1574,11 +1574,12 @@ pub fn openDirW(self: Dir, sub_path_w: [*:0]const u16, args: OpenOptions) OpenEr
1574
1574
.no_follow = args .no_follow ,
1575
1575
.create_disposition = w .FILE_OPEN ,
1576
1576
}) catch | err | switch (err ) {
1577
- error .ReadOnlyFileSystem = > unreachable ,
1578
- error .DiskQuota = > unreachable ,
1579
- error .NoSpaceLeft = > unreachable ,
1580
- error .PathAlreadyExists = > unreachable ,
1581
- error .LinkQuotaExceeded = > unreachable ,
1577
+ error .ReadOnlyFileSystem ,
1578
+ error .DiskQuota ,
1579
+ error .NoSpaceLeft ,
1580
+ error .PathAlreadyExists ,
1581
+ error .LinkQuotaExceeded ,
1582
+ = > if (builtin .mode == .Debug ) unreachable else return error .Unexpected ,
1582
1583
else = > | e | return e ,
1583
1584
};
1584
1585
return dir ;
@@ -1588,13 +1589,14 @@ pub fn openDirW(self: Dir, sub_path_w: [*:0]const u16, args: OpenOptions) OpenEr
1588
1589
fn openDirFlagsZ (self : Dir , sub_path_c : [* :0 ]const u8 , flags : posix.O ) OpenError ! Dir {
1589
1590
assert (flags .DIRECTORY );
1590
1591
const fd = posix .openatZ (self .fd , sub_path_c , flags , 0 ) catch | err | switch (err ) {
1591
- error .FileTooBig = > unreachable , // can't happen for directories
1592
- error .IsDir = > unreachable , // we're setting DIRECTORY
1593
- error .NoSpaceLeft = > unreachable , // not setting CREAT
1594
- error .PathAlreadyExists = > unreachable , // not setting CREAT
1595
- error .FileLocksNotSupported = > unreachable , // locking folders is not supported
1596
- error .WouldBlock = > unreachable , // can't happen for directories
1597
- error .FileBusy = > unreachable , // can't happen for directories
1592
+ error .FileTooBig , // can't happen for directories
1593
+ error .IsDir , // we're setting DIRECTORY
1594
+ error .NoSpaceLeft , // not setting CREAT
1595
+ error .PathAlreadyExists , // not setting CREAT
1596
+ error .FileLocksNotSupported , // locking folders is not supported
1597
+ error .WouldBlock , // can't happen for directories
1598
+ error .FileBusy , // can't happen for directories
1599
+ = > if (builtin .mode == .Debug ) unreachable else return error .Unexpected ,
1598
1600
else = > | e | return e ,
1599
1601
};
1600
1602
return Dir { .fd = fd };
@@ -1670,7 +1672,7 @@ pub fn deleteFile(self: Dir, sub_path: []const u8) DeleteFileError!void {
1670
1672
return self .deleteFileW (sub_path_w .span ());
1671
1673
} else if (native_os == .wasi and ! builtin .link_libc ) {
1672
1674
posix .unlinkat (self .fd , sub_path , 0 ) catch | err | switch (err ) {
1673
- error .DirNotEmpty = > unreachable , // not passing AT.REMOVEDIR
1675
+ error .DirNotEmpty = > if ( builtin . mode == .Debug ) unreachable else return error . Unexpected , // not passing AT.REMOVEDIR
1674
1676
else = > | e | return e ,
1675
1677
};
1676
1678
} else {
@@ -1682,7 +1684,7 @@ pub fn deleteFile(self: Dir, sub_path: []const u8) DeleteFileError!void {
1682
1684
/// Same as `deleteFile` except the parameter is null-terminated.
1683
1685
pub fn deleteFileZ (self : Dir , sub_path_c : [* :0 ]const u8 ) DeleteFileError ! void {
1684
1686
posix .unlinkatZ (self .fd , sub_path_c , 0 ) catch | err | switch (err ) {
1685
- error .DirNotEmpty = > unreachable , // not passing AT.REMOVEDIR
1687
+ error .DirNotEmpty = > if ( builtin . mode == .Debug ) unreachable else return error . Unexpected , // not passing AT.REMOVEDIR
1686
1688
error .AccessDenied = > | e | switch (native_os ) {
1687
1689
// non-Linux POSIX systems return EPERM when trying to delete a directory, so
1688
1690
// we need to handle that case specifically and translate the error
@@ -1701,7 +1703,7 @@ pub fn deleteFileZ(self: Dir, sub_path_c: [*:0]const u8) DeleteFileError!void {
1701
1703
/// Same as `deleteFile` except the parameter is WTF-16 LE encoded.
1702
1704
pub fn deleteFileW (self : Dir , sub_path_w : []const u16 ) DeleteFileError ! void {
1703
1705
posix .unlinkatW (self .fd , sub_path_w , 0 ) catch | err | switch (err ) {
1704
- error .DirNotEmpty = > unreachable , // not passing AT.REMOVEDIR
1706
+ error .DirNotEmpty = > if ( builtin . mode == .Debug ) unreachable else return error . Unexpected , // not passing AT.REMOVEDIR
1705
1707
else = > | e | return e ,
1706
1708
};
1707
1709
}
@@ -1740,7 +1742,7 @@ pub fn deleteDir(self: Dir, sub_path: []const u8) DeleteDirError!void {
1740
1742
return self .deleteDirW (sub_path_w .span ());
1741
1743
} else if (native_os == .wasi and ! builtin .link_libc ) {
1742
1744
posix .unlinkat (self .fd , sub_path , posix .AT .REMOVEDIR ) catch | err | switch (err ) {
1743
- error .IsDir = > unreachable , // not possible since we pass AT.REMOVEDIR
1745
+ error .IsDir = > if ( builtin . mode == .Debug ) unreachable else return error . Unexpected , // not possible since we pass AT.REMOVEDIR
1744
1746
else = > | e | return e ,
1745
1747
};
1746
1748
} else {
@@ -1752,7 +1754,7 @@ pub fn deleteDir(self: Dir, sub_path: []const u8) DeleteDirError!void {
1752
1754
/// Same as `deleteDir` except the parameter is null-terminated.
1753
1755
pub fn deleteDirZ (self : Dir , sub_path_c : [* :0 ]const u8 ) DeleteDirError ! void {
1754
1756
posix .unlinkatZ (self .fd , sub_path_c , posix .AT .REMOVEDIR ) catch | err | switch (err ) {
1755
- error .IsDir = > unreachable , // not possible since we pass AT.REMOVEDIR
1757
+ error .IsDir = > if ( builtin . mode == .Debug ) unreachable else return error . Unexpected , // not possible since we pass AT.REMOVEDIR
1756
1758
else = > | e | return e ,
1757
1759
};
1758
1760
}
@@ -1761,7 +1763,7 @@ pub fn deleteDirZ(self: Dir, sub_path_c: [*:0]const u8) DeleteDirError!void {
1761
1763
/// This function is Windows-only.
1762
1764
pub fn deleteDirW (self : Dir , sub_path_w : []const u16 ) DeleteDirError ! void {
1763
1765
posix .unlinkatW (self .fd , sub_path_w , posix .AT .REMOVEDIR ) catch | err | switch (err ) {
1764
- error .IsDir = > unreachable , // not possible since we pass AT.REMOVEDIR
1766
+ error .IsDir = > if ( builtin . mode == .Debug ) unreachable else return error . Unexpected , // not possible since we pass AT.REMOVEDIR
1765
1767
else = > | e | return e ,
1766
1768
};
1767
1769
}
@@ -2135,7 +2137,7 @@ pub fn deleteTree(self: Dir, sub_path: []const u8) DeleteTreeError!void {
2135
2137
error .FileNotFound = > break :handle_entry ,
2136
2138
2137
2139
// Impossible because we do not pass any path separators.
2138
- error .NotDir = > unreachable ,
2140
+ error .NotDir = > if ( builtin . mode == .Debug ) unreachable else return error . Unexpected ,
2139
2141
2140
2142
error .IsDir = > {
2141
2143
treat_as_dir = true ;
@@ -2220,7 +2222,7 @@ pub fn deleteTree(self: Dir, sub_path: []const u8) DeleteTreeError!void {
2220
2222
error .FileNotFound = > continue :process_stack ,
2221
2223
2222
2224
// Impossible because we do not pass any path separators.
2223
- error .NotDir = > unreachable ,
2225
+ error .NotDir = > if ( builtin . mode == .Debug ) unreachable else return error . Unexpected ,
2224
2226
2225
2227
error .IsDir = > {
2226
2228
treat_as_dir = true ;
@@ -2332,7 +2334,7 @@ fn deleteTreeMinStackSizeWithKindHint(self: Dir, sub_path: []const u8, kind_hint
2332
2334
error .FileNotFound = > continue :dir_it ,
2333
2335
2334
2336
// Impossible because we do not pass any path separators.
2335
- error .NotDir = > unreachable ,
2337
+ error .NotDir = > if ( builtin . mode == .Debug ) unreachable else return error . Unexpected ,
2336
2338
2337
2339
error .IsDir = > {
2338
2340
treat_as_dir = true ;
@@ -2622,7 +2624,7 @@ fn copy_file(fd_in: posix.fd_t, fd_out: posix.fd_t, maybe_size: ?u64) CopyFileRa
2622
2624
const rc = posix .system .fcopyfile (fd_in , fd_out , null , .{ .DATA = true });
2623
2625
switch (posix .errno (rc )) {
2624
2626
.SUCCESS = > return ,
2625
- .INVAL = > unreachable ,
2627
+ // .INVAL => unreachable,
2626
2628
.NOMEM = > return error .SystemResources ,
2627
2629
// The source file is not a directory, symbolic link, or regular file.
2628
2630
// Try with the fallback path before giving up.
0 commit comments