Changeset 1085:7d7266115a34 in freeDiameter for libfdproto/log.c
- Timestamp:
- May 3, 2013, 8:20:56 PM (11 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libfdproto/log.c
r1027 r1085 143 143 } 144 144 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 */ 146 void 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); 153 155 } 154 156 … … 208 210 return buf; 209 211 } 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. */ 215 char * 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.