| 384 | } |
| 385 | |
| 386 | size_t |
| 387 | LogBuffer::_add_buffer_header(const LogConfig *cfg) |
| 388 | { |
| 389 | size_t header_len; |
| 390 | |
| 391 | // |
| 392 | // initialize the header |
| 393 | // |
| 394 | LogFormat *fmt = m_owner->m_format; |
| 395 | m_header = reinterpret_cast<LogBufferHeader *>(m_buffer); |
| 396 | m_header->cookie = LOG_SEGMENT_COOKIE; |
| 397 | m_header->version = LOG_SEGMENT_VERSION; |
| 398 | m_header->format_type = fmt->type(); |
| 399 | m_header->entry_count = 0; |
| 400 | m_header->low_timestamp = LogUtils::timestamp(); |
| 401 | m_header->high_timestamp = 0; |
| 402 | m_header->log_object_signature = m_owner->get_signature(); |
| 403 | m_header->log_object_flags = m_owner->get_flags(); |
| 404 | #if defined(LOG_BUFFER_TRACKING) |
| 405 | m_header->id = lrand48(); |
| 406 | #endif // defined(LOG_BUFFER_TRACKING) |
| 407 | |
| 408 | // |
| 409 | // The remaining header fields actually point into the data section of |
| 410 | // the buffer. Write the data into the buffer and update the total |
| 411 | // size of the buffer header. |
| 412 | // |
| 413 | |
| 414 | header_len = sizeof(LogBufferHeader); // at least ... |
| 415 | |
| 416 | m_header->fmt_name_offset = 0; |
| 417 | m_header->fmt_fieldlist_offset = 0; |
| 418 | m_header->fmt_printf_offset = 0; |
| 419 | m_header->src_hostname_offset = 0; |
| 420 | m_header->log_filename_offset = 0; |
| 421 | |
| 422 | if (fmt->name()) { |
| 423 | m_header->fmt_name_offset = header_len; |
| 424 | header_len += add_header_str(fmt->name(), &m_buffer[header_len], m_size - header_len); |
| 425 | } |
| 426 | if (fmt->fieldlist()) { |
| 427 | m_header->fmt_fieldlist_offset = header_len; |
| 428 | header_len += add_header_str(fmt->fieldlist(), &m_buffer[header_len], m_size - header_len); |
| 429 | } |
| 430 | if (fmt->printf_str()) { |
| 431 | m_header->fmt_printf_offset = header_len; |
| 432 | header_len += add_header_str(fmt->printf_str(), &m_buffer[header_len], m_size - header_len); |
| 433 | } |
| 434 | if (cfg->hostname) { |
| 435 | m_header->src_hostname_offset = header_len; |
| 436 | header_len += add_header_str(cfg->hostname, &m_buffer[header_len], m_size - header_len); |
| 437 | } |
| 438 | if (m_owner->get_base_filename()) { |
| 439 | m_header->log_filename_offset = header_len; |
| 440 | header_len += add_header_str(m_owner->get_base_filename(), &m_buffer[header_len], m_size - header_len); |
| 441 | } |
| 442 | // update the rest of the header fields; make sure the header_len is |
| 443 | // correctly aligned, so that the first record will start on a legal |
nothing calls this directly
no test coverage detected