1 | /*------------------------------------------------------------------------- |
2 | * |
3 | * genericdesc.c |
4 | * rmgr descriptor routines for access/transam/generic_xlog.c |
5 | * |
6 | * |
7 | * Portions Copyright (c) 1996-2019, 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 |
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 | return; |
48 | } |
49 | |
50 | /* |
51 | * Identification of generic xlog record: we don't distinguish any subtypes |
52 | * inside generic xlog records. |
53 | */ |
54 | const char * |
55 | generic_identify(uint8 info) |
56 | { |
57 | return "Generic" ; |
58 | } |
59 | |