questionable code in heap_formtuple()
От | Tatsuo Ishii |
---|---|
Тема | questionable code in heap_formtuple() |
Дата | |
Msg-id | 199809030652.PAA01058@srapc451.sra.co.jp обсуждение исходный текст |
Ответ на | Re: [HACKERS] index fix report (Bruce Momjian <maillist@candle.pha.pa.us>) |
Ответы |
Re: [HACKERS] questionable code in heap_formtuple()
|
Список | 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
В списке pgsql-hackers по дате отправления: