Navigation


Changeset 1085:7d7266115a34 in freeDiameter for libfdproto/log.c


Ignore:
Timestamp:
May 3, 2013, 8:20:56 PM (11 years ago)
Author:
Sebastien Decugis <sdecugis@freediameter.net>
Branch:
default
Phase:
public
Message:

Cleaning of the traces in progress

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libfdproto/log.c

    r1027 r1085  
    143143}
    144144
    145 /* Log debug message to file. */
    146 void fd_log_debug_fstr( FILE * fstr, const char * format, ... )
    147 {
    148         va_list ap;
    149        
    150         va_start(ap, format);
    151         vfprintf(fstr, format, ap);
    152         va_end(ap);
     145/* Log a debug message */
     146void fd_log_va ( int loglevel, const char * format, va_list args )
     147{
     148        (void)pthread_mutex_lock(&fd_log_lock);
     149       
     150        pthread_cleanup_push(fd_cleanup_mutex_silent, &fd_log_lock);
     151        fd_logger(loglevel, format, args);
     152        pthread_cleanup_pop(0);
     153       
     154        (void)pthread_mutex_unlock(&fd_log_lock);
    153155}
    154156
     
    208210        return buf;
    209211}
     212
     213
     214/* Helper function for fd_*_dump. Prints the format string from 'offset' into '*buf', extends if needed. The location of buf can be updated by this function. */
     215char * fd_dump_extend(char ** buf, size_t *len, size_t *offset, const char * format, ... )
     216{
     217        va_list ap;
     218        int to_write;
     219        size_t o = 0;
     220        static size_t mempagesz = 0;
     221       
     222        if (!mempagesz) {
     223                mempagesz = sysconf(_SC_PAGESIZE); /* We alloc buffer by memory pages for efficiency */
     224                if (mempagesz <= 0)
     225                        mempagesz = 1024; /* default size if above call failed */
     226        }
     227       
     228        /* we do not TRACE_ENTRY this one on purpose */
     229       
     230        CHECK_PARAMS_DO(buf && len, return NULL);
     231       
     232        if (*buf == NULL) {
     233                CHECK_MALLOC_DO(*buf = malloc(mempagesz), return NULL);
     234                *len = mempagesz;
     235        }
     236       
     237        if (offset)
     238                o = *offset;
     239       
     240        va_start(ap, format);
     241        to_write = vsnprintf(*buf + o, *len - o, format, ap);
     242        va_end(ap);
     243       
     244        if (to_write + o >= *len) {
     245                /* There was no room in the buffer, we extend and redo */
     246                size_t new_len = (((to_write + o) / mempagesz) + 1) * mempagesz;
     247                CHECK_MALLOC_DO(*buf = realloc(*buf, new_len), return NULL);
     248                *len = new_len;
     249               
     250                va_start(ap, format);
     251                to_write = vsnprintf(*buf + o, *len - o, format, ap);
     252                va_end(ap);
     253        }
     254       
     255        if (offset)
     256                *offset += to_write;
     257       
     258        return *buf;
     259}
Note: See TracChangeset for help on using the changeset viewer.