Пример #1
0
kmp_msg_t
__kmp_msg_format(
    unsigned id_arg,
    ...
) {

    kmp_msg_t      msg;
    va_list        args;
    kmp_str_buf_t  buffer;
    __kmp_str_buf_init( & buffer );

    va_start( args, id_arg );

    // We use unsigned for the ID argument and explicitly cast it here to the
    // right enumerator because variadic functions are not compatible with
    // default promotions.
    kmp_i18n_id_t id = (kmp_i18n_id_t)id_arg;

    #if KMP_OS_UNIX
        // On Linux* OS and OS X*, printf() family functions process parameter numbers, for example:
        // "%2$s %1$s".
        __kmp_str_buf_vprint( & buffer, __kmp_i18n_catgets( id ), args );
    #elif KMP_OS_WINDOWS
        // On Winodws, printf() family functions does not recognize GNU style parameter numbers,
        // so we have to use FormatMessage() instead. It recognizes parameter numbers, e. g.:
        // "%2!s! "%1!s!".
        {
            LPTSTR str = NULL;
            int    len;
            FormatMessage(
                FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ALLOCATE_BUFFER,
                __kmp_i18n_catgets( id ),
                0, 0,
                (LPTSTR)( & str ),
                0,
                & args
            );
            len = ___strip_crs( str );
            __kmp_str_buf_cat( & buffer, str, len );
            LocalFree( str );
        }
    #else
        #error
    #endif
    va_end( args );
    __kmp_str_buf_detach( & buffer );

    msg.type = (kmp_msg_type_t)( id >> 16 );
    msg.num  = id & 0xFFFF;
    msg.str  = buffer.str;
    msg.len  = buffer.used;

    return msg;

} // __kmp_msg_format
Пример #2
0
void
__kmp_str_buf_print(
    kmp_str_buf_t *  buffer,
    char const *     format,
    ...
) {

    va_list args;
    va_start( args, format );
    __kmp_str_buf_vprint( buffer, format, args );
    va_end( args );

} // __kmp_str_buf_print