Example #1
0
void
logfile_put_flush(LogFile *log, char *file, int line)
{
    char *buf = pthread_getspecific(log->put_buf);
    
    if (buf == NULL) {
        return;
    }

    logfile_write(log, log->loglevel, file, line, "%s", buf);
    buf[0] = 0; 

}
int fsaprintf(int level, bool showerrno, bool showloc, const char *file, const char *fct, int line, char *format, ...)
{
    char buffer[8192];
    char temp[1024];
    bool msgscreen;
    bool msglogfile;
    va_list ap;
    
    // init
    memset(buffer, 0, sizeof(buffer));
    msgscreen=(level <= g_options.verboselevel);
    msglogfile=(level <= g_options.debuglevel);
    
    if (msgscreen || msglogfile)
    {
        // 1. format errno and its meaning
        if (showerrno)
            strlcatf(buffer, sizeof(buffer), "[errno=%d, %s]: ", errno, strerror(errno));
        
        // 2. format location of the message
        if (showloc)
            strlcatf(buffer, sizeof(buffer), "%s#%d,%s(): ", file, line, fct);
        
        // 3. format text message
        va_start(ap, format);
        vsnprintf(temp, sizeof(temp), format, ap);
        va_end(ap);
        strlcatf(buffer, sizeof(buffer), "%s", temp);
        
        // 4. show message on screen
        if (msgscreen)
        {   fprintf(stderr, "%s", buffer);
            fflush(stderr);
        }
        
        // 5. write message in logfile if requested
        if (msglogfile)
            logfile_write(buffer, strlen(buffer));
    }
    
    return 0;
}
Example #3
0
/*
=============
Com_Printf

Both client and server can use this, and it will output
to the apropriate place.
=============
*/
void Com_LPrintf(print_type_t type, const char *fmt, ...)
{
    va_list     argptr;
    char        msg[MAXPRINTMSG];
    size_t      len;

    // may be entered recursively only once
    if (com_printEntered >= 2) {
        return;
    }

    com_printEntered++;

    va_start(argptr, fmt);
    len = Q_vscnprintf(msg, sizeof(msg), fmt, argptr);
    va_end(argptr);

    if (type == PRINT_ERROR && !com_errorEntered && len) {
        size_t errlen = len;

        if (errlen >= sizeof(com_errorMsg)) {
            errlen = sizeof(com_errorMsg) - 1;
        }

        // save error msg
        memcpy(com_errorMsg, msg, errlen);
        com_errorMsg[errlen] = 0;

        // strip trailing '\n'
        if (com_errorMsg[errlen - 1] == '\n') {
            com_errorMsg[errlen - 1] = 0;
        }
    }

    if (rd_target) {
        Com_Redirect(msg, len);
    } else {
        switch (type) {
        case PRINT_TALK:
            Com_SetColor(COLOR_ALT);
            break;
        case PRINT_DEVELOPER:
            Com_SetColor(COLOR_BLUE);
            break;
        case PRINT_WARNING:
            Com_SetColor(COLOR_YELLOW);
            break;
        case PRINT_ERROR:
            Com_SetColor(COLOR_RED);
            break;
        case PRINT_NOTICE:
            Com_SetColor(COLOR_CYAN);
            break;
        default:
            break;
        }

        // graphical console
        Con_Print(msg);

        // debugging console
        Sys_ConsoleOutput(msg);

        // remote console
        //SV_ConsoleOutput(msg);

        // logfile
        if (com_logFile) {
            logfile_write(type, msg);
        }

        if (type) {
            Com_SetColor(COLOR_NONE);
        }
    }

    com_printEntered--;
}