X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=exec.c;h=0b9b3621f308536e4e9b58e1e48098577f943c67;hp=6e51c027930a8a44c7dd360fd1443b029473b8c9;hb=13003bf6af9cf8c76cd024b0bf11695b92fba093;hpb=3c003bc168fe47f3e7ce08328782f969b59d89a3 diff --git a/exec.c b/exec.c index 6e51c02..0b9b362 100644 --- a/exec.c +++ b/exec.c @@ -53,29 +53,28 @@ static void qcvmerror(qc_program *prog, const char *fmt, ...) qc_program* prog_load(const char *filename) { - qc_program *prog; - prog_header header; - FILE *file; + qc_program *prog; + prog_header header; + FILE *file = file_open(filename, "rb"); - file = util_fopen(filename, "rb"); if (!file) return NULL; - if (fread(&header, sizeof(header), 1, file) != 1) { + if (file_read(&header, sizeof(header), 1, file) != 1) { loaderror("failed to read header from '%s'", filename); - fclose(file); + file_close(file); return NULL; } if (header.version != 6) { loaderror("header says this is a version %i progs, we need version 6\n", header.version); - fclose(file); + file_close(file); return NULL; } prog = (qc_program*)mem_a(sizeof(qc_program)); if (!prog) { - fclose(file); + file_close(file); printf("failed to allocate program data\n"); return NULL; } @@ -91,15 +90,17 @@ qc_program* prog_load(const char *filename) } #define read_data(hdrvar, progvar, reserved) \ - if (fseek(file, header.hdrvar.offset, SEEK_SET) != 0) { \ + if (file_seek(file, header.hdrvar.offset, SEEK_SET) != 0) { \ loaderror("seek failed"); \ goto error; \ } \ - if (fread(vec_add(prog->progvar, header.hdrvar.length + reserved), \ - sizeof(*prog->progvar), \ - header.hdrvar.length, file) \ - != header.hdrvar.length) \ - { \ + if (file_read ( \ + vec_add(prog->progvar, header.hdrvar.length + reserved), \ + sizeof(*prog->progvar), \ + header.hdrvar.length, \ + file \ + )!= header.hdrvar.length \ + ) { \ loaderror("read failed"); \ goto error; \ } @@ -113,7 +114,7 @@ qc_program* prog_load(const char *filename) read_data1(strings); read_data2(globals, 2); /* reserve more in case a RETURN using with the global at "the end" exists */ - fclose(file); + file_close(file); /* profile counters */ memset(vec_add(prog->profile, vec_size(prog->code)), 0, sizeof(prog->profile[0]) * vec_size(prog->code)); @@ -560,28 +561,24 @@ bool prog_exec(qc_program *prog, prog_section_function *func, size_t flags, long #define QCVM_PROFILE 0 #define QCVM_TRACE 0 # include __FILE__ - break; } case (VMXF_TRACE): { #define QCVM_PROFILE 0 #define QCVM_TRACE 1 # include __FILE__ - break; } case (VMXF_PROFILE): { #define QCVM_PROFILE 1 #define QCVM_TRACE 0 # include __FILE__ - break; } case (VMXF_TRACE|VMXF_PROFILE): { #define QCVM_PROFILE 1 #define QCVM_TRACE 1 # include __FILE__ - break; } }; @@ -644,7 +641,8 @@ static int qc_print(qc_program *prog) const char *laststr = NULL; for (i = 0; i < (size_t)prog->argc; ++i) { qcany *str = (qcany*)(prog->globals + OFS_PARM0 + 3*i); - printf("%s", (laststr = prog_getstring(prog, str->string))); + laststr = prog_getstring(prog, str->string); + printf("%s", laststr); } if (laststr && (prog->xflags & VMXF_TRACE)) { size_t len = strlen(laststr);