question on some code.
От | Chris Bowlby |
---|---|
Тема | question on some code. |
Дата | |
Msg-id | 6.2.1.2.0.20050719142034.01bdc428@mail.dreadnet.org обсуждение исходный текст |
Ответы |
Re: question on some code.
Re: question on some code. |
Список | pgsql-hackers |
Hi All, I've been doing a code audit (review) for my own personal use of the 7.4.x series code base and have come across something that I'd like to get more details on, if it is possible to do so. I've been going over the communications section and am curious how this segment of code is actually working: /* -------------------------------- * pq_sendint - append a binary integer to a StringInfo buffer * -------------------------------- */ void pq_sendint(StringInfo buf, int i, int b) { unsigned char n8; uint16 n16; uint32 n32; switch (b) { case 1: n8 = (unsigned char) i; appendBinaryStringInfo(buf, (char *) &n8, 1); break; case 2: n16 = htons((uint16) i); appendBinaryStringInfo(buf, (char *) &n16, 2); break; case 4: n32 = htonl((uint32) i); appendBinaryStringInfo(buf,(char *) &n32, 4); break; default: elog(ERROR, "unsupported integer size %d", b); break; } } I understand the concept of the code, to append binary values to a string buffer (char *), but, under my compiler on FreeBSD 5.4.x (gcc (GCC) 3.4.2 [FreeBSD] 20040728) I see a few issues that have cropped up. If I understand the code right, your trying to pass in to appendBinaryStringInfo an "address" or reference to the n8, n16, or n32 variables and cast them so that a char * pointer can access that address space. Through some testing that I've been doing (outputting the values in the appendBinaryStringInfo function), I never seem to see any data, The variable pointer that references the "n8, n16, or n32" value is not holding any data in the appendBinaryStringInfo function. This might be my miss-understanding of the function and was hoping someone would be willing to clearify it for me?
В списке pgsql-hackers по дате отправления: