mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-03-08 02:24:33 +01:00
std.posix: delete some mkdir functions
These are handled by Io.Dir now. This is part of an effort to eliminate error.OperationCanceled from the std lib. Also an effort to delete all std.posix functions.
This commit is contained in:
parent
2b326d27d5
commit
0317e95aad
2 changed files with 1 additions and 114 deletions
|
|
@ -832,123 +832,10 @@ pub fn getcwd(out_buffer: []u8) GetCwdError![]u8 {
|
|||
}
|
||||
}
|
||||
|
||||
/// On Windows, `sub_dir_path` should be encoded as [WTF-8](https://wtf-8.codeberg.page/).
|
||||
/// On WASI, `sub_dir_path` should be encoded as valid UTF-8.
|
||||
/// On other platforms, `sub_dir_path` is an opaque sequence of bytes with no particular encoding.
|
||||
pub fn mkdirat(dir_fd: fd_t, sub_dir_path: []const u8, mode: mode_t) MakeDirError!void {
|
||||
if (native_os == .windows) {
|
||||
@compileError("use std.Io instead");
|
||||
} else if (native_os == .wasi and !builtin.link_libc) {
|
||||
@compileError("use std.Io instead");
|
||||
} else {
|
||||
const sub_dir_path_c = try toPosixPath(sub_dir_path);
|
||||
return mkdiratZ(dir_fd, &sub_dir_path_c, mode);
|
||||
}
|
||||
}
|
||||
|
||||
/// Same as `mkdirat` except the parameters are null-terminated.
|
||||
pub fn mkdiratZ(dir_fd: fd_t, sub_dir_path: [*:0]const u8, mode: mode_t) MakeDirError!void {
|
||||
if (native_os == .windows) {
|
||||
@compileError("use std.Io instead");
|
||||
} else if (native_os == .wasi and !builtin.link_libc) {
|
||||
@compileError("use std.Io instead");
|
||||
}
|
||||
switch (errno(system.mkdirat(dir_fd, sub_dir_path, mode))) {
|
||||
.SUCCESS => return,
|
||||
.ACCES => return error.AccessDenied,
|
||||
.BADF => unreachable,
|
||||
.PERM => return error.PermissionDenied,
|
||||
.DQUOT => return error.DiskQuota,
|
||||
.EXIST => return error.PathAlreadyExists,
|
||||
.FAULT => unreachable,
|
||||
.LOOP => return error.SymLinkLoop,
|
||||
.MLINK => return error.LinkQuotaExceeded,
|
||||
.NAMETOOLONG => return error.NameTooLong,
|
||||
.NOENT => return error.FileNotFound,
|
||||
.NOMEM => return error.SystemResources,
|
||||
.NOSPC => return error.NoSpaceLeft,
|
||||
.NOTDIR => return error.NotDir,
|
||||
.ROFS => return error.ReadOnlyFileSystem,
|
||||
// dragonfly: when dir_fd is unlinked from filesystem
|
||||
.NOTCONN => return error.FileNotFound,
|
||||
.ILSEQ => return error.BadPathName,
|
||||
else => |err| return unexpectedErrno(err),
|
||||
}
|
||||
}
|
||||
|
||||
pub const MakeDirError = std.Io.Dir.CreateDirError;
|
||||
|
||||
/// Create a directory.
|
||||
/// `mode` is ignored on Windows and WASI.
|
||||
/// On Windows, `dir_path` should be encoded as [WTF-8](https://wtf-8.codeberg.page/).
|
||||
/// On WASI, `dir_path` should be encoded as valid UTF-8.
|
||||
/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
|
||||
pub fn mkdir(dir_path: []const u8, mode: mode_t) MakeDirError!void {
|
||||
if (native_os == .wasi and !builtin.link_libc) {
|
||||
return mkdirat(AT.FDCWD, dir_path, mode);
|
||||
} else if (native_os == .windows) {
|
||||
const dir_path_w = try windows.sliceToPrefixedFileW(null, dir_path);
|
||||
return mkdirW(dir_path_w.span(), mode);
|
||||
} else {
|
||||
const dir_path_c = try toPosixPath(dir_path);
|
||||
return mkdirZ(&dir_path_c, mode);
|
||||
}
|
||||
}
|
||||
|
||||
/// Same as `mkdir` but the parameter is null-terminated.
|
||||
/// On Windows, `dir_path` should be encoded as [WTF-8](https://wtf-8.codeberg.page/).
|
||||
/// On WASI, `dir_path` should be encoded as valid UTF-8.
|
||||
/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
|
||||
pub fn mkdirZ(dir_path: [*:0]const u8, mode: mode_t) MakeDirError!void {
|
||||
if (native_os == .windows) {
|
||||
const dir_path_w = try windows.cStrToPrefixedFileW(null, dir_path);
|
||||
return mkdirW(dir_path_w.span(), mode);
|
||||
} else if (native_os == .wasi and !builtin.link_libc) {
|
||||
return mkdir(mem.sliceTo(dir_path, 0), mode);
|
||||
}
|
||||
switch (errno(system.mkdir(dir_path, mode))) {
|
||||
.SUCCESS => return,
|
||||
.ACCES => return error.AccessDenied,
|
||||
.PERM => return error.PermissionDenied,
|
||||
.DQUOT => return error.DiskQuota,
|
||||
.EXIST => return error.PathAlreadyExists,
|
||||
.FAULT => unreachable,
|
||||
.LOOP => return error.SymLinkLoop,
|
||||
.MLINK => return error.LinkQuotaExceeded,
|
||||
.NAMETOOLONG => return error.NameTooLong,
|
||||
.NOENT => return error.FileNotFound,
|
||||
.NOMEM => return error.SystemResources,
|
||||
.NOSPC => return error.NoSpaceLeft,
|
||||
.NOTDIR => return error.NotDir,
|
||||
.ROFS => return error.ReadOnlyFileSystem,
|
||||
.ILSEQ => return error.BadPathName,
|
||||
else => |err| return unexpectedErrno(err),
|
||||
}
|
||||
}
|
||||
|
||||
/// Windows-only. Same as `mkdir` but the parameters is WTF16LE encoded.
|
||||
pub fn mkdirW(dir_path_w: []const u16, mode: mode_t) MakeDirError!void {
|
||||
_ = mode;
|
||||
const sub_dir_handle = windows.OpenFile(dir_path_w, .{
|
||||
.dir = Io.Dir.cwd().handle,
|
||||
.access_mask = .{
|
||||
.STANDARD = .{ .SYNCHRONIZE = true },
|
||||
.GENERIC = .{ .READ = true },
|
||||
},
|
||||
.creation = .CREATE,
|
||||
.filter = .dir_only,
|
||||
}) catch |err| switch (err) {
|
||||
error.IsDir => return error.Unexpected,
|
||||
error.PipeBusy => return error.Unexpected,
|
||||
error.NoDevice => return error.Unexpected,
|
||||
error.WouldBlock => return error.Unexpected,
|
||||
error.AntivirusInterference => return error.Unexpected,
|
||||
error.OperationCanceled => return error.Unexpected,
|
||||
else => |e| return e,
|
||||
};
|
||||
windows.CloseHandle(sub_dir_handle);
|
||||
}
|
||||
|
||||
pub const ChangeCurDirError = error{
|
||||
AccessDenied,
|
||||
FileSystem,
|
||||
|
|
|
|||
|
|
@ -527,7 +527,7 @@ test "rename smoke test" {
|
|||
// Create some directory
|
||||
const file_path = try Dir.path.join(gpa, &.{ base_path, "some_dir" });
|
||||
defer gpa.free(file_path);
|
||||
try posix.mkdir(file_path, mode);
|
||||
try Io.Dir.createDirAbsolute(io, file_path, .fromMode(mode));
|
||||
|
||||
// Rename the directory
|
||||
const new_file_path = try Dir.path.join(gpa, &.{ base_path, "some_other_dir" });
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue