[devel] timestamp

Slava Semushin slava.semushin на gmail.com
Чт Авг 30 09:59:52 MSD 2007


2007/8/30, Хихин Руслан <hihin / yandex.ru>:
[...]
> In file included from callbacks.c:31:
> /usr/include/linux/videodev2.h:352: ошибка: поле 'timestamp' имеет
> неполный тип
[...]
> PS Насколько я понимаю timestamp - это структура представления времени.
> Как  она может быть не полностью определена не понимаю. Может
> какой-нибудь хеадер надо добавить ?

[c0der на rock ~]$ cat video-test.c
                                    12:54
#include <linux/videodev2.h>

int main(void) {

 return 0;
}

[c0der на rock ~]$ gcc video-test.c -o video-test
                                    12:54
In file included from video-test.c:1:
/usr/include/linux/videodev2.h:225: ошибка: expected
specifier-qualifier-list before '__s32'
/usr/include/linux/videodev2.h:232: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:241: ошибка: expected
specifier-qualifier-list before '__u8'
/usr/include/linux/videodev2.h:275: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:335: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:351: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:393: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:428: ошибка: expected
specifier-qualifier-list before '__u16'
/usr/include/linux/videodev2.h:475: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:499: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:507: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:542: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:569: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:581: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:594: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:622: ошибка: expected '=', ',', ';',
'asm' or '__attribute__' before 'v4l2_std_id'
/usr/include/linux/videodev2.h:704: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:718: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:755: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:773: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:780: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:794: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:840: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:855: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:889: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:900: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:915: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:932: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:956: ошибка: expected
specifier-qualifier-list before '__u16'
/usr/include/linux/videodev2.h:982: ошибка: expected
specifier-qualifier-list before '__u16'
/usr/include/linux/videodev2.h:993: ошибка: expected
specifier-qualifier-list before '__u32'
/usr/include/linux/videodev2.h:1018: ошибка: expected
specifier-qualifier-list before '__u8'
/usr/include/linux/videodev2.h:1032: ошибка: expected
specifier-qualifier-list before '__u8'
[c1der на rock ~]$

Что ж... попробуем добавить хедер asm/types.h перед включением
linux/videodev2.h (как это сделано в вашей программе):

[c0der на rock ~]$ gcc video-test.c -o video-test
In file included from video-test.c:2:
/usr/include/linux/videodev2.h:512: ошибка: поле 'timestamp' имеет неполный тип

А вот и ваша ошибка...

Структура timeval определена в файла sys/time.h (как написано в
setitimer(3)). Попробуем добавить этот хедер:

[c0der на rock ~]$ cat video-test.c
#include <asm/types.h>
#include <sys/time.h>
#include <linux/videodev2.h>

int main(void) {

 return 0;
}

[c0der на rock ~]$ gcc video-test.c -o video-test
[c0der на rock ~]$

Вывод: хедер linux/videodev2.h использует структуры из других хедеров,
но их не подключает. Это баг. Можно повесить даже в багзиллу с
приведёнными тест-кейсами.

Workaround: добавить подключение sys/time.h вручную.

-- 
+ Slava Semushin | slava.semushin @ gmail.com
+ ALT Linux Team | php-coder @ altlinux.ru


Подробная информация о списке рассылки Devel