示例#1
0
String string_vprintf(const char* format, va_list ap)
{
    char *rtn = str_vprintf(format, ap);
    String return_String(rtn);
    free(rtn);
    return(return_String);
}
示例#2
0
文件: str.c 项目: LuaDist/gsl-shell
void
str_printf_add (str_t d, const char *fmt, ...)
{
  va_list ap;
  va_start (ap, fmt);
  str_vprintf (d, fmt, 1, ap);
  va_end (ap);
}
示例#3
0
inline std::string str_vprintf(const char* format, va_list args)
{
    std::string s;
    int n = str_vprintf(s, format, args);
    if (n < 0) {
        throw std::invalid_argument("str_vprintf incorrect format");
    }
    return s;
}
示例#4
0
文件: str.c 项目: mkschreder/stunnel
char *str_printf(const char *format, ...) {
    char *txt;
    va_list arglist;

    va_start(arglist, format);
    txt=str_vprintf(format, arglist);
    va_end(arglist);
    return txt;
}
示例#5
0
文件: string.c 项目: vegard/jato
int str_printf(struct string *str, const char *fmt, ...)
{
	int err;
	va_list args;

	va_start(args, fmt);
	err = str_vprintf(str, 0, fmt, args);
	va_end(args);
	return err;
}
示例#6
0
// formatter that appends formatted output to existing string
void string_append_printf(String& str, const char* format, ...)
{
    va_list ap;
    va_start(ap, format);
    char* rtn;
    rtn = str_vprintf(format, ap);
    va_end(ap);
    str.append(rtn);
    //String rtn_string(rtn);
    free(rtn);
}
示例#7
0
文件: str.c 项目: jeffpc/libjeffpc
struct str *str_printf(const char *fmt, ...)
{
	struct str *ret;
	va_list args;

	va_start(args, fmt);
	ret = str_vprintf(fmt, args);
	va_end(args);

	return ret;
}
示例#8
0
inline std::string str_printf(const char* format, ...)
{
    va_list args;
    va_start(args, format);
    try {
        std::string s(str_vprintf(format, args));
        va_end(args);
        return s;
    } catch (...) {
        va_end(args);
        throw;
    }
}
示例#9
0
inline int str_printf(StringType& s, const char* format, ...)
{
    va_list args;
    va_start(args, format);
    int n;
    try {
        n = str_vprintf(s, format, args);
        va_end(args);
    } catch (...) {
        va_end(args);
        throw;
    }
    return n;
}
示例#10
0
文件: network.c 项目: Jimdo/stunnel
void fd_printf(CLI *c, int fd, const char *format, ...) {
    va_list ap;
    char *line;

    va_start(ap, format);
    line=str_vprintf(format, ap);
    va_end(ap);
    if(!line) {
        s_log(LOG_ERR, "fd_printf: str_vprintf failed");
        longjmp(c->err, 1);
    }
    fd_putline(c, fd, line);
    str_free(line);
}
示例#11
0
CIMPLE_NAMESPACE_BEGIN

// formatting function that returns a CIMPLE string.
String string_printf(const char* format, ...)
{
    va_list ap;
    va_start(ap, format);
    char* rtn;
    rtn = str_vprintf(format, ap);
    va_end(ap);
    String rtn_string(rtn);
    free(rtn);
    return(rtn_string);
}
示例#12
0
void NotifyBoard::AddLog(std::array<std::string, 4> stLogType, const char *szLogFormat, ...)
{
    std::string szLog;
    bool bError = false;
    {
        va_list ap;
        va_start(ap, szLogFormat);

        try{
            szLog = str_vprintf(szLogFormat, ap);
        }catch(const std::exception &e){
            bError = true;
            szLog = str_printf("Exception caught in NotifyBoard::AddLog(\"%s\", ...): %s", szLogFormat, e.what());
        }

        va_end(ap);
    }

    int nLogType = bError ? Log::LOGTYPEV_WARNING : std::atoi(stLogType[0].c_str());
    switch(nLogType){
        case Log::LOGTYPEV_INFO:
            {
                AddXML(str_printf("<ROOT><OBJECT TYPE=\"PLAINTEXT\" COLOR=\"WHITE\">%s</OBJECT></ROOT>", szLog.c_str()).c_str(), {});
                return;
            }
        case Log::LOGTYPEV_WARNING:
            {
                AddXML(str_printf("<ROOT><OBJECT TYPE=\"PLAINTEXT\" COLOR=\"BROWN\">%s</OBJECT></ROOT>", szLog.c_str()).c_str(), {});
                return;
            }
        case Log::LOGTYPEV_FATAL:
            {
                AddXML(str_printf("<ROOT><OBJECT TYPE=\"PLAINTEXT\" COLOR=\"RED\">%s</OBJECT></ROOT>", szLog.c_str()).c_str(), {});
                return;
            }
        case Log::LOGTYPEV_DEBUG:
            {
                AddXML(str_printf("<ROOT><OBJECT TYPE=\"PLAINTEXT\" COLOR=\"GREEN\">%s</OBJECT></ROOT>", szLog.c_str()).c_str(), {});
                return;
            }
        default:
            {
                g_Log->AddLog(LOGTYPE_WARNING, "Invalid LogType %d: %s", nLogType, szLog.c_str());
                AddXML(str_printf("<ROOT><OBJECT TYPE=\"PLAINTEXT\" COLOR=\"RED\">Invalid LogType %d: %s</OBJECT></ROOT>", nLogType, szLog.c_str()).c_str(), {});
                return;
            }
    }
}
示例#13
0
NO_INLINE void G_GNUC_COLD
assertion_warning_log(const assertion_data * const data,
	const char * const fmt, ...)
{
	static str_t *str;
	va_list args;

	assertion_message(data, FALSE);

	if G_UNLIKELY(NULL == str)
		str = str_new_not_leaking(512);

	/*
	 * Log additional message.
	 */

	va_start(args, fmt);
	str_vprintf(str, fmt, args);
	va_end(args);

	{
		char time_buf[18];
		char prefix[UINT_DEC_BUFLEN + CONST_STRLEN(" (WARNING-): ")];
		unsigned stid = thread_small_id();
		DECLARE_STR(4);

		crash_time(time_buf, sizeof time_buf);

		print_str(time_buf);
		if (0 == stid) {
			print_str(" (WARNING): ");
		} else {
			str_bprintf(prefix, sizeof prefix, " (WARNING-%u): ", stid);
			print_str(prefix);
		}
		print_str(str_2c(str));
		print_str("\n");
		flush_err_str();
		if (log_stdout_is_distinct())
			flush_str(STDOUT_FILENO);
	}

	assertion_stacktrace();
}
    void str_formalize( std::basic_string< CharType > & formattedString, int maxSize, const CharType * format, va_list vaList )
    {
        std::vector< CharType > strText( maxSize + 1, 0 );

        try
        {

            if ( format )
            {
                size_t written = str_vprintf( strText.data(), maxSize + 1, format, vaList );
                formattedString.assign( strText.data(), strText.data() + std::min( written, size_t( maxSize ) ) );
            }
        }
        catch ( ... )
        {
            StringStream message;
            message << ERROR_DB_FORMALIZE << formattedString.c_str();
            DB_EXCEPT( EDatabaseExceptionCodes_DateTimeError, message.str() );
        }
    }
示例#15
0
void
notify_error_msg (enum err_contest idxc, const char * msg, ...)
{
    struct msg_cell *cell = emalloc (sizeof(struct msg_cell));
    str_t tail;
    va_list ap;

    str_init_from_c (cell->msg, contest_id[idxc]);

    va_start (ap, msg);
    str_init (tail, 64);
    str_vprintf (tail, msg, 0, ap);
    str_append (cell->msg, tail, ' ');
    str_free (tail);
    va_end (ap);

    cell->line = NULL;
    cell->next = top;
    top = cell;
}
示例#16
0
void
notify_script_err_msg (enum err_contest idxc, int fline, int lline,
                       const char * msg, ...)
{
    struct msg_cell *cell = emalloc (sizeof(struct msg_cell));
    str_t tail;
    va_list ap;

    str_init_from_c (cell->msg, contest_id[idxc]);

    va_start (ap, msg);
    str_init (tail, 64);
    str_vprintf (tail, msg, 0, ap);
    str_append (cell->msg, tail, ' ');
    str_free (tail);
    va_end (ap);

    cell->line = emalloc(sizeof(struct line_info));
    cell->line->first = fline;
    cell->line->last  = lline;
    cell->next = top;
    top = cell;
}
示例#17
0
/**
 * Log message.
 */
void
gl_logv(const char *domain, GLogLevelFlags flags, const char *fmt, va_list args)
{
	static str_t *msg[THREAD_MAX];
	static bool logging[THREAD_MAX];
	unsigned stid = thread_small_id();

	G_IGNORE_PUSH(-Wformat-nonliteral);		/* s_minilogv() call below */

	if (logging[stid]) {
		s_minilogv(flags | G_LOG_FLAG_RECURSION, FALSE, fmt, args);
		return;
	}

	G_IGNORE_POP;

	/*
	 * This call is thread-unsafe by construction, and supposed to be called
	 * only from the main thread.  This is why it's OK to have a global
	 * ``logging'' variable.
	 */

	logging[stid] = TRUE;

	if G_UNLIKELY(NULL == msg[stid])
		msg[stid] = str_new_not_leaking(0);

	str_vprintf(msg[stid], fmt, args);

	if (handler_cb != NULL)
		(*handler_cb)(domain, flags, str_2c(msg[stid]), handler_data);
	else
		s_minilog(flags, "%s", str_2c(msg[stid]));

	logging[stid] = FALSE;
}
示例#18
0
文件: string.c 项目: vegard/jato
int str_vappend(struct string *str, const char *fmt, va_list args)
{
	return str_vprintf(str, str->length, fmt, args);
}
示例#19
0
文件: log.c 项目: mtrojnar/stunnel
void s_log(int level, const char *format, ...) {
    va_list ap;
    char *text, *stamp, *id;
    struct LIST *tmp;
#ifdef USE_WIN32
    DWORD libc_error;
#else
    int libc_error;
#endif
    int socket_error;
    time_t gmt;
    struct tm *timeptr;
#if defined(HAVE_LOCALTIME_R) && defined(_REENTRANT)
    struct tm timestruct;
#endif
    TLS_DATA *tls_data;

    tls_data=tls_get();
    if(!tls_data) {
        tls_data=tls_alloc(NULL, NULL, "log");
        s_log(LOG_ERR, "INTERNAL ERROR: Uninitialized TLS at %s, line %d",
            __FILE__, __LINE__);
    }

    /* performance optimization: skip the trivial case early */
    if(log_mode==LOG_MODE_CONFIGURED && level>tls_data->opt->log_level)
        return;

    libc_error=get_last_error();
    socket_error=get_last_socket_error();

    /* format the id to be logged */
    time(&gmt);
#if defined(HAVE_LOCALTIME_R) && defined(_REENTRANT)
    timeptr=localtime_r(&gmt, &timestruct);
#else
    timeptr=localtime(&gmt);
#endif
    stamp=str_printf("%04d.%02d.%02d %02d:%02d:%02d",
        timeptr->tm_year+1900, timeptr->tm_mon+1, timeptr->tm_mday,
        timeptr->tm_hour, timeptr->tm_min, timeptr->tm_sec);
    id=str_printf("LOG%d[%s]", level, tls_data->id);

    /* format the text to be logged */
    va_start(ap, format);
    text=str_vprintf(format, ap);
    va_end(ap);
    safestring(text);

    CRYPTO_THREAD_read_lock(stunnel_locks[LOCK_LOG_MODE]);
    if(log_mode==LOG_MODE_BUFFER) { /* save the text to log it later */
        CRYPTO_THREAD_write_lock(stunnel_locks[LOCK_LOG_BUFFER]);
        tmp=str_alloc_detached(sizeof(struct LIST));
        tmp->next=NULL;
        tmp->opt=tls_data->opt;
        tmp->level=level;
        tmp->stamp=stamp;
        str_detach(tmp->stamp);
        tmp->id=id;
        str_detach(tmp->id);
        tmp->text=text;
        str_detach(tmp->text);
        if(tail)
            tail->next=tmp;
        else
            head=tmp;
        tail=tmp;
        CRYPTO_THREAD_write_unlock(stunnel_locks[LOCK_LOG_BUFFER]);
    } else { /* ready log the text directly */
        log_raw(tls_data->opt, level, stamp, id, text);
        str_free(stamp);
        str_free(id);
        str_free(text);
    }
    CRYPTO_THREAD_read_unlock(stunnel_locks[LOCK_LOG_MODE]);

    set_last_error(libc_error);
    set_last_socket_error(socket_error);
}