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
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 	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 *
generic_identify(uint8 info)55 generic_identify(uint8 info)
56 {
57 	return "Generic";
58 }
59