diff --git a/tools/qfcc/include/qfcc.h b/tools/qfcc/include/qfcc.h index 7f8b8ce6d..11b9ee702 100644 --- a/tools/qfcc/include/qfcc.h +++ b/tools/qfcc/include/qfcc.h @@ -22,26 +22,9 @@ #ifndef __qfcc_h #define __qfcc_h -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include - #include "QF/pr_comp.h" #include "QF/pr_debug.h" -/* These may be underscored... */ -#if defined(HAVE__SNPRINTF) -# undef snprintf -# define snprintf _snprintf -#endif -#if defined(HAVE__VSNPRINTF) -# undef vsnprintf -# define vsnprintf _vsnprintf -#endif - /* TODO: o "stopped at 10 errors" diff --git a/tools/qfcc/source/expr.c b/tools/qfcc/source/expr.c index fa68f9347..058f43371 100644 --- a/tools/qfcc/source/expr.c +++ b/tools/qfcc/source/expr.c @@ -348,33 +348,16 @@ new_expr (void) return e; } -static int -num_digits (int val) -{ - int num = 1; - - if (val < 0) { - num++; - val = -val; - } - while (val > 9) { - val /= 10; - num++; - } - return num; -} - const char * new_label_name (void) { static int label = 0; int lnum = ++label; const char *fname = current_func->def->name; - int len = 1 + strlen (fname) + 1 + num_digits (lnum) + 1; - char *lname = malloc (len); + char *lname; + lname = strdup (va ("$%s_%d", fname, lnum)); SYS_CHECKMEM (lname); - snprintf (lname, len, "$%s_%d", fname, lnum); return lname; } diff --git a/tools/qfcc/source/pr_def.c b/tools/qfcc/source/pr_def.c index 6ffb7beff..119a637c9 100644 --- a/tools/qfcc/source/pr_def.c +++ b/tools/qfcc/source/pr_def.c @@ -32,6 +32,7 @@ static const char rcsid[] = #include #include +#include #include "qfcc.h" #include "expr.h" @@ -117,7 +118,6 @@ def_t * PR_GetDef (type_t *type, const char *name, def_t *scope, int *allocate) { def_t *def = check_for_name (type, name, scope, allocate); - char element[MAX_NAME]; int size; if (def || !allocate) @@ -139,18 +139,15 @@ PR_GetDef (type_t *type, const char *name, def_t *scope, int *allocate) if (type->type == ev_vector && name) { def_t *d; - snprintf (element, sizeof (element), "%s_x", name); - d = PR_GetDef (&type_float, element, scope, allocate); + d = PR_GetDef (&type_float, va ("%s_x", name), scope, allocate); d->used = 1; d->parent = def; - snprintf (element, sizeof (element), "%s_y", name); - d = PR_GetDef (&type_float, element, scope, allocate); + d = PR_GetDef (&type_float, va ("%s_y", name), scope, allocate); d->used = 1; d->parent = def; - snprintf (element, sizeof (element), "%s_z", name); - d = PR_GetDef (&type_float, element, scope, allocate); + d = PR_GetDef (&type_float, va ("%s_z", name), scope, allocate); d->used = 1; d->parent = def; } else { @@ -163,18 +160,18 @@ PR_GetDef (type_t *type, const char *name, def_t *scope, int *allocate) if (type->aux_type->type == ev_vector) { def_t *d; - snprintf (element, sizeof (element), "%s_x", name); - d = PR_GetDef (&type_floatfield, element, scope, allocate); + d = PR_GetDef (&type_floatfield, + va ("%s_x", name), scope, allocate); d->used = 1; // always `used' d->parent = def; - snprintf (element, sizeof (element), "%s_y", name); - d = PR_GetDef (&type_floatfield, element, scope, allocate); + d = PR_GetDef (&type_floatfield, + va ("%s_y", name), scope, allocate); d->used = 1; // always `used' d->parent = def; - snprintf (element, sizeof (element), "%s_z", name); - d = PR_GetDef (&type_floatfield, element, scope, allocate); + d = PR_GetDef (&type_floatfield, + va ("%s_z", name), scope, allocate); d->used = 1; // always `used' d->parent = def; } else if (type->aux_type->type == ev_pointer) { diff --git a/tools/qfcc/source/pr_imm.c b/tools/qfcc/source/pr_imm.c index f05c87212..b0617e51f 100644 --- a/tools/qfcc/source/pr_imm.c +++ b/tools/qfcc/source/pr_imm.c @@ -31,6 +31,7 @@ static const char rcsid[] = #include #include "QF/hash.h" +#include "QF/va.h" #include "qfcc.h" #include "type.h" @@ -59,7 +60,7 @@ float_imm_get_key (void *_def, void *unused) def_t *def = (def_t *) _def; static char rep[20]; - snprintf (rep, sizeof (rep), "\001float:%08X\001", G_INT (def->ofs)); + return va ("\001float:%08X\001", G_INT (def->ofs)); return rep; } @@ -69,7 +70,7 @@ vector_imm_get_key (void *_def, void *unused) def_t *def = (def_t *) _def; static char rep[60]; - snprintf (rep, sizeof (rep), "\001vector:%08X\001%08X\001%08X\001", + return va ("\001vector:%08X\001%08X\001%08X\001", G_INT (def->ofs), G_INT (def->ofs + 1), G_INT (def->ofs + 2)); return rep; } @@ -80,10 +81,9 @@ quaternion_imm_get_key (void *_def, void *unused) def_t *def = (def_t *) _def; static char rep[60]; - snprintf (rep, sizeof (rep), - "\001quaternion:%08X\001%08X\001%08X\001%08X\001", - G_INT (def->ofs), G_INT (def->ofs + 1), - G_INT (def->ofs + 2), G_INT (def->ofs + 3)); + return va ("\001quaternion:%08X\001%08X\001%08X\001%08X\001", + G_INT (def->ofs), G_INT (def->ofs + 1), + G_INT (def->ofs + 2), G_INT (def->ofs + 3)); return rep; } @@ -94,7 +94,7 @@ int_imm_get_key (void *_def, void *_str) static char rep[60]; char *str = (char *) _str; - snprintf (rep, sizeof (rep), "\001%s:%08X\001", str, G_INT (def->ofs)); + return va ("\001%s:%08X\001", str, G_INT (def->ofs)); return rep; } @@ -102,8 +102,7 @@ def_t * PR_ReuseConstant (expr_t *expr, def_t *def) { def_t *cn; - char rep[60]; - const char *r = rep; + const char *rep; hashtab_t *tab = 0; type_t *type; expr_t e = *expr; @@ -134,32 +133,29 @@ PR_ReuseConstant (expr_t *expr, def_t *def) cn = 0; switch (e.type) { case ex_entity: - snprintf (rep, sizeof (rep), "\001entity:%08X\001", - e.e.integer_val); + rep = va ("\001entity:%08X\001", e.e.integer_val); tab = entity_imm_defs; type = &type_entity; break; case ex_field: - snprintf (rep, sizeof (rep), "\001field:%08X\001", e.e.integer_val); + rep = va ("\001field:%08X\001", e.e.integer_val); tab = field_imm_defs; type = &type_field; break; case ex_func: - snprintf (rep, sizeof (rep), "\001func:%08X\001", e.e.integer_val); + rep = va ("\001func:%08X\001", e.e.integer_val); tab = func_imm_defs; type = &type_function; break; case ex_pointer: - snprintf (rep, sizeof (rep), "\001pointer:%08X\001", - e.e.pointer.val); + rep = va ("\001pointer:%08X\001", e.e.pointer.val); tab = pointer_imm_defs; type = &type_pointer; break; case ex_integer: case ex_uinteger: if (!def || def->type != &type_float) { - snprintf (rep, sizeof (rep), "\001integer:%08X\001", - e.e.integer_val); + rep = va ("\001integer:%08X\001", e.e.integer_val); tab = integer_imm_defs; if (e.type == ex_uinteger) type = &type_uinteger; @@ -172,25 +168,24 @@ PR_ReuseConstant (expr_t *expr, def_t *def) else e.e.float_val = e.e.integer_val; case ex_float: - snprintf (rep, sizeof (rep), "\001float:%08X\001", e.e.integer_val); + rep = va ("\001float:%08X\001", e.e.integer_val); tab = float_imm_defs; type = &type_float; break; case ex_string: - r = e.e.string_val ? e.e.string_val : ""; + rep = e.e.string_val ? e.e.string_val : ""; tab = string_imm_defs; type = &type_string; break; case ex_vector: - snprintf (rep, sizeof (rep), "\001vector:%08X\001%08X\001%08X\001", + rep = va ("\001vector:%08X\001%08X\001%08X\001", *(int *) &e.e.vector_val[0], *(int *) &e.e.vector_val[1], *(int *) &e.e.vector_val[2]); tab = vector_imm_defs; type = &type_vector; break; case ex_quaternion: - snprintf (rep, sizeof (rep), - "\001quaternion:%08X\001%08X\001%08X\001%08X\001", + rep = va ("\001quaternion:%08X\001%08X\001%08X\001%08X\001", *(int *) &e.e.quaternion_val[0], *(int *) &e.e.quaternion_val[1], *(int *) &e.e.quaternion_val[2], @@ -201,7 +196,7 @@ PR_ReuseConstant (expr_t *expr, def_t *def) default: abort (); } - cn = (def_t *) Hash_Find (tab, r); + cn = (def_t *) Hash_Find (tab, rep); if (cn) { if (def) { PR_FreeLocation (def); @@ -240,7 +235,7 @@ PR_ReuseConstant (expr_t *expr, def_t *def) cn->initialized = cn->constant = 1; // copy the immediate to the global area if (e.type == ex_string) - e.e.integer_val = CopyString (r); + e.e.integer_val = CopyString (rep); memcpy (pr_globals + cn->ofs, &e.e, 4 * pr_type_size[type->type]); diff --git a/tools/qfcc/source/qfcc.c b/tools/qfcc/source/qfcc.c index 88594059e..8448a7d16 100644 --- a/tools/qfcc/source/qfcc.c +++ b/tools/qfcc/source/qfcc.c @@ -67,6 +67,7 @@ static const char rcsid[] = #include #include #include +#include #include "cmdlib.h" #include "qfcc.h" @@ -167,13 +168,12 @@ WriteFiles (void) { FILE *f; int i; - char filename[1024]; + dstring_t *filename = dstring_newstr (); - snprintf (filename, sizeof (filename), "%s%cfiles.dat", sourcedir, - PATH_SEPARATOR); - f = fopen (filename, "w"); + dsprintf (filename, "%s%cfiles.dat", sourcedir, PATH_SEPARATOR); + f = fopen (filename->str, "w"); if (!f) - Error ("Couldn't open %s", filename); + Error ("Couldn't open %s", filename->str); fprintf (f, "%i\n", numsounds); for (i = 0; i < numsounds; i++) @@ -188,6 +188,7 @@ WriteFiles (void) fprintf (f, "%i %s\n", precache_files_block[i], precache_files[i]); fclose (f); + dstring_delete (filename); } /* @@ -964,10 +965,7 @@ DecodeArgs (int argc, char **argv) char *temp = strtok (opts, ","); while (temp) { - char temp2[1024]; - - snprintf (temp2, sizeof (temp2), "%s%s", "-D", temp); - add_cpp_def (strdup (temp2)); + add_cpp_def (strdup (va ("%s%s", "-D", temp))); temp = strtok (NULL, ","); } free (opts); @@ -978,10 +976,7 @@ DecodeArgs (int argc, char **argv) char *temp = strtok (opts, ","); while (temp) { - char temp2[1024]; - - snprintf (temp2, sizeof (temp2), "%s%s", "-I", temp); - add_cpp_def (strdup (temp2)); + add_cpp_def (strdup (va ("%s%s", "-I", temp))); temp = strtok (NULL, ","); } free (opts); @@ -992,10 +987,7 @@ DecodeArgs (int argc, char **argv) char *temp = strtok (opts, ","); while (temp) { - char temp2[1024]; - - snprintf (temp2, sizeof (temp2), "%s%s", "-U", temp); - add_cpp_def (strdup (temp2)); + add_cpp_def (strdup (va ("%s%s", "-U", temp))); temp = strtok (NULL, ","); } free (opts); @@ -1160,7 +1152,7 @@ int main (int argc, char **argv) { char *src; - char filename[1024]; + dstring_t *filename = dstring_newstr (); int crc = 0; double start, stop; @@ -1188,10 +1180,10 @@ main (int argc, char **argv) init_types (); if (*sourcedir) - snprintf (filename, sizeof (filename), "%s/%s", sourcedir, progs_src); + dsprintf (filename, "%s/%s", sourcedir, progs_src); else - snprintf (filename, sizeof (filename), "%s", progs_src); - LoadFile (filename, (void *) &src); + dsprintf (filename, "%s", progs_src); + LoadFile (filename->str, (void *) &src); if (!(src = Parse (src))) Error ("No destination filename. qfcc --help for info.\n"); @@ -1233,16 +1225,16 @@ main (int argc, char **argv) //yydebug = 1; if (*sourcedir) - snprintf (filename, sizeof (filename), "%s%c%s", sourcedir, - PATH_SEPARATOR, qfcc_com_token); + dsprintf (filename, "%s%c%s", sourcedir, PATH_SEPARATOR, + qfcc_com_token); else - snprintf (filename, sizeof (filename), "%s", qfcc_com_token); + dsprintf (filename, "%s", qfcc_com_token); if (options.verbosity >= 2) - printf ("compiling %s\n", filename); + printf ("compiling %s\n", filename->str); - yyin = preprocess_file (filename); + yyin = preprocess_file (filename->str); - s_file = ReuseString (strip_path (filename)); + s_file = ReuseString (strip_path (filename->str)); pr_source_line = 1; clear_frame_macros (); error = yyparse () || pr_error_count;