[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