1 /*-------------------------------------------------------------------------
2 *
3 * genericdesc.c
4 * rmgr descriptor routines for access/transam/generic_xlog.c
5 *
6 *
7 * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
9 *
10 * src/backend/access/rmgrdesc/genericdesc.c
11 *
12 *-------------------------------------------------------------------------
13 */
14 #include "postgres.h"
15
16 #include "access/generic_xlog.h"
17 #include "lib/stringinfo.h"
18 #include "storage/relfilenode.h"
19
20 /*
21 * Description of generic xlog record: write page regions that this record
22 * overrides.
23 */
24 void
generic_desc(StringInfo buf,XLogReaderState * record)25 generic_desc(StringInfo buf, XLogReaderState *record)
26 {
27 Pointer ptr = XLogRecGetData(record),
28 end = ptr + XLogRecGetDataLen(record);
29
30 while (ptr < end)
31 {
32 OffsetNumber offset,
33 length;
34
35 memcpy(&offset, ptr, sizeof(offset));
36 ptr += sizeof(offset);
37 memcpy(&length, ptr, sizeof(length));
38 ptr += sizeof(length);
39 ptr += length;
40
41 if (ptr < end)
42 appendStringInfo(buf, "offset %u, length %u; ", offset, length);
43 else
44 appendStringInfo(buf, "offset %u, length %u", offset, length);
45 }
46 }
47
48 /*
49 * Identification of generic xlog record: we don't distinguish any subtypes
50 * inside generic xlog records.
51 */
52 const char *
generic_identify(uint8 info)53 generic_identify(uint8 info)
54 {
55 return "Generic";
56 }
57