[devel] PyGTK
Alexey Tourbin
at at altlinux.ru
Fri Jul 24 13:51:02 MSD 2009
On Fri, Jul 24, 2009 at 01:44:49PM +0400, Alexey Rusakov wrote:
> В Птн, 24/07/2009 в 10:59 +0400, Alexey Tourbin пишет:
> > On Fri, Jul 24, 2009 at 02:53:35PM +0800, REAL wrote:
> > > Исходный код:
> > > strncpy((char *) &event->client.data, tmp,
> >
> > А зачем тут адрес берётся?
> Адрес тут берётся, потому что event->client.data - это union.
> event->client - это GdkEventClient, который выглядит так:
>
> typedef struct {
> GdkEventType type;
> GdkWindow *window;
> gint8 send_event;
> GdkAtom message_type;
> gushort data_format;
> union {
> char b[20];
> short s[10];
> long l[5];
> } data;
> } GdkEventClient;
В том-то и дело, что если копируем в массив, то адрес массива брать
не нужно (или не обязательно). Поэтому сразу подозрение, что копируют
куда-то не туда, куда хотят.
> Соответственно, люди таким образом копируют строку в
> event->client.data.b . Не знаю, почему бы не использовать явное указание
> поля в объединении - может, с переносимостью этого какая проблема... Но
> у меня есть подозрение, что на 64-разрядной платформе размер этого
> union'а оказался больше, чем размер его поля. Проверить, к сожалению, в
> данный момент не на чем (а на 32 битах всё в порядке, sizeof data
> возвращает 20).
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://lists.altlinux.org/pipermail/devel/attachments/20090724/57491fca/attachment.bin>
More information about the Devel
mailing list