Ignore:
Timestamp:
Nov 9, 2009 4:09:13 AM (14 years ago)
Author:
bennylp
Message:

Updated ticket #981: pj_perror() and PJ_PERROR() API:

  • added PJ_PERROR() macro to allow compile time omitting
  • changed pj_perror() API to allow formatting of the title using printf like format
  • added a simple test in pjlib-test
  • updated Doxygen documentation
File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib/src/pj/errno.c

    r2965 r2992  
    200200 
    201201#if PJ_LOG_MAX_LEVEL >= 1 
    202 static void call_logger(const char *sender, int level, const char *format, ...) 
     202static void invoke_log(const char *sender, int level, const char *format, ...) 
    203203{ 
    204204    va_list arg; 
     
    208208} 
    209209 
    210 /* 
    211  * perror() 
    212  */ 
    213 PJ_DEF(void) pj_perror(int log_level, const char *sender,  
    214                        pj_status_t status, const char *title, 
    215                        int options) 
    216 { 
     210static void pj_perror_imp(int log_level, const char *sender,  
     211                          pj_status_t status, 
     212                          const char *title_fmt, va_list marker) 
     213{ 
     214    char titlebuf[PJ_PERROR_TITLE_BUF_SIZE]; 
    217215    char errmsg[PJ_ERR_MSG_SIZE]; 
    218  
    219     PJ_ASSERT_ON_FAIL(options==0, return); 
    220     PJ_UNUSED_ARG(options); 
    221  
     216    int len; 
     217 
     218    /* Build the title */ 
     219    len = pj_ansi_vsnprintf(titlebuf, sizeof(titlebuf), title_fmt, marker); 
     220    if (len < 0 || len >= sizeof(titlebuf)) 
     221        pj_ansi_strcpy(titlebuf, "Error"); 
     222 
     223    /* Get the error */ 
    222224    pj_strerror(status, errmsg, sizeof(errmsg)); 
    223     call_logger(sender, log_level, "%s: %s", title, errmsg); 
     225 
     226    /* Send to log */ 
     227    invoke_log(sender, log_level, "%s: %s", titlebuf, errmsg); 
     228} 
     229 
     230PJ_DEF(void) pj_perror(int log_level, const char *sender, pj_status_t status, 
     231                       const char *title_fmt, ...) 
     232{ 
     233    va_list marker; 
     234    va_start(marker, title_fmt); 
     235    pj_perror_imp(log_level, sender, status, title_fmt, marker); 
     236    va_end(marker); 
     237} 
     238 
     239PJ_DEF(void) pj_perror_1(const char *sender, pj_status_t status, 
     240                         const char *title_fmt, ...) 
     241{ 
     242    va_list marker; 
     243    va_start(marker, title_fmt); 
     244    pj_perror_imp(1, sender, status, title_fmt, marker); 
     245    va_end(marker); 
     246} 
     247 
     248#else /* #if PJ_LOG_MAX_LEVEL >= 1 */ 
     249PJ_DEF(void) pj_perror(int log_level, const char *sender, pj_status_t status, 
     250                       const char *title_fmt, ...) 
     251{ 
    224252} 
    225253#endif  /* #if PJ_LOG_MAX_LEVEL >= 1 */ 
    226254 
    227255 
     256#if PJ_LOG_MAX_LEVEL >= 2 
     257PJ_DEF(void) pj_perror_2(const char *sender, pj_status_t status, 
     258                         const char *title_fmt, ...) 
     259{ 
     260    va_list marker; 
     261    va_start(marker, title_fmt); 
     262    pj_perror_imp(2, sender, status, title_fmt, marker); 
     263    va_end(marker); 
     264} 
     265#endif 
     266 
     267#if PJ_LOG_MAX_LEVEL >= 3 
     268PJ_DEF(void) pj_perror_3(const char *sender, pj_status_t status, 
     269                         const char *title_fmt, ...) 
     270{ 
     271    va_list marker; 
     272    va_start(marker, title_fmt); 
     273    pj_perror_imp(3, sender, status, title_fmt, marker); 
     274    va_end(marker); 
     275} 
     276#endif 
     277 
     278#if PJ_LOG_MAX_LEVEL >= 4 
     279PJ_DEF(void) pj_perror_4(const char *sender, pj_status_t status, 
     280                         const char *title_fmt, ...) 
     281{ 
     282    va_list marker; 
     283    va_start(marker, title_fmt); 
     284    pj_perror_imp(4, sender, status, title_fmt, marker); 
     285    va_end(marker); 
     286} 
     287#endif 
     288 
     289#if PJ_LOG_MAX_LEVEL >= 5 
     290PJ_DEF(void) pj_perror_5(const char *sender, pj_status_t status, 
     291                         const char *title_fmt, ...) 
     292{ 
     293    va_list marker; 
     294    va_start(marker, title_fmt); 
     295    pj_perror_imp(5, sender, status, title_fmt, marker); 
     296    va_end(marker); 
     297} 
     298#endif 
     299 
     300#if PJ_LOG_MAX_LEVEL >= 6 
     301PJ_DEF(void) pj_perror_6(const char *sender, pj_status_t status, 
     302                         const char *title_fmt, ...) 
     303{ 
     304    va_list marker; 
     305    va_start(marker, title_fmt); 
     306    pj_perror_imp(6, sender, status, title_fmt, marker); 
     307    va_end(marker); 
     308} 
     309#endif 
     310 
Note: See TracChangeset for help on using the changeset viewer.