From: Wolfgang (Blub) Bumiller Date: Wed, 21 Nov 2012 20:49:21 +0000 (+0100) Subject: Escape strings in ir-dump output X-Git-Tag: 0.1.9~358^2~2 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=42135f1322fe061d7f86f935cea8b24df57fb57d;p=xonotic%2Fgmqcc.git Escape strings in ir-dump output --- diff --git a/ir.c b/ir.c index 91e8d7f..c1e116a 100644 --- a/ir.c +++ b/ir.c @@ -3330,6 +3330,26 @@ void ir_instr_dump(ir_instr *in, char *ind, ind[strlen(ind)-1] = 0; } +void ir_value_dump_string(const char *str, int (*oprintf)(const char*, ...)) +{ + oprintf("\""); + for (; *str; ++str) { + switch (*str) { + case '\n': oprintf("\\n"); break; + case '\r': oprintf("\\r"); break; + case '\t': oprintf("\\t"); break; + case '\v': oprintf("\\v"); break; + case '\f': oprintf("\\f"); break; + case '\b': oprintf("\\b"); break; + case '\a': oprintf("\\a"); break; + case '\\': oprintf("\\\\"); break; + case '"': oprintf("\\\""); break; + default: oprintf("%c", *str); break; + } + } + oprintf("\""); +} + void ir_value_dump(ir_value* v, int (*oprintf)(const char*, ...)) { if (v->isconst) { @@ -3354,7 +3374,7 @@ void ir_value_dump(ir_value* v, int (*oprintf)(const char*, ...)) oprintf("(entity)"); break; case TYPE_STRING: - oprintf("\"%s\"", v->constval.vstring); + ir_value_dump_string(v->constval.vstring, oprintf); break; #if 0 case TYPE_INTEGER: