module Std::Os { extern func bux_argc() -> int; extern func bux_argv(index: int) -> String; extern func bux_getenv(name: String) -> String; extern func bux_setenv(name: String, value: String) -> int; extern func bux_getcwd() -> String; extern func bux_chdir(path: String) -> int; extern func bux_exit(code: int); extern func bux_install_stop_handlers(); extern func bux_should_stop() -> int; extern func bux_set_stop_listen_fd(fd: int); func Os_ArgsCount() -> int { return bux_argc(); } func Os_Args(index: int) -> String { return bux_argv(index); } func Os_GetEnv(name: String) -> String { return bux_getenv(name); } func Os_SetEnv(name: String, value: String) -> bool { return bux_setenv(name, value) == 0; } func Os_GetCwd() -> String { return bux_getcwd(); } func Os_Chdir(path: String) -> bool { return bux_chdir(path) == 0; } /* Terminate the process with the given exit code */ func Os_Exit(code: int) { bux_exit(code); } /// Install SIGINT/SIGTERM handlers that set a cooperative stop flag /// (and close the listen fd if registered via Os_SetStopListenFd). func Os_InstallStopHandlers() { bux_install_stop_handlers(); } /// True after SIGINT/SIGTERM (or if handlers not installed: always false). func Os_ShouldStop() -> bool { return bux_should_stop() != 0; } /// Register the server listen fd so stop signals can unblock accept(). func Os_SetStopListenFd(fd: int) { bux_set_stop_listen_fd(fd); } }