ref: afb18ac80f88ac730d95fb6f6e442c77b90f47ea
parent: fbdd4e91a0d9285cd2bbe05659444493211edc8e
author: kvik <kvik@a-b.xyz>
date: Mon Apr 19 10:09:01 EDT 2021
proc: implement p9.(pid ppid user sysname)
--- a/p9.c
+++ b/p9.c
@@ -176,6 +176,11 @@
{"sleep", p9_sleep},
{"alarm", p9_alarm},
{"rfork", p9_rfork},
+ {"wdir", p9_wdir},
+ {"pid", p9_pid},
+ {"ppid", p9_ppid},
+ {"user", p9_user},
+ {"sysname", p9_sysname},
{"cleanname", p9_cleanname},
--- a/proc.c
+++ b/proc.c
@@ -51,6 +51,56 @@
}
static int
+p9_wdir(lua_State *L)
+{
+ const char *path;
+ char *buf;
+ luaL_Buffer b;
+
+ path = luaL_optstring(L, 1, nil);
+ if(path != nil){
+ if(chdir(path) == -1)
+ return error(L, "chdir: %r");
+ lua_pushboolean(L, 1);
+ return 1;
+ }
+ luaL_buffinitsize(L, &b, Iosize);
+ buf = luaL_buffaddr(&b);
+ if(getwd(buf, Iosize) == nil)
+ return error(L, "getwd: %r");
+ luaL_pushresultsize(&b, strlen(buf));
+ return 1;
+}
+
+static int
+p9_user(lua_State *L)
+{
+ lua_pushstring(L, getuser());
+ return 1;
+}
+
+static int
+p9_sysname(lua_State *L)
+{
+ lua_pushstring(L, sysname());
+ return 1;
+}
+
+static int
+p9_pid(lua_State *L)
+{
+ lua_pushinteger(L, getpid());
+ return 1;
+}
+
+static int
+p9_ppid(lua_State *L)
+{
+ lua_pushinteger(L, getppid());
+ return 1;
+}
+
+static int
p9_rfork(lua_State *L)
{
int flags, i, n, r;
--- a/test.lua
+++ b/test.lua
@@ -229,7 +229,18 @@
assert(p9.sleep(0) == true)
end
+-- wdir
+do
+ local cwd = assert(p9.wdir())
+ assert(p9.wdir("/dev") and p9.wdir() == "/dev")
+ assert(p9.wdir(cwd))
+end
+-- proc info
+do
+ assert(p9.user() and p9.sysname())
+ assert(p9.pid() and p9.ppid())
+end
-- Environment variables
do