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);
|
||||
|
||||
if (IS_NUMBER(args[1])) {
|
||||
CValue temp;
|
||||
char *buffer;
|
||||
cosmo_Number length = cosmoV_readNumber(args[1]);
|
||||
|
||||
// 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
|
||||
char *buffer = cosmoM_xmalloc(state, length + 1);
|
||||
buffer = cosmoM_xmalloc(state, length + 1);
|
||||
|
||||
// read the data
|
||||
fread(buffer, sizeof(char), length, file);
|
||||
buffer[(int)length] = '\0'; // write the NULL terminator
|
||||
|
||||
// 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);
|
||||
} else if (IS_STRING(args[1])) {
|
||||
if (strcmp(cosmoV_readCString(args[1]), "a") == 0) {
|
||||
CValue temp;
|
||||
char *buffer;
|
||||
long length;
|
||||
|
||||
// get the length of the file
|
||||
fseek(file, 0, SEEK_END);
|
||||
long length = ftell(file);
|
||||
length = ftell(file);
|
||||
fseek(file, 0, SEEK_SET);
|
||||
|
||||
// allocate a buffer for the read data
|
||||
char *buffer = cosmoM_xmalloc(state, length + 1);
|
||||
buffer = cosmoM_xmalloc(state, length + 1);
|
||||
|
||||
// read the data
|
||||
fread(buffer, sizeof(char), length, file);
|
||||
buffer[length] = '\0'; // write the NULL terminator
|
||||
|
||||
// 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);
|
||||
} else {
|
||||
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) {
|
||||
CObjObject *fileObj;
|
||||
CObjString *str;
|
||||
FILE *file;
|
||||
|
||||
if (nargs != 2) {
|
||||
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]));
|
||||
}
|
||||
|
||||
CObjObject *fileObj = cosmoV_readObject(args[0]);
|
||||
FILE *file = cosmoO_getUserP(fileObj);
|
||||
fileObj = cosmoV_readObject(args[0]);
|
||||
str = cosmoV_readString(args[1]);
|
||||
|
||||
CObjString *str = cosmoV_readString(args[1]);
|
||||
file = (FILE *)cosmoO_getUserP(fileObj);
|
||||
fwrite(str->str, sizeof(char), str->length, file);
|
||||
|
||||
return 0;
|
||||
@ -356,7 +366,7 @@ CObjObject *pushFileObj(CState *state, FILE *file)
|
||||
|
||||
int cosmoB_osOpen(CState *state, int nargs, CValue *args)
|
||||
{
|
||||
const char *mode = "rb";
|
||||
const char *filePath, *mode = "rb";
|
||||
FILE *file;
|
||||
|
||||
if (nargs >= 1) {
|
||||
@ -370,14 +380,14 @@ int cosmoB_osOpen(CState *state, int nargs, CValue *args)
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
} else {
|
||||
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);
|
||||
if (file == NULL) {
|
||||
cosmoV_pushBoolean(state, true);
|
||||
|
Loading…
Reference in New Issue
Block a user