mirror of
https://github.com/CPunch/Cosmo.git
synced 2024-11-24 00:00:17 +00:00
minor refactoring
This commit is contained in:
parent
3ea653b26d
commit
1678194941
@ -250,6 +250,8 @@ int fileB_read(CState *state, int nargs, CValue *args)
|
|||||||
FILE *file = cosmoO_getUserP(fileObj);
|
FILE *file = cosmoO_getUserP(fileObj);
|
||||||
|
|
||||||
if (IS_NUMBER(args[1])) {
|
if (IS_NUMBER(args[1])) {
|
||||||
|
CValue temp;
|
||||||
|
char *buffer;
|
||||||
cosmo_Number length = cosmoV_readNumber(args[1]);
|
cosmo_Number length = cosmoV_readNumber(args[1]);
|
||||||
|
|
||||||
// make sure the length is within the bounds of the file
|
// make sure the length is within the bounds of the file
|
||||||
@ -258,31 +260,35 @@ int fileB_read(CState *state, int nargs, CValue *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// allocate a buffer for the read data
|
// allocate a buffer for the read data
|
||||||
char *buffer = cosmoM_xmalloc(state, length + 1);
|
buffer = cosmoM_xmalloc(state, length + 1);
|
||||||
|
|
||||||
// read the data
|
// read the data
|
||||||
fread(buffer, sizeof(char), length, file);
|
fread(buffer, sizeof(char), length, file);
|
||||||
buffer[(int)length] = '\0'; // write the NULL terminator
|
buffer[(int)length] = '\0'; // write the NULL terminator
|
||||||
|
|
||||||
// push the read data
|
// push the read data
|
||||||
CValue temp = cosmoV_newRef(cosmoO_takeString(state, buffer, length));
|
temp = cosmoV_newRef(cosmoO_takeString(state, buffer, length));
|
||||||
cosmoV_pushValue(state, temp);
|
cosmoV_pushValue(state, temp);
|
||||||
} else if (IS_STRING(args[1])) {
|
} else if (IS_STRING(args[1])) {
|
||||||
if (strcmp(cosmoV_readCString(args[1]), "a") == 0) {
|
if (strcmp(cosmoV_readCString(args[1]), "a") == 0) {
|
||||||
|
CValue temp;
|
||||||
|
char *buffer;
|
||||||
|
long length;
|
||||||
|
|
||||||
// get the length of the file
|
// get the length of the file
|
||||||
fseek(file, 0, SEEK_END);
|
fseek(file, 0, SEEK_END);
|
||||||
long length = ftell(file);
|
length = ftell(file);
|
||||||
fseek(file, 0, SEEK_SET);
|
fseek(file, 0, SEEK_SET);
|
||||||
|
|
||||||
// allocate a buffer for the read data
|
// allocate a buffer for the read data
|
||||||
char *buffer = cosmoM_xmalloc(state, length + 1);
|
buffer = cosmoM_xmalloc(state, length + 1);
|
||||||
|
|
||||||
// read the data
|
// read the data
|
||||||
fread(buffer, sizeof(char), length, file);
|
fread(buffer, sizeof(char), length, file);
|
||||||
buffer[length] = '\0'; // write the NULL terminator
|
buffer[length] = '\0'; // write the NULL terminator
|
||||||
|
|
||||||
// push the read data
|
// push the read data
|
||||||
CValue temp = cosmoV_newRef(cosmoO_takeString(state, buffer, length));
|
temp = cosmoV_newRef(cosmoO_takeString(state, buffer, length));
|
||||||
cosmoV_pushValue(state, temp);
|
cosmoV_pushValue(state, temp);
|
||||||
} else {
|
} else {
|
||||||
cosmoV_error(state, "file:read() expected \"a\" or <number>, got %s!",
|
cosmoV_error(state, "file:read() expected \"a\" or <number>, got %s!",
|
||||||
@ -297,6 +303,10 @@ int fileB_read(CState *state, int nargs, CValue *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int fileB_write(CState *state, int nargs, CValue *args) {
|
int fileB_write(CState *state, int nargs, CValue *args) {
|
||||||
|
CObjObject *fileObj;
|
||||||
|
CObjString *str;
|
||||||
|
FILE *file;
|
||||||
|
|
||||||
if (nargs != 2) {
|
if (nargs != 2) {
|
||||||
cosmoV_error(state, "file:write() expected 2 arguments, got %d!", nargs);
|
cosmoV_error(state, "file:write() expected 2 arguments, got %d!", nargs);
|
||||||
}
|
}
|
||||||
@ -311,10 +321,10 @@ int fileB_write(CState *state, int nargs, CValue *args) {
|
|||||||
cosmoV_typeStr(args[0]), cosmoV_typeStr(args[1]));
|
cosmoV_typeStr(args[0]), cosmoV_typeStr(args[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
CObjObject *fileObj = cosmoV_readObject(args[0]);
|
fileObj = cosmoV_readObject(args[0]);
|
||||||
FILE *file = cosmoO_getUserP(fileObj);
|
str = cosmoV_readString(args[1]);
|
||||||
|
|
||||||
CObjString *str = cosmoV_readString(args[1]);
|
file = (FILE *)cosmoO_getUserP(fileObj);
|
||||||
fwrite(str->str, sizeof(char), str->length, file);
|
fwrite(str->str, sizeof(char), str->length, file);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -356,7 +366,7 @@ CObjObject *pushFileObj(CState *state, FILE *file)
|
|||||||
|
|
||||||
int cosmoB_osOpen(CState *state, int nargs, CValue *args)
|
int cosmoB_osOpen(CState *state, int nargs, CValue *args)
|
||||||
{
|
{
|
||||||
const char *mode = "rb";
|
const char *filePath, *mode = "rb";
|
||||||
FILE *file;
|
FILE *file;
|
||||||
|
|
||||||
if (nargs >= 1) {
|
if (nargs >= 1) {
|
||||||
@ -370,14 +380,14 @@ int cosmoB_osOpen(CState *state, int nargs, CValue *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
mode = cosmoV_readCString(args[1]);
|
mode = cosmoV_readCString(args[1]);
|
||||||
} else if (nargs > 2) {
|
} else if (nargs != 1) {
|
||||||
cosmoV_error(state, "os.open() expected 1 or 2 arguments, got %d!", nargs);
|
cosmoV_error(state, "os.open() expected 1 or 2 arguments, got %d!", nargs);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
cosmoV_error(state, "os.open() expected 1 or 2 arguments, got %d!", nargs);
|
cosmoV_error(state, "os.open() expected 1 or 2 arguments, got %d!", nargs);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *filePath = cosmoV_readCString(args[0]);
|
filePath = cosmoV_readCString(args[0]);
|
||||||
file = fopen(filePath, mode);
|
file = fopen(filePath, mode);
|
||||||
if (file == NULL) {
|
if (file == NULL) {
|
||||||
cosmoV_pushBoolean(state, true);
|
cosmoV_pushBoolean(state, true);
|
||||||
|
Loading…
Reference in New Issue
Block a user