MCPcopy Create free account
hub / github.com/F-Stack/f-stack / textdump_dump_msgbuf

Function textdump_dump_msgbuf

freebsd/ddb/db_textdump.c:332–385  ·  view source on GitHub ↗

* Dump kernel message buffer. */

Source from the content-addressed store, hash-verified

330 * Dump kernel message buffer.
331 */
332static void
333textdump_dump_msgbuf(struct dumperinfo *di)
334{
335 off_t end_offset, tarhdr_offset;
336 u_int i, len, offset, seq, total_len;
337 char buf[16];
338
339 /*
340 * Write out a dummy tar header to advance the offset; we'll rewrite
341 * it later once we know the true size.
342 */
343 textdump_saveoff(&tarhdr_offset);
344 textdump_mkustar(textdump_block_buffer, TAR_MSGBUF_FILENAME, 0);
345 (void)textdump_writenextblock(di, textdump_block_buffer);
346
347 /*
348 * Copy out the data in small chunks, but don't copy nuls that may be
349 * present if the message buffer has not yet completely filled at
350 * least once.
351 */
352 total_len = 0;
353 offset = 0;
354 msgbuf_peekbytes(msgbufp, NULL, 0, &seq);
355 while ((len = msgbuf_peekbytes(msgbufp, buf, sizeof(buf), &seq)) > 0) {
356 for (i = 0; i < len; i++) {
357 if (buf[i] == '\0')
358 continue;
359 textdump_block_buffer[offset] = buf[i];
360 offset++;
361 if (offset != sizeof(textdump_block_buffer))
362 continue;
363 (void)textdump_writenextblock(di,
364 textdump_block_buffer);
365 total_len += offset;
366 offset = 0;
367 }
368 }
369 total_len += offset; /* Without the zero-padding. */
370 if (offset != 0) {
371 bzero(textdump_block_buffer + offset,
372 sizeof(textdump_block_buffer) - offset);
373 (void)textdump_writenextblock(di, textdump_block_buffer);
374 }
375
376 /*
377 * Rewrite tar header to reflect how much was actually written.
378 */
379 textdump_saveoff(&end_offset);
380 textdump_restoreoff(tarhdr_offset);
381 textdump_mkustar(textdump_block_buffer, TAR_MSGBUF_FILENAME,
382 total_len);
383 (void)textdump_writenextblock(di, textdump_block_buffer);
384 textdump_restoreoff(end_offset);
385}
386
387static void
388textdump_dump_panic(struct dumperinfo *di)

Callers 1

textdump_dumpsysFunction · 0.85

Calls 6

textdump_saveoffFunction · 0.85
textdump_mkustarFunction · 0.85
textdump_writenextblockFunction · 0.85
msgbuf_peekbytesFunction · 0.85
bzeroFunction · 0.85
textdump_restoreoffFunction · 0.85

Tested by

no test coverage detected