Fixed filesystem reads, utils
This commit is contained in:
parent
03f4203fa2
commit
cf19c634a2
@ -16,6 +16,49 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <linux/kd.h>
|
#include <linux/kd.h>
|
||||||
|
|
||||||
|
void logn (const char *message) {
|
||||||
|
FILE *file;
|
||||||
|
|
||||||
|
file = fopen("lupi.log", "a");
|
||||||
|
|
||||||
|
if (file == NULL) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
fputs(message, file);
|
||||||
|
fputs("\n", file);
|
||||||
|
fclose(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void logi (int message) {
|
||||||
|
FILE *file;
|
||||||
|
|
||||||
|
file = fopen("lupi.log", "a");
|
||||||
|
|
||||||
|
if (file == NULL) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
char str[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
||||||
|
sprintf(str, "%d", message);
|
||||||
|
fputs(str, file);
|
||||||
|
fclose(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void logm (const char *message) {
|
||||||
|
FILE *file;
|
||||||
|
|
||||||
|
file = fopen("lupi.log", "a");
|
||||||
|
|
||||||
|
if (file == NULL) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
fputs(message, file);
|
||||||
|
fclose(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int l_sleep (lua_State *L) {
|
static int l_sleep (lua_State *L) {
|
||||||
unsigned int t = lua_tonumber(L, 1);
|
unsigned int t = lua_tonumber(L, 1);
|
||||||
usleep(t);
|
usleep(t);
|
||||||
@ -73,14 +116,20 @@ static int l_fs_spaceUsed (lua_State *L) {
|
|||||||
static int l_fs_open (lua_State *L) {
|
static int l_fs_open (lua_State *L) {
|
||||||
const char* fname = lua_tostring(L, 1);
|
const char* fname = lua_tostring(L, 1);
|
||||||
const char* mode = lua_tostring(L, 2);
|
const char* mode = lua_tostring(L, 2);
|
||||||
|
logm("Open file: ");
|
||||||
|
logn(fname);
|
||||||
int m = 0;
|
int m = 0;
|
||||||
if(mode[0] == 'r') m = O_RDONLY;
|
if(mode[0] == 'r') m = O_RDONLY;
|
||||||
else if(mode[0] == 'w') m = O_WRONLY | O_CREAT /*| O_DIRECT*/;
|
else if(mode[0] == 'w') m = O_WRONLY | O_CREAT /*| O_DIRECT*/;
|
||||||
else if(mode[0] == 'a') m = O_WRONLY | O_APPEND | O_CREAT /*| O_DIRECT*/;
|
else if(mode[0] == 'a') m = O_WRONLY | O_APPEND | O_CREAT /*| O_DIRECT*/;
|
||||||
else return 0;
|
else return 0;
|
||||||
int fd = open(fname, m, 644);
|
int fd = open(fname, m, 644);
|
||||||
if(fd == -1) return 0;
|
|
||||||
|
|
||||||
|
if(fd == -1) return 0;
|
||||||
|
logm("FD ");
|
||||||
|
logi(fd);
|
||||||
|
logm(" for ");
|
||||||
|
logn(fname);
|
||||||
lua_pushnumber(L, fd);
|
lua_pushnumber(L, fd);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -145,9 +194,11 @@ static int l_fs_list (lua_State *L) {
|
|||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
int n = 1;
|
int n = 1;
|
||||||
while ((ent = readdir(dir)) != NULL) { //TODO: Check if it should be freed
|
while ((ent = readdir(dir)) != NULL) { //TODO: Check if it should be freed
|
||||||
|
if(strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0) {
|
||||||
lua_pushstring(L, ent->d_name);
|
lua_pushstring(L, ent->d_name);
|
||||||
lua_rawseti(L, -2, n++);
|
lua_rawseti(L, -2, n++);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
@ -213,11 +264,18 @@ static int l_fs_size (lua_State *L) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int l_fs_read (lua_State *L) {
|
static int l_fs_read (lua_State *L) {
|
||||||
int fd = lua_tonumber(L, 1);
|
unsigned int fd = lua_tonumber(L, 1);
|
||||||
int count = lua_tonumber(L, 2);
|
unsigned int count = lua_tonumber(L, 2);
|
||||||
void* buf = malloc(count);
|
void* buf = malloc(count);
|
||||||
size_t res = read(fd, buf, count);
|
size_t res = read(fd, buf, count);
|
||||||
if(res != -1) {
|
logm("read(");
|
||||||
|
logi(fd);
|
||||||
|
logm(") bytes:");
|
||||||
|
logi(res);
|
||||||
|
logm(" of ");
|
||||||
|
logi(count);
|
||||||
|
logn("");
|
||||||
|
if(res > 0) {
|
||||||
lua_pushlstring(L, buf, res);
|
lua_pushlstring(L, buf, res);
|
||||||
free(buf);
|
free(buf);
|
||||||
return 1;
|
return 1;
|
||||||
@ -267,6 +325,7 @@ void luanative_start(lua_State *L) {
|
|||||||
pushctuple(L, "fs_write", l_fs_write);
|
pushctuple(L, "fs_write", l_fs_write);
|
||||||
pushctuple(L, "fs_spaceTotal", l_fs_spaceTotal);
|
pushctuple(L, "fs_spaceTotal", l_fs_spaceTotal);
|
||||||
pushctuple(L, "fs_rename", l_fs_rename);
|
pushctuple(L, "fs_rename", l_fs_rename);
|
||||||
|
pushctuple(L, "fs_list", l_fs_list);
|
||||||
pushctuple(L, "fs_lastModified", l_fs_lastModified);
|
pushctuple(L, "fs_lastModified", l_fs_lastModified);
|
||||||
pushctuple(L, "fs_remove", l_fs_remove);
|
pushctuple(L, "fs_remove", l_fs_remove);
|
||||||
pushctuple(L, "fs_close", l_fs_close);
|
pushctuple(L, "fs_close", l_fs_close);
|
||||||
|
@ -10,6 +10,17 @@ function api.pushSignal(...)
|
|||||||
--FIXME: ASAP: Implement
|
--FIXME: ASAP: Implement
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function api.pullSignal(timeout)
|
||||||
|
if type(timeout) == "number" then
|
||||||
|
native.sleep(timeout * 1000000);
|
||||||
|
end
|
||||||
|
--print(debug.traceback())
|
||||||
|
end
|
||||||
|
|
||||||
|
function api.uptime()
|
||||||
|
return native.uptime()
|
||||||
|
end
|
||||||
|
|
||||||
function api.beep(freq, time)
|
function api.beep(freq, time)
|
||||||
if not freq then freq = 1000 end
|
if not freq then freq = 1000 end
|
||||||
if not time then time = 0.2 end
|
if not time then time = 0.2 end
|
||||||
|
@ -144,6 +144,9 @@ function filesystem.register(basePath)
|
|||||||
return native.fs_size(realpath(path))
|
return native.fs_size(realpath(path))
|
||||||
end
|
end
|
||||||
function fs.read(handle, count) --FIXME: Hudgeread, fix in general
|
function fs.read(handle, count) --FIXME: Hudgeread, fix in general
|
||||||
|
if count == math.huge then
|
||||||
|
count = 4294967295
|
||||||
|
end
|
||||||
checkArg(1, handle, "number")
|
checkArg(1, handle, "number")
|
||||||
checkArg(2, count, "number")
|
checkArg(2, count, "number")
|
||||||
return native.fs_read(handle, count)
|
return native.fs_read(handle, count)
|
||||||
|
@ -110,7 +110,7 @@ function textgpu.start()
|
|||||||
checkArg(3, w, "number")
|
checkArg(3, w, "number")
|
||||||
checkArg(4, h, "number")
|
checkArg(4, h, "number")
|
||||||
checkArg(5, ch, "string")
|
checkArg(5, ch, "string")
|
||||||
ch = ch:sub(1, 1):rep(w)
|
ch = ch:sub(1, 1):rep(math.floor(w))
|
||||||
for i=1, h do
|
for i=1, h do
|
||||||
gpu.set(x, y + i - 1, ch)
|
gpu.set(x, y + i - 1, ch)
|
||||||
end
|
end
|
||||||
@ -122,6 +122,7 @@ function textgpu.start()
|
|||||||
gpu.setBackground(0x000000)
|
gpu.setBackground(0x000000)
|
||||||
|
|
||||||
modules.component.api.register(nil, "gpu", gpu)
|
modules.component.api.register(nil, "gpu", gpu)
|
||||||
|
modules.component.api.register(nil, "screen", {getKeyboards = function() return {} end}) --verry dummy screen, TODO: make it better
|
||||||
|
|
||||||
deadhooks[#deadhooks + 1] = function()
|
deadhooks[#deadhooks + 1] = function()
|
||||||
io.write("\x1b[?25h") --Enable cursor on quit
|
io.write("\x1b[?25h") --Enable cursor on quit
|
||||||
|
Loading…
Reference in New Issue
Block a user