Add more things to os module

This commit is contained in:
K. Lange 2021-02-09 11:14:11 +09:00
parent a51619cb0d
commit f2747a07e4

View File

@ -222,6 +222,32 @@ KRK_FUNC(access,{
return BOOLEAN_VAL(0);
})
KRK_FUNC(abort,{
abort();
})
KRK_FUNC(sync,{
FUNCTION_TAKES_NONE();
sync();
})
KRK_FUNC(remove,{
FUNCTION_TAKES_EXACTLY(1);
CHECK_ARG(0,str,KrkString*,path);
if (remove(path->chars) != 0) {
return krk_runtimeError(OSError, strerror(errno));
}
})
KRK_FUNC(truncate,{
FUNCTION_TAKES_EXACTLY(2);
CHECK_ARG(0,str,KrkString*,path);
CHECK_ARG(1,int,krk_integer_type,length);
if (truncate(path->chars, length) != 0) {
return krk_runtimeError(OSError, strerror(errno));
}
})
#ifndef _WIN32
KRK_FUNC(kill,{
FUNCTION_TAKES_EXACTLY(2);
@ -232,6 +258,15 @@ KRK_FUNC(fork,{
FUNCTION_TAKES_NONE();
return INTEGER_VAL(fork());
})
KRK_FUNC(symlink,{
FUNCTION_TAKES_EXACTLY(2);
CHECK_ARG(0,str,KrkString*,src);
CHECK_ARG(1,str,KrkString*,dst);
if (symlink(src->chars, dst->chars) != 0) {
return krk_runtimeError(OSError, strerror(errno));
}
})
#endif
KrkValue krk_module_onload_os(void) {
@ -242,10 +277,24 @@ KrkValue krk_module_onload_os(void) {
#ifdef _WIN32
krk_attachNamedObject(&module->fields, "name", (KrkObj*)S("nt"));
krk_attachNamedObject(&module->fields, "sep", (KrkObj*)S("\\"));
krk_attachNamedObject(&module->fields, "altsep", (KrkObj*)S("/"));
krk_attachNamedObject(&module->fields, "pathsep", (KrkObj*)S(";"));
krk_attachNamedObject(&module->fields, "linesep", (KrkObj*)S("\r\n"));
krk_attachNamedObject(&module->fields, "devnull", (KrkObj*)S("nul"));
#else
krk_attachNamedObject(&module->fields, "name", (KrkObj*)S("posix"));
krk_attachNamedObject(&module->fields, "sep", (KrkObj*)S("/"));
krk_attachNamedValue(&module->fields, "altsep", NONE_VAL());
krk_attachNamedObject(&module->fields, "pathsep", (KrkObj*)S(":"));
krk_attachNamedObject(&module->fields, "linesep", (KrkObj*)S("\n"));
krk_attachNamedObject(&module->fields, "devnull", (KrkObj*)S("/dev/null"));
#endif
krk_attachNamedObject(&module->fields, "curdir", (KrkObj*)S("."));
krk_attachNamedObject(&module->fields, "pardir", (KrkObj*)S(".."));
krk_attachNamedObject(&module->fields, "extsep", (KrkObj*)S("."));
OSError = krk_newClass(S("OSError"), vm.exceptions.baseException);
krk_attachNamedObject(&module->fields, "OSError", (KrkObj*)OSError);
krk_finalizeClass(OSError);
@ -256,9 +305,15 @@ KrkValue krk_module_onload_os(void) {
BIND_FUNC(module,chdir);
BIND_FUNC(module,getpid);
BIND_FUNC(module,strerror);
BIND_FUNC(module,abort);
BIND_FUNC(module,sync);
BIND_FUNC(module,remove);
BIND_FUNC(module,truncate);
#ifndef _WIN32
BIND_FUNC(module,kill);
BIND_FUNC(module,fork);
BIND_FUNC(module,symlink);
#endif
krk_attachNamedValue(&module->fields, "F_OK", INTEGER_VAL(F_OK));