]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - exec.c
Fix that (newer clang will fail on it)
[xonotic/gmqcc.git] / exec.c
diff --git a/exec.c b/exec.c
index da79a05e941f3439392f57b2e4bc391d3412c85f..57b47318fab3211a8d269db944933ad26eeb95ee 100644 (file)
--- a/exec.c
+++ b/exec.c
  */
 #ifndef QCVM_LOOP
 #include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
 #include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
 
 #include "gmqcc.h"
 
@@ -54,9 +53,9 @@ static void qcvmerror(qc_program_t *prog, const char *fmt, ...)
 
 qc_program_t* prog_load(const char *filename, bool skipversion)
 {
-    qc_program_t   *prog;
     prog_header_t   header;
-    FILE         *file  = fs_file_open(filename, "rb");
+    qc_program_t   *prog;
+    fs_file_t      *file  = fs_file_open(filename, "rb");
 
     if (!file)
         return NULL;
@@ -91,11 +90,11 @@ qc_program_t* prog_load(const char *filename, bool skipversion)
     }
 
 #define read_data(hdrvar, progvar, reserved)                           \
-    if (fs_file_seek(file, header.hdrvar.offset, SEEK_SET) != 0) {        \
+    if (fs_file_seek(file, header.hdrvar.offset, SEEK_SET) != 0) {     \
         loaderror("seek failed");                                      \
         goto error;                                                    \
     }                                                                  \
-    if (fs_file_read (                                                    \
+    if (fs_file_read (                                                 \
             vec_add(prog->progvar, header.hdrvar.length + reserved),   \
             sizeof(*prog->progvar),                                    \
             header.hdrvar.length,                                      \
@@ -206,7 +205,7 @@ qcany_t* prog_getedict(qc_program_t *prog, qcint_t e) {
     return (qcany_t*)(prog->entitydata + (prog->entityfields * e));
 }
 
-qcint_t prog_spawn_entity(qc_program_t *prog) {
+static qcint_t prog_spawn_entity(qc_program_t *prog) {
     char  *data;
     qcint_t  e;
     for (e = 0; e < (qcint_t)vec_size(prog->entitypool); ++e) {
@@ -223,7 +222,7 @@ qcint_t prog_spawn_entity(qc_program_t *prog) {
     return e;
 }
 
-void prog_free_entity(qc_program_t *prog, qcint_t e) {
+static void prog_free_entity(qc_program_t *prog, qcint_t e) {
     if (!e) {
         prog->vmerror++;
         fprintf(stderr, "Trying to free world entity\n");
@@ -352,7 +351,7 @@ static void trace_print_global(qc_program_t *prog, unsigned int glob, int vtype)
 done:
     if (len < (int)sizeof(spaces)-1) {
         spaces[sizeof(spaces)-1-len] = 0;
-        fs_file_puts(stdout, spaces);
+        fs_file_puts((fs_file_t*)stdout, spaces);
         spaces[sizeof(spaces)-1-len] = ' ';
     }
 }
@@ -833,7 +832,6 @@ static prog_builtin_t qc_builtins[] = {
     &qc_sqrt,        /*   13  */
     &qc_floor        /*   14  */
 };
-static size_t qc_builtins_count = sizeof(qc_builtins) / sizeof(qc_builtins[0]);
 
 static const char *arg0 = NULL;
 
@@ -878,17 +876,10 @@ static void prog_main_setparams(qc_program_t *prog) {
         arg->vector[2] = 0;
         switch (main_params[i].vtype) {
             case TYPE_VECTOR:
-#ifdef _MSC_VER
-                (void)sscanf_s(main_params[i].value, " %f %f %f ",
-                               &arg->vector[0],
-                               &arg->vector[1],
-                               &arg->vector[2]);
-#else
-                (void)sscanf(main_params[i].value, " %f %f %f ",
-                             &arg->vector[0],
-                             &arg->vector[1],
-                             &arg->vector[2]);
-#endif
+                (void)util_sscanf(main_params[i].value, " %f %f %f ",
+                                       &arg->vector[0],
+                                       &arg->vector[1],
+                                       &arg->vector[2]);
                 break;
             case TYPE_FLOAT:
                 arg->_float = atof(main_params[i].value);
@@ -903,32 +894,6 @@ static void prog_main_setparams(qc_program_t *prog) {
     }
 }
 
-void escapestring(char* dest, const char* src)  {
-  char c;
-  while ((c = *(src++))) {
-    switch(c) {
-      case '\t':
-        *(dest++) = '\\', *(dest++) = 't';
-        break;
-      case '\n':
-        *(dest++) = '\\', *(dest++) = 'n';
-        break;
-      case '\r':
-        *(dest++) = '\\', *(dest++) = 'r';
-        break;
-      case '\\':
-        *(dest++) = '\\', *(dest++) = '\\';
-        break;
-      case '\"':
-        *(dest++) = '\\', *(dest++) = '\"';
-        break;
-      default:
-        *(dest++) = c;
-     }
-  }
-  *dest = '\0';
-}
-
 void prog_disasm_function(qc_program_t *prog, size_t id);
 
 int main(int argc, char **argv) {
@@ -1105,7 +1070,7 @@ int main(int argc, char **argv) {
     }
 
     prog->builtins       = qc_builtins;
-    prog->builtins_count = qc_builtins_count;
+    prog->builtins_count = GMQCC_ARRAY_COUNT(qc_builtins);
 
     if (opts_info) {
         printf("Program's system-checksum = 0x%04x\n", (unsigned int)prog->crc16);
@@ -1145,9 +1110,7 @@ int main(int argc, char **argv) {
         return 0;
     }
     if (opts_printdefs) {
-        char       *escape    = NULL;
         const char *getstring = NULL;
-
         for (i = 0; i < vec_size(prog->defs); ++i) {
             printf("Global: %8s %-16s at %u%s",
                    type_name[prog->defs[i].type & DEF_TYPEMASK],
@@ -1170,11 +1133,9 @@ int main(int argc, char **argv) {
                         break;
                     case TYPE_STRING:
                         getstring = prog_getstring(prog, ((qcany_t*)(prog->globals + prog->defs[i].offset))->string);
-                        escape    = (char*)mem_a(strlen(getstring) * 2 + 1); /* will be enough */
-                        escapestring(escape, getstring);
-                        printf(" [init: `%s`]", escape);
-
-                        mem_d(escape); /* free */
+                        printf(" [init: `");
+                        print_escaped_string(getstring, strlen(getstring));
+                        printf("`]\n");
                         break;
                     default:
                         break;
@@ -1286,7 +1247,7 @@ void prog_disasm_function(qc_program_t *prog, size_t id) {
 #   define FLOAT_IS_TRUE_FOR_INT(x) ( (x) & 0x7FFFFFFF )
 #endif
 
-while (1) {
+while (prog->vmerror == 0) {
     prog_section_function_t  *newf;
     qcany_t          *ed;
     qcany_t          *ptr;