]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - exec.c
distro/archbsd/this - as we don't depend on glibc there, just libc; also changed...
[xonotic/gmqcc.git] / exec.c
diff --git a/exec.c b/exec.c
index 16e5ded6dbdaf8654643d2096e528e16e80d93a5..4fcb683561a2aceef6e15fdfc662e631a2f522f5 100644 (file)
--- a/exec.c
+++ b/exec.c
@@ -30,6 +30,7 @@
 
 #include "gmqcc.h"
 
+opts_cmd_t   opts; /* command line options */
 static void loaderror(const char *fmt, ...)
 {
     int     err = errno;
@@ -206,7 +207,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 +224,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");
@@ -591,8 +592,6 @@ cleanup:
 #if defined(QCVM_EXECUTOR)
 #include <math.h>
 
-opts_cmd_t opts;
-
 const char *type_name[TYPE_COUNT] = {
     "void",
     "string",
@@ -835,7 +834,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;
 
@@ -905,32 +903,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) {
@@ -1107,7 +1079,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);
@@ -1147,9 +1119,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],
@@ -1172,11 +1142,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;
@@ -1288,7 +1256,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;