mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-24 23:09:02 +00:00
Add stat mode macros to redbean unix api
This commit is contained in:
parent
17cbe73411
commit
206f073181
2 changed files with 65 additions and 8 deletions
57
third_party/lua/lunix.c
vendored
57
third_party/lua/lunix.c
vendored
|
@ -88,6 +88,7 @@
|
||||||
#include "third_party/lua/lgc.h"
|
#include "third_party/lua/lgc.h"
|
||||||
#include "third_party/lua/lua.h"
|
#include "third_party/lua/lua.h"
|
||||||
#include "third_party/lua/luaconf.h"
|
#include "third_party/lua/luaconf.h"
|
||||||
|
#include "libc/sysv/consts/s.h"
|
||||||
#include "tool/net/luacheck.h"
|
#include "tool/net/luacheck.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1756,6 +1757,55 @@ static int LuaUnixMinor(lua_State *L) {
|
||||||
return ReturnInteger(L, minor(luaL_checkinteger(L, 1)));
|
return ReturnInteger(L, minor(luaL_checkinteger(L, 1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// unix.S_ISDIR(mode:int)
|
||||||
|
// └─→ bool
|
||||||
|
static int LuaUnixSisdir(lua_State *L) {
|
||||||
|
lua_pushboolean(L, S_ISDIR(luaL_checkinteger(L, 1)));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// unix.S_ISCHR(mode:int)
|
||||||
|
// └─→ bool
|
||||||
|
static int LuaUnixSischr(lua_State *L) {
|
||||||
|
lua_pushboolean(L, S_ISCHR(luaL_checkinteger(L, 1)));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// unix.S_ISBLK(mode:int)
|
||||||
|
// └─→ bool
|
||||||
|
static int LuaUnixSisblk(lua_State *L) {
|
||||||
|
lua_pushboolean(L, S_ISBLK(luaL_checkinteger(L, 1)));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// unix.S_ISREG(mode:int)
|
||||||
|
// └─→ bool
|
||||||
|
static int LuaUnixSisreg(lua_State *L) {
|
||||||
|
lua_pushboolean(L, S_ISREG(luaL_checkinteger(L, 1)));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// unix.S_ISFIFO(mode:int)
|
||||||
|
// └─→ bool
|
||||||
|
static int LuaUnixSisfifo(lua_State *L) {
|
||||||
|
lua_pushboolean(L, S_ISFIFO(luaL_checkinteger(L, 1)));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// unix.S_ISLNK(mode:int)
|
||||||
|
// └─→ bool
|
||||||
|
static int LuaUnixSislnk(lua_State *L) {
|
||||||
|
lua_pushboolean(L, S_ISLNK(luaL_checkinteger(L, 1)));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// unix.S_ISSOCK(mode:int)
|
||||||
|
// └─→ bool
|
||||||
|
static int LuaUnixSissock(lua_State *L) {
|
||||||
|
lua_pushboolean(L, S_ISSOCK(luaL_checkinteger(L, 1)));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// unix.Stat object
|
// unix.Stat object
|
||||||
|
|
||||||
|
@ -2408,6 +2458,13 @@ static void LuaUnixDirObj(lua_State *L) {
|
||||||
// UNIX module
|
// UNIX module
|
||||||
|
|
||||||
static const luaL_Reg kLuaUnix[] = {
|
static const luaL_Reg kLuaUnix[] = {
|
||||||
|
{"S_ISBLK", LuaUnixSisblk}, // is st:mode() a block device?
|
||||||
|
{"S_ISCHR", LuaUnixSischr}, // is st:mode() a character device?
|
||||||
|
{"S_ISDIR", LuaUnixSisdir}, // is st:mode() a directory?
|
||||||
|
{"S_ISFIFO", LuaUnixSisfifo}, // is st:mode() a fifo?
|
||||||
|
{"S_ISLNK", LuaUnixSislnk}, // is st:mode() a symbolic link?
|
||||||
|
{"S_ISREG", LuaUnixSisreg}, // is st:mode() a regular file?
|
||||||
|
{"S_ISSOCK", LuaUnixSissock}, // is st:mode() a socket?
|
||||||
{"Sigset", LuaUnixSigset}, // creates signal bitmask
|
{"Sigset", LuaUnixSigset}, // creates signal bitmask
|
||||||
{"WEXITSTATUS", LuaUnixWexitstatus}, // gets exit status from wait status
|
{"WEXITSTATUS", LuaUnixWexitstatus}, // gets exit status from wait status
|
||||||
{"WIFEXITED", LuaUnixWifexited}, // gets exit code from wait status
|
{"WIFEXITED", LuaUnixWifexited}, // gets exit code from wait status
|
||||||
|
|
|
@ -838,7 +838,7 @@ FUNCTIONS
|
||||||
request message is not preserved. Whether or not the same key can
|
request message is not preserved. Whether or not the same key can
|
||||||
repeat depends on whether or not it's a standard header, and if
|
repeat depends on whether or not it's a standard header, and if
|
||||||
so, if it's one of the ones that the RFCs define as repeatable.
|
so, if it's one of the ones that the RFCs define as repeatable.
|
||||||
See khttprepeatable.c. Those headers will not be folded. Standard
|
v See khttprepeatable.c. Those headers will not be folded. Standard
|
||||||
headers which aren't on that list, will be overwritten with the
|
headers which aren't on that list, will be overwritten with the
|
||||||
last-occurring one during parsing. Extended headers are always
|
last-occurring one during parsing. Extended headers are always
|
||||||
passed through exactly as they're received. Please consider using
|
passed through exactly as they're received. Please consider using
|
||||||
|
@ -3527,13 +3527,13 @@ UNIX MODULE
|
||||||
|
|
||||||
To determine the file type:
|
To determine the file type:
|
||||||
|
|
||||||
- `(st:mode() & 0170000) == 0010000` means fifo or pipe
|
- `unix.S_ISREG(st:mode())` means regular file
|
||||||
- `(st:mode() & 0170000) == 0020000` means character device
|
- `unix.S_ISDIR(st:mode())` means directory
|
||||||
- `(st:mode() & 0170000) == 0040000` means directory
|
- `unix.S_ISLNK(st:mode())` means symbolic link
|
||||||
- `(st:mode() & 0170000) == 0060000` means block device
|
- `unix.S_ISCHR(st:mode())` means character device
|
||||||
- `(st:mode() & 0170000) == 0100000` means regular file
|
- `unix.S_ISBLK(st:mode())` means block device
|
||||||
- `(st:mode() & 0170000) == 0120000` means symbolic link
|
- `unix.S_ISFIFO(st:mode())` means fifo or pipe
|
||||||
- `(st:mode() & 0170000) == 0140000` means socket
|
- `unix.S_ISSOCK(st:mode())` means socket
|
||||||
|
|
||||||
unix.Stat:uid()
|
unix.Stat:uid()
|
||||||
└─→ uid:int
|
└─→ uid:int
|
||||||
|
|
Loading…
Add table
Reference in a new issue