questionable code in heap_formtuple()

Tatsuo Ishii <t-ishii@sra.co.jp>

From: Tatsuo Ishii <t-ishii@sra.co.jp>
To: hackers@postgreSQL.org
Date: 1998-09-03T06:52:19Z
Lists: pgsql-hackers
around line 812 in access/common/heaptuple.c:

	len = sizeof *tuple - sizeof tuple->t_bits;

This seems questionable for me. 

tuple is a pointer to struct HeaptupleData.

typedef struct HeapTupleData
{
	unsigned int t_len;			/* length of entire tuple */

	[snip]

	uint8		t_hoff;			/* sizeof tuple header */

	bits8		t_bits[MinHeapTupleBitmapSize / 8];
	/* bit map of domains */

	/* MORE DATA FOLLOWS AT END OF STRUCT */
} HeapTupleData;

I think the code tries to calculate the offset from top of the
structure to t_bits. t_bits is the last structure member of
HeapTupleData, and that would give the offset...

No. since the size of the whole structure is aligned to 2-byte, there
is a "padding" byte after t_bits.

I think more acculate way to calculate the offset is:

	len = (char *)&tuple->t_bits[0] - (char *)tuple;

I ran a test and found the first one gives len = 36, while second one
gives 35.

I'm not sure how this affects. maybe nothing (len is aligned to 8-byte
boundary later).
--
Tatsuo Ishii
t-ishii@sra.co.jp