В Птн, 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