]> de.git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - ftepp.c
Makefile: split up 'make gource' into 'make gource' (render only) and 'make gource...
[xonotic/gmqcc.git] / ftepp.c
diff --git a/ftepp.c b/ftepp.c
index 4734639244ab1f426706dcb8dcc61b0b93ed81f5..68491ed6dd2af72e1c8e69035b6e48bce5384a35 100644 (file)
--- a/ftepp.c
+++ b/ftepp.c
@@ -124,7 +124,6 @@ char *ftepp_predef_line(lex_file *context) {
 char *ftepp_predef_file(lex_file *context) {
     size_t  length = strlen(context->name) + 3; /* two quotes and a terminator */
     char   *value  = (char*)mem_a(length);
-    memset (value, 0, length);
     sprintf(value, "\"%s\"", context->name);
 
     return value;
@@ -451,8 +450,12 @@ static bool ftepp_define_body(ftepp_t *ftepp, ppmacro *macro)
                 ftepp->token = old;
             }
         }
-        else
-        {
+        else if (macro->variadic && !strcmp(ftepp_tokval(ftepp), "__VA_COUNT__")) {
+            ftepp->token = TOKEN_VA_COUNT;
+            ptok         = pptoken_make(ftepp);
+            vec_push(macro->output, ptok);
+            ftepp_next(ftepp);
+        } else {
             ptok = pptoken_make(ftepp);
             vec_push(macro->output, ptok);
             ftepp_next(ftepp);
@@ -681,6 +684,7 @@ static void ftepp_param_out(ftepp_t *ftepp, macroparam *param)
 static bool ftepp_preprocess(ftepp_t *ftepp);
 static bool ftepp_macro_expand(ftepp_t *ftepp, ppmacro *macro, macroparam *params, bool resetline)
 {
+    char     *buffer       = NULL;
     char     *old_string   = ftepp->output_string;
     char     *inner_string;
     lex_file *old_lexer    = ftepp->lex;
@@ -736,6 +740,12 @@ static bool ftepp_macro_expand(ftepp_t *ftepp, ppmacro *macro, macroparam *param
                 ftepp_param_out(ftepp, &params[out->constval.i + vararg_start]);
                 break;
 
+            case TOKEN_VA_COUNT:
+                util_asprintf(&buffer, "%d", varargs);
+                ftepp_out(ftepp, buffer, false);
+                mem_d(buffer);
+                break;
+
             case TOKEN_IDENT:
             case TOKEN_TYPENAME:
             case TOKEN_KEYWORD:
@@ -1379,6 +1389,11 @@ static bool ftepp_include(ftepp_t *ftepp)
         return false;
     }
 
+    if (!ftepp->output_on) {
+        ftepp_next(ftepp);
+        return true;
+    }
+
     ctx = ftepp_ctx(ftepp);
 
     unescape(ftepp_tokval(ftepp), ftepp_tokval(ftepp));