module std::io::os; import std::io::path, libc, std::os; macro void? native_chdir(Path path) { @pool() { $switch: $case env::POSIX: if (posix::chdir(path.str_view().zstr_tcopy())) { switch (libc::errno()) { case errno::EACCES: return io::NO_PERMISSION~; case errno::ENAMETOOLONG: return io::NAME_TOO_LONG~; case errno::ENOTDIR: return io::FILE_NOT_DIR~; case errno::ENOENT: return io::FILE_NOT_FOUND~; case errno::ELOOP: return io::SYMLINK_FAILED~; default: return io::GENERAL_ERROR~; } } $case env::WIN32: // TODO improve with better error handling. if (win32::setCurrentDirectoryW(path.str_view().to_temp_utf16()!!)) return; return io::GENERAL_ERROR~; $default: return io::UNSUPPORTED_OPERATION~; $endswitch }; }