X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=con.c;h=2d18d6941992bdcc75d23915b289f3491048a5ba;hb=e25e83b14c87f8b5aad10c308e98fff91656d931;hp=8073a5723d71286568e5d0c164d3e34059af924f;hpb=d1fd7d044ba1470dd6c66b1f265ec3aafb829b07;p=xonotic%2Fgmqcc.git diff --git a/con.c b/con.c index 8073a57..2d18d69 100644 --- a/con.c +++ b/con.c @@ -30,8 +30,8 @@ #include #endif -#define GMQCC_IS_STDOUT(X) ((X) == stdout) -#define GMQCC_IS_STDERR(X) ((X) == stderr) +#define GMQCC_IS_STDOUT(X) ((FILE*)((void*)X) == stdout) +#define GMQCC_IS_STDERR(X) ((FILE*)((void*)X) == stderr) #define GMQCC_IS_DEFINE(X) (GMQCC_IS_STDERR(X) || GMQCC_IS_STDOUT(X)) typedef struct { @@ -271,17 +271,17 @@ void con_reset() { int con_change(const char *out, const char *err) { con_close(); - if (GMQCC_IS_DEFINE((FILE*)out)) { - console.handle_out = (((FILE*)out) == stdout) ? stdout : stderr; + if (GMQCC_IS_DEFINE(out)) { + console.handle_out = GMQCC_IS_STDOUT(out) ? stdout : stderr; con_enablecolor(); } else if (!(console.handle_out = fopen(out, "w"))) return 0; - if (GMQCC_IS_DEFINE((FILE*)err)) { - console.handle_err = (((FILE*)err) == stdout) ? stdout : stderr; + if (GMQCC_IS_DEFINE(err)) { + console.handle_err = GMQCC_IS_STDOUT(err) ? stdout : stderr; con_enablecolor(); } else if (!(console.handle_err = fopen(err, "w"))) return 0; - // no buffering + /* no buffering */ setvbuf(console.handle_out, NULL, _IONBF, 0); setvbuf(console.handle_err, NULL, _IONBF, 0); @@ -328,18 +328,19 @@ void con_vprintmsg(int level, const char *name, size_t line, const char *msgtype CON_CYAN, CON_RED }; - - int err = !!(level == LVL_ERROR); - int color = (err) ? console.color_err : console.color_out; - int (*print)(const char *, ...) = (err) ? &con_err : &con_out; - + + int err = !!(level == LVL_ERROR); + int color = (err) ? console.color_err : console.color_out; + int (*print)(const char *, ...) = (err) ? &con_err : &con_out; + int (*vprint)(const char *, va_list) = (err) ? &con_verr : &con_vout; + if (color) print("\033[0;%dm%s:%d: \033[0;%dm%s: \033[0m", CON_CYAN, name, (int)line, sel[level], msgtype); else print("%s:%d: %s: ", name, (int)line, msgtype); - - con_verr(msg, ap); - fprintf (stderr, "\n"); + + vprint(msg, ap); + print("\n"); } void con_printmsg(int level, const char *name, size_t line, const char *msgtype, const char *msg, ...) {