| ... | @@ -1542,6 +1542,41 @@ pub const MakeDirError = error{ | ... | @@ -1542,6 +1542,41 @@ pub const MakeDirError = error{ |
| 1542 | BadPathName, | 1542 | BadPathName, |
| 1543 | } || UnexpectedError; | 1543 | } || UnexpectedError; |
| 1544 | | 1544 | |
| | 1545 | pub fn mkdirat(dir_fd: fd_t, sub_dir_path: []const u8, mode: u32) MakeDirError!void { |
| | 1546 | if (builtin.os == .windows) { |
| | 1547 | const sub_dir_path_w = try windows.sliceToPrefixedFileW(sub_dir_path); |
| | 1548 | @compileError("TODO implement mkdirat for Windows"); |
| | 1549 | } else { |
| | 1550 | const sub_dir_path_c = try toPosixPath(sub_dir_path); |
| | 1551 | return mkdiratC(dir_fd, &sub_dir_path_c, mode); |
| | 1552 | } |
| | 1553 | } |
| | 1554 | |
| | 1555 | pub fn mkdiratC(dir_fd: fd_t, sub_dir_path: [*:0]const u8, mode: u32) MakeDirError!void { |
| | 1556 | if (builtin.os == .windows) { |
| | 1557 | const sub_dir_path_w = try windows.cStrToPrefixedFileW(sub_dir_path); |
| | 1558 | @compileError("TODO implement mkdiratC for Windows"); |
| | 1559 | } |
| | 1560 | switch (errno(system.mkdirat(dir_fd, sub_dir_path, mode))) { |
| | 1561 | 0 => return, |
| | 1562 | EACCES => return error.AccessDenied, |
| | 1563 | EBADF => unreachable, |
| | 1564 | EPERM => return error.AccessDenied, |
| | 1565 | EDQUOT => return error.DiskQuota, |
| | 1566 | EEXIST => return error.PathAlreadyExists, |
| | 1567 | EFAULT => unreachable, |
| | 1568 | ELOOP => return error.SymLinkLoop, |
| | 1569 | EMLINK => return error.LinkQuotaExceeded, |
| | 1570 | ENAMETOOLONG => return error.NameTooLong, |
| | 1571 | ENOENT => return error.FileNotFound, |
| | 1572 | ENOMEM => return error.SystemResources, |
| | 1573 | ENOSPC => return error.NoSpaceLeft, |
| | 1574 | ENOTDIR => return error.NotDir, |
| | 1575 | EROFS => return error.ReadOnlyFileSystem, |
| | 1576 | else => |err| return unexpectedErrno(err), |
| | 1577 | } |
| | 1578 | } |
| | 1579 | |
| 1545 | /// Create a directory. | 1580 | /// Create a directory. |
| 1546 | /// `mode` is ignored on Windows. | 1581 | /// `mode` is ignored on Windows. |
| 1547 | pub fn mkdir(dir_path: []const u8, mode: u32) MakeDirError!void { | 1582 | pub fn mkdir(dir_path: []const u8, mode: u32) MakeDirError!void { |