[devel] PyGTK
Alexey Rusakov
ktirf at altlinux.org
Fri Jul 24 13:44:49 MSD 2009
В Птн, 24/07/2009 в 10:59 +0400, Alexey Tourbin пишет:
> On Fri, Jul 24, 2009 at 02:53:35PM +0800, REAL wrote:
> > Eugene Ostapets пишет:
> > >Там еще проще, нужно добавить "-1" к
> > >последнему аргументу. И повесить
> > >багу авторам, ибо они man strncpy явно не
> > >читали...
> >
> > Это я попробовал сразу же, но не помогло,
> > сообщение об ошибке не изменилось. В
> > общем, здесь нужно более глубоко рыть, а
> > мейнтейнерам однозначно с этим будет
> > проще и быстрее разобраться.
> >
> > Но раз пока никто из них не отреагировал,
> > решил обратиться к сообществу, потому
> > что мне что-то непонятно, чего этой штуке
> > надо.
> >
> > Исходный код:
> >
> > 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).
--
Alexey "Ktirf" Rusakov
GNOME Project
ALT Linux Team
----------- ��������� ����� -----------
���� ������� �������� �� � ��������� �������...
��� : �����������
��� : application/pgp-signature
������ : 197 ������
��������: ??? ????? ????????? ????????? ???????? ????????
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20090724/4273978b/attachment.bin>
More information about the Devel
mailing list