mirror of
				https://github.com/CPunch/Cosmo.git
				synced 2025-10-31 04:50:12 +00:00 
			
		
		
		
	minor refactoring
This commit is contained in:
		| @@ -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); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user