ref: 5e9c1b1c102811e94d8d8c30bbdef259c9910a0a
dir: /fs.c/
static int
p9_open(lua_State *L)
{
const char *file;
int mode;
int fd;
file = luaL_checkstring(L, 1);
mode = luaL_checkinteger(L, 2);
if((fd = open(file, mode)) == -1)
lerror(L, "open");
lua_pushinteger(L, fd);
return 1;
}
static int
p9_create(lua_State *L)
{
const char *file;
int fd, mode;
ulong perm;
file = luaL_checkstring(L, 1);
mode = luaL_checkinteger(L, 2);
perm = luaL_checkinteger(L, 3);
if((fd = create(file, mode, perm)) == -1)
lerror(L, "create");
lua_pushinteger(L, fd);
return 1;
}
static int
p9_close(lua_State *L)
{
if(close(luaL_checkinteger(L, 1)) == -1)
lerror(L, "close");
return 0;
}
static int
p9_read(lua_State *L)
{
lua_Integer fd, nbytes, offset;
long n;
char *buf;
fd = luaL_checkinteger(L, 1);
nbytes = luaL_checkinteger(L, 2);
offset = luaL_optinteger(L, 3, -1);
buf = getbuffer(L, nbytes);
if(offset == -1)
n = read(fd, buf, nbytes);
else
n = pread(fd, buf, nbytes, offset);
if(n == -1)
lerror(L, "read");
lua_pushlstring(L, buf, n);
return 1;
}
static int
p9_write(lua_State *L)
{
lua_Integer fd, offset;
size_t nbytes;
const char *buf;
long n;
fd = luaL_checkinteger(L, 1);
buf = luaL_checklstring(L, 2, &nbytes);
nbytes = luaL_optinteger(L, 3, nbytes);
offset = luaL_optinteger(L, 4, -1);
if(offset == -1)
n = write(fd, buf, nbytes);
else
n = pwrite(fd, buf, nbytes, offset);
if(n != nbytes)
lerror(L, "write");
lua_pushinteger(L, n);
return 1;
}
static int
p9_seek(lua_State *L)
{
lua_Integer fd, n, type;
vlong off;
fd = luaL_checkinteger(L, 1);
n = luaL_checkinteger(L, 2);
type = luaL_checkinteger(L, 3);
if((off = seek(fd, n, type)) == -1)
lerror(L, "seek");
lua_pushinteger(L, off);
return 1;
}
static int
p9_remove(lua_State *L)
{
const char *file;
file = luaL_checkstring(L, 1);
if(remove(file) == -1)
lerror(L, "remove");
lua_pushboolean(L, 1);
return 1;
}
static int
p9_fd2path(lua_State *L)
{
lua_Integer fd;
char *buf;
fd = luaL_checkinteger(L, 1);
buf = getbuffer(L, 8192);
if(fd2path(fd, buf, 8192) != 0)
lerror(L, "fd2path");
lua_pushstring(L, buf);
return 1;
}