Hi,
this is v4l-test 0.13 patch for LTP.
Changes:
Added string content validation;
Test cases added for VIDIOC_REQBUFS
Signed-off-by: Márton Németh <[email protected]>
Regards,
Márton Németh
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/doc/index.html ltp/testcases/kernel/device-drivers/v4l/user_space/doc/index.html
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/doc/index.html 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/doc/index.html 2009-04-29 20:39:35.000000000 +0200
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
- <meta content="text/html;charset=ISO-8859-2" http-equiv="Content-Type">
+ <meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
<title>v4l-test: Test environment for Video For Linux Two API</title>
</head>
<body>
@@ -416,7 +416,7 @@ implemented test cases.</p>
</tr>
<tr>
<td>ioctl <a href="spec/r13696.htm">VIDIOC_REQBUFS</a></td>
- <td>no</td>
+ <td>yes, only when STREAM_OFF</td>
<td>Opt.</td>
</tr>
<tr>
@@ -504,10 +504,11 @@ The following documents and articles are
<a href="http://lwn.net/Articles/203924/">The Video4Linux2 API series</a> at
<a href="http://lwn.net/">lwn.net</a>
</li>
- <li><a href="http://people.atrpms.net/~hdegoede/libv4l.spec">libv4l</a>
+ <li><a href="http://freshmeat.net/projects/libv4l">libv4l</a>
<a href="http://people.atrpms.net/~hdegoede/libv4l-0.5.8.tar.gz">0.5.8</a>
</li>
- <li>Simple V4L2 video viewer: <a href="http://moinejf.free.fr/svv.c">svv.c</a>
+ <li>Simple V4L2 video viewer: <a href="http://moinejf.free.fr/svv.c">svv.c</a>,
+ writen by <a href="http://moinejf.free.fr/">Jean-François Moine</a>
</li>
</ul>
@@ -515,7 +516,7 @@ The following documents and articles are
<p>Any feedbacks, comments, ideas, etc. are welcome at the author's email address.</p>
<hr style="width: 100%; height: 2px;">
<p>Last changed:
-Sun Apr 19 11:03:40 CEST 2009
+Wed Apr 29 20:39:28 CEST 2009
</p>
<p>
<a href="http://validator.w3.org/check?uri=referer"><img
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/Makefile ltp/testcases/kernel/device-drivers/v4l/user_space/Makefile
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/Makefile 2009-04-13 09:25:29.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/Makefile 2009-04-25 17:49:54.000000000 +0200
@@ -1,6 +1,7 @@
#
# v4l-test: Test environment for Video For Linux Two API
#
+# 25 Apr 2009 0.14 test_VIDIOC_REQBUFS.c added
# 5 Apr 2009 0.13 test_VIDIOC_QUERYMENU.c added
# 4 Apr 2009 0.12 test_VIDIOC_FMT.c added
# 22 Mar 2009 0.11 test_VIDIOC_OUTPUT.c added,
@@ -60,6 +61,7 @@ OBJS = dev_video.o \
test_VIDIOC_CTRL.o \
test_VIDIOC_PARM.o \
test_VIDIOC_FMT.o \
+ test_VIDIOC_REQBUFS.o \
test_invalid_ioctl.o \
v4l2_test.o
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/README ltp/testcases/kernel/device-drivers/v4l/user_space/README
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/README 2009-04-21 11:22:59.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/README 2009-04-29 20:26:20.000000000 +0200
@@ -3,6 +3,8 @@
Release History
---------------
+29 Apr 2009 0.13 Added string content validation;
+ Test cases added for VIDIOC_REQBUFS
19 Apr 2009 0.12 Test cases added for VIDIOC_S_FMT;
NULL parameter test suite split to read only, write only
and write/read ioctl suite;
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_AUDIO.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_AUDIO.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_AUDIO.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_AUDIO.c 2009-04-20 20:08:49.000000000 +0200
@@ -1,6 +1,7 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 20 Apr 2009 0.7 Added string content validation
* 18 Apr 2009 0.6 More strict check for strings
* 29 Mar 2009 0.5 Clean up test case for NULL parameter
* 25 Mar 2009 0.4 Cleaned up dprintf() outputs and ret and errno names
@@ -30,6 +31,7 @@
#include "v4l2_test.h"
#include "dev_video.h"
#include "video_limits.h"
+#include "v4l2_validator.h"
#include "test_VIDIOC_ENUMAUDIO.h"
@@ -75,9 +77,8 @@ void test_VIDIOC_G_AUDIO() {
//CU_ASSERT_EQUAL(audio.index, ?);
- //CU_ASSERT_EQUAL(audio.name, ?);
CU_ASSERT(0 < strlen( (char*)audio.name ));
- CU_ASSERT(strlen( (char*)audio.name ) < sizeof(audio.name));
+ CU_ASSERT(valid_string((char*)audio.name, sizeof(audio.name)));
CU_ASSERT(valid_audio_capability(audio.capability));
CU_ASSERT(valid_audio_mode(audio.mode));
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_AUDOUT.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_AUDOUT.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_AUDOUT.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_AUDOUT.c 2009-04-20 20:06:41.000000000 +0200
@@ -1,6 +1,7 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 20 Apr 2009 0.7 Added string content validation
* 18 Apr 2009 0.6 More strict check for strings
* 29 Mar 2009 0.5 Clean up test case for NULL parameter
* 22 Mar 2009 0.4 Cleaned up dprintf() messages
@@ -30,6 +31,7 @@
#include "v4l2_test.h"
#include "dev_video.h"
#include "video_limits.h"
+#include "v4l2_validator.h"
#include "test_VIDIOC_AUDOUT.h"
@@ -61,9 +63,8 @@ void test_VIDIOC_G_AUDOUT() {
//CU_ASSERT_EQUAL(audioout.index, ?);
- //CU_ASSERT_EQUAL(audioout.name, ?);
CU_ASSERT(0 < strlen( (char*)audioout.name ));
- CU_ASSERT(strlen( (char*)audioout.name ) < sizeof(audioout.name));
+ CU_ASSERT(valid_string((char*)audioout.name, sizeof(audioout.name)));
CU_ASSERT_EQUAL(audioout.capability, 0);
CU_ASSERT_EQUAL(audioout.mode, 0);
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMAUDIO.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMAUDIO.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMAUDIO.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMAUDIO.c 2009-04-20 20:06:22.000000000 +0200
@@ -1,6 +1,7 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 20 Apr 2009 0.7 Added string content validation
* 18 Apr 2009 0.6 More strict check for strings
* 29 Mar 2009 0.5 Clean up test case for NULL parameter
* 28 Mar 2009 0.4 Clean up ret and errno variable names and dprintf() output
@@ -30,6 +31,7 @@
#include "v4l2_test.h"
#include "dev_video.h"
#include "video_limits.h"
+#include "v4l2_validator.h"
#include "test_VIDIOC_ENUMAUDIO.h"
@@ -53,8 +55,8 @@ void test_VIDIOC_ENUMAUDIO() {
CU_ASSERT_EQUAL(ret_enum, 0);
CU_ASSERT_EQUAL(audio.index, i);
- //CU_ASSERT_EQUAL(audio.name, ?);
CU_ASSERT(0 < strlen( (char*)audio.name ));
+ CU_ASSERT(valid_string((char*)audio.name, sizeof(audio.name)));
//CU_ASSERT_EQUAL(audio.capability, ?);
//CU_ASSERT_EQUAL(audio.mode, ?);
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMAUDOUT.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMAUDOUT.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMAUDOUT.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMAUDOUT.c 2009-04-20 20:09:31.000000000 +0200
@@ -1,6 +1,7 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 20 Apr 2009 0.4 Added string content validation
* 18 Apr 2009 0.3 More strict check for strings
* 25 Mar 2009 0.2 Typos corrected, cleaned up dprintf() outputs;
* cleaned up ret and errno variable names
@@ -35,6 +36,7 @@
#include "v4l2_test.h"
#include "dev_video.h"
#include "video_limits.h"
+#include "v4l2_validator.h"
#include "test_VIDIOC_ENUMAUDOUT.h"
@@ -57,8 +59,8 @@ void test_VIDIOC_ENUMAUDOUT() {
CU_ASSERT_EQUAL(ret_enum, 0);
CU_ASSERT_EQUAL(audioout.index, i);
- //CU_ASSERT_EQUAL(audioout.name, ?);
CU_ASSERT(0 < strlen( (char*)audioout.name ));
+ CU_ASSERT(valid_string((char*)audioout.name, sizeof(audioout.name)));
//CU_ASSERT_EQUAL(audioout.capability, ?);
//CU_ASSERT_EQUAL(audioout.mode, ?);
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUM_FMT.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUM_FMT.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUM_FMT.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUM_FMT.c 2009-04-20 20:09:42.000000000 +0200
@@ -1,6 +1,7 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 20 Apr 2009 0.9 Added string content validation
* 18 Apr 2009 0.8 More strict check for strings
* 13 Apr 2009 0.7 Also show type in debug output;
* Add some debug output
@@ -34,6 +35,7 @@
#include "v4l2_test.h"
#include "dev_video.h"
#include "video_limits.h"
+#include "v4l2_validator.h"
#include "test_VIDIOC_ENUM_FMT.h"
@@ -60,8 +62,8 @@ static void do_enumerate_formats(enum v4
//CU_ASSERT_EQUAL(format.type, ?);
//CU_ASSERT_EQUAL(format.flags, ?);
- //CU_ASSERT_EQUAL(format.description, ?);
CU_ASSERT(0 < strlen( (char*)format.description ));
+ CU_ASSERT(valid_string((char*)format.description, sizeof(format.description)));
//CU_ASSERT_EQUAL(format.pixelformat, ?);
CU_ASSERT_EQUAL(format.reserved[0], 0);
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMINPUT.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMINPUT.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMINPUT.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMINPUT.c 2009-04-20 20:03:41.000000000 +0200
@@ -1,6 +1,8 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 20 Apr 2009 0.9 Added string content validation
+ * 19 Apr 2009 0.8 Also check std field
* 18 Apr 2009 0.7 More strict check for strings
* 3 Apr 2009 0.6 Test case for NULL parameter reworked
* 28 Mar 2009 0.5 Clean up ret and errno variable names and dprintf() output
@@ -32,6 +34,7 @@
#include "v4l2_test.h"
#include "dev_video.h"
#include "video_limits.h"
+#include "v4l2_validator.h"
#include "test_VIDIOC_ENUMINPUT.h"
@@ -55,13 +58,13 @@ void test_VIDIOC_ENUMINPUT() {
CU_ASSERT_EQUAL(ret_enum, 0);
CU_ASSERT_EQUAL(input.index, i);
- //CU_ASSERT_EQUAL(input.name, ?);
CU_ASSERT(0 < strlen( (char*)input.name ));
+ CU_ASSERT(valid_string((char*)input.name, sizeof(input.name)));
//CU_ASSERT_EQUAL(input.type, ?);
//CU_ASSERT_EQUAL(input.audioset, ?);
//CU_ASSERT_EQUAL(input.tuner, ?);
- //CU_ASSERT_EQUAL(input.std, ?);
+ CU_ASSERT(valid_v4l2_std_id(input.std));
//CU_ASSERT_EQUAL(input.status, ?);
CU_ASSERT_EQUAL(input.reserved[0], 0);
CU_ASSERT_EQUAL(input.reserved[1], 0);
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMOUTPUT.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMOUTPUT.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMOUTPUT.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMOUTPUT.c 2009-04-20 20:03:03.000000000 +0200
@@ -1,6 +1,8 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 20 Apr 2009 0.6 Added string content validation
+ * 19 Apr 2009 0.5 Also check std field
* 18 Apr 2009 0.4 More strict check for strings
* 3 Apr 2009 0.3 Test case for NULL parameter reworked
* 28 Mar 2009 0.2 Clean up ret and errno variable names and dprintf() output
@@ -28,6 +30,7 @@
#include "v4l2_test.h"
#include "dev_video.h"
#include "video_limits.h"
+#include "v4l2_validator.h"
#include "test_VIDIOC_ENUMOUTPUT.h"
@@ -51,13 +54,13 @@ void test_VIDIOC_ENUMOUTPUT() {
CU_ASSERT_EQUAL(ret_enum, 0);
CU_ASSERT_EQUAL(output.index, i);
- //CU_ASSERT_EQUAL(output.name, ?);
CU_ASSERT(0 < strlen( (char*)output.name ));
+ CU_ASSERT(valid_string((char*)output.name, sizeof(output.name)));
//CU_ASSERT_EQUAL(output.type, ?);
//CU_ASSERT_EQUAL(output.audioset, ?);
//CU_ASSERT_EQUAL(output.modulator, ?);
- //CU_ASSERT_EQUAL(output.std, ?);
+ CU_ASSERT(valid_v4l2_std_id(output.std));
CU_ASSERT_EQUAL(output.reserved[0], 0);
CU_ASSERT_EQUAL(output.reserved[1], 0);
CU_ASSERT_EQUAL(output.reserved[2], 0);
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMSTD.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMSTD.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMSTD.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_ENUMSTD.c 2009-04-20 20:02:19.000000000 +0200
@@ -1,6 +1,8 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 20 Apr 2009 0.9 Added string content validation
+ * 19 Apr 2009 0.8 Also check std field
* 18 Apr 2009 0.7 More strict check for strings
* 3 Apr 2009 0.6 Test case for NULL parameter reworked
* 28 Mar 2009 0.5 Clean up ret and errno variable names and dprintf() output
@@ -37,6 +39,7 @@
#include "v4l2_test.h"
#include "dev_video.h"
#include "video_limits.h"
+#include "v4l2_validator.h"
#include "test_VIDIOC_ENUMSTD.h"
@@ -59,10 +62,10 @@ void test_VIDIOC_ENUMSTD() {
if (ret_enum == 0) {
CU_ASSERT_EQUAL(ret_enum, 0);
CU_ASSERT_EQUAL(std.index, i);
- //CU_ASSERT_EQUAL(std.id, ?);
+ CU_ASSERT(valid_v4l2_std_id(std.id));
- //CU_ASSERT_EQUAL(std.name, ?);
CU_ASSERT(0 < strlen( (char*)std.name ));
+ CU_ASSERT(valid_string((char*)std.name, sizeof(std.name)));
//CU_ASSERT_EQUAL(std.frameperiod.numerator, ?);
//CU_ASSERT_EQUAL(std.frameperiod.denominator, ?);
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_MODULATOR.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_MODULATOR.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_MODULATOR.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_MODULATOR.c 2009-04-20 20:02:54.000000000 +0200
@@ -1,6 +1,7 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 20 Apr 2009 0.4 Added string content validation
* 18 Apr 2009 0.3 More strict check for strings
* 28 Mar 2009 0.2 Clean up ret and errno variable names and dprintf() output
* 2 Feb 2009 0.1 First release
@@ -67,6 +68,7 @@ static int do_get_modulator(int f, __u32
CU_ASSERT_EQUAL(modulator.index, index);
CU_ASSERT(0 < strlen( (char*)modulator.name ));
+ CU_ASSERT(valid_string((char*)modulator.name, sizeof(modulator.name)));
CU_ASSERT(valid_modulator_capability(modulator.capability));
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_QUERYCAP.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_QUERYCAP.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_QUERYCAP.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_QUERYCAP.c 2009-04-20 20:23:21.000000000 +0200
@@ -1,6 +1,7 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 20 Apr 2009 0.5 Added string content validation
* 18 Apr 2009 0.4 More strict check for strings
* 29 Mar 2009 0.3 Clean up ret and errno variable names and dprintf() output
* 22 Dec 2008 0.2 Test case with NULL parameter added
@@ -28,6 +29,7 @@
#include "v4l2_test.h"
#include "dev_video.h"
#include "video_limits.h"
+#include "v4l2_validator.h"
#include "test_VIDIOC_QUERYCAP.h"
@@ -87,16 +89,16 @@ void test_VIDIOC_QUERYCAP() {
/* This ioctl must be implemented by ALL drivers */
CU_ASSERT_EQUAL(ret, 0);
if (ret == 0) {
- //CU_ASSERT_EQUAL(cap.driver, ?);
CU_ASSERT(0 < strlen( (char*)cap.driver) );
- CU_ASSERT(strlen( (char*)cap.driver) < sizeof(cap.driver));
+ CU_ASSERT(valid_string((char*)cap.driver, sizeof(cap.driver)));
- //CU_ASSERT_EQUAL(cap.card, ?);
CU_ASSERT(0 < strlen( (char*)cap.card) );
- CU_ASSERT(strlen( (char*)cap.card) < sizeof(cap.card) );
+ CU_ASSERT(valid_string((char*)cap.card, sizeof(cap.card)));
- //CU_ASSERT_EQUAL(cap.bus_info, ?);
- CU_ASSERT(strlen( (char*)cap.bus_info) < sizeof(cap.bus_info) );
+ /* cap.bus_info is allowed to be an empty string ("") if no
+ * is info available
+ */
+ CU_ASSERT(valid_string((char*)cap.bus_info, sizeof(cap.bus_info)));
//CU_ASSERT_EQUAL(cap.version, ?);
CU_ASSERT(valid_capabilities(cap.capabilities));
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_QUERYCTRL.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_QUERYCTRL.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_QUERYCTRL.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_QUERYCTRL.c 2009-04-20 20:10:04.000000000 +0200
@@ -1,6 +1,7 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 20 Apr 2009 0.4 Added string content validation
* 18 Apr 2009 0.3 More strict check for strings
* 28 Mar 2009 0.2 Clean up ret and errno variable names and dprintf() output
* 2 Jan 2009 0.1 First release
@@ -25,6 +26,7 @@
#include "v4l2_test.h"
#include "dev_video.h"
#include "video_limits.h"
+#include "v4l2_validator.h"
#include "test_VIDIOC_QUERYCTRL.h"
@@ -69,6 +71,20 @@ void test_VIDIOC_QUERYCTRL() {
struct v4l2_queryctrl queryctrl2;
__u32 i;
+ /* The available controls and their parameters
+ * may change with different
+ * - input or output
+ * - tuner or modulator
+ * - audio input or audio output
+ * See V4L API specification rev. 0.24, Chapter 1.8.
+ * "User Controls" for details
+ *
+ * TODO: iterate through the mentioned settings.
+ * TODO: check for deprecated controls (maybe in a
+ * separated test case which could fail when a
+ * deprecated control is supported)
+ */
+
for (i = V4L2_CID_BASE; i < V4L2_CID_LASTP1; i++) {
memset(&queryctrl, 0xff, sizeof(queryctrl));
@@ -83,8 +99,8 @@ void test_VIDIOC_QUERYCTRL() {
CU_ASSERT_EQUAL(ret_query, 0);
CU_ASSERT_EQUAL(queryctrl.id, i);
- //CU_ASSERT_EQUAL(queryctrl.name, ?);
CU_ASSERT(0 < strlen( (char*)queryctrl.name ));
+ CU_ASSERT(valid_string((char*)queryctrl.name, sizeof(queryctrl.name)));
CU_ASSERT(valid_control_type(queryctrl.type));
@@ -423,8 +439,8 @@ void test_VIDIOC_QUERYCTRL_private() {
CU_ASSERT_EQUAL(ret_query, 0);
CU_ASSERT_EQUAL(queryctrl.id, i);
- //CU_ASSERT_EQUAL(queryctrl.name, ?);
CU_ASSERT(0 < strlen( (char*)queryctrl.name ));
+ CU_ASSERT(valid_string((char*)queryctrl.name, sizeof(queryctrl.name)));
CU_ASSERT(valid_control_type(queryctrl.type));
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_QUERYMENU.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_QUERYMENU.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_QUERYMENU.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_QUERYMENU.c 2009-04-20 20:09:16.000000000 +0200
@@ -1,6 +1,7 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 20 Apr 2009 0.3 Added string content validation
* 18 Apr 2009 0.2 More strict check for strings
* 5 Apr 2009 0.1 First release
*
@@ -24,6 +25,7 @@
#include "v4l2_test.h"
#include "dev_video.h"
#include "video_limits.h"
+#include "v4l2_validator.h"
#include "test_VIDIOC_QUERYCTRL.h"
@@ -47,9 +49,8 @@ static void do_check_menu(__u32 id, __u3
CU_ASSERT_EQUAL(menu->id, id);
CU_ASSERT_EQUAL(menu->index, index);
- //CU_ASSERT_EQUAL(menu->name, ???);
CU_ASSERT(0 < strlen((char*)menu->name));
- CU_ASSERT(strlen((char*)menu->name) < sizeof(menu->name));
+ CU_ASSERT(valid_string((char*)menu->name, sizeof(menu->name)));
CU_ASSERT_EQUAL(menu->reserved, 0);
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_REQBUFS.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_REQBUFS.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_REQBUFS.c 1970-01-01 01:00:00.000000000 +0100
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_REQBUFS.c 2009-04-29 20:14:41.000000000 +0200
@@ -0,0 +1,426 @@
+/*
+ * v4l-test: Test environment for Video For Linux Two API
+ *
+ * 29 Apr 2009 0.1 First release
+ *
+ * Written by Márton Németh <[email protected]>
+ * Released under GPL
+ */
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <errno.h>
+#include <string.h>
+
+#include <linux/videodev2.h>
+#include <linux/errno.h>
+
+#include <CUnit/CUnit.h>
+
+#include "v4l2_test.h"
+#include "dev_video.h"
+#include "video_limits.h"
+
+#include "test_VIDIOC_REQBUFS.h"
+
+static void show_v4l2_requestbuffers(struct v4l2_requestbuffers *reqbuf) {
+ dprintf("\treqbuf = { "
+ ".count=%u, "
+ ".type=%i, "
+ ".memory=%i, "
+ ".reserved = { 0x%X, 0x%X } "
+ "}\n",
+ reqbuf->count,
+ reqbuf->type,
+ reqbuf->memory,
+ reqbuf->reserved[0],
+ reqbuf->reserved[1]
+ );
+}
+
+static void do_VIDIOC_REQBUFS_capture_mmap(__u32 count) {
+ int ret_cap, errno_cap;
+ int ret_req, errno_req;
+ struct v4l2_capability cap;
+ struct v4l2_requestbuffers reqbuf;
+ struct v4l2_requestbuffers reqbuf2;
+
+ memset(&cap, 0, sizeof(cap));
+
+ ret_cap = ioctl(get_video_fd(), VIDIOC_QUERYCAP, &cap);
+ errno_cap = errno;
+
+ memset(&reqbuf, 0xff, sizeof(reqbuf));
+ reqbuf.count = count;
+ reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ reqbuf.memory = V4L2_MEMORY_MMAP;
+
+ ret_req = ioctl(get_video_fd(), VIDIOC_REQBUFS, &reqbuf);
+ errno_req = errno;
+
+ dprintf("\t%s:%u: VIDIOC_REQBUF, count=%u, ret_req=%i, errno_req=%i\n",
+ __FILE__, __LINE__, count, ret_req, errno_req);
+
+ if (ret_cap == 0 &&
+ (cap.capabilities & V4L2_CAP_STREAMING) &&
+ (cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
+
+ CU_ASSERT_EQUAL(ret_cap, 0);
+ CU_ASSERT(cap.capabilities & V4L2_CAP_STREAMING);
+
+ CU_ASSERT_EQUAL(ret_req, 0);
+ //CU_ASSERT_EQUAL(reqbuf.count, ???);
+ CU_ASSERT_EQUAL(reqbuf.type, V4L2_BUF_TYPE_VIDEO_CAPTURE);
+ CU_ASSERT_EQUAL(reqbuf.memory, V4L2_MEMORY_MMAP);
+ CU_ASSERT_EQUAL(reqbuf.reserved[0], 0);
+ CU_ASSERT_EQUAL(reqbuf.reserved[1], 0);
+
+ } else {
+ CU_ASSERT_EQUAL(ret_req, -1);
+ CU_ASSERT_EQUAL(errno_req, EINVAL);
+
+ memset(&reqbuf2, 0xff, sizeof(reqbuf2));
+ reqbuf2.count = count;
+ reqbuf2.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ reqbuf2.memory = V4L2_MEMORY_MMAP;
+
+ CU_ASSERT_EQUAL(memcmp(&reqbuf, &reqbuf2, sizeof(reqbuf)), 0);
+ }
+
+ if (ret_req == 0) {
+ show_v4l2_requestbuffers(&reqbuf);
+ }
+
+}
+
+void test_VIDIOC_REQBUFS_capture_mmap() {
+ do_VIDIOC_REQBUFS_capture_mmap(0);
+ do_VIDIOC_REQBUFS_capture_mmap(1);
+ do_VIDIOC_REQBUFS_capture_mmap(2);
+ do_VIDIOC_REQBUFS_capture_mmap(3);
+ do_VIDIOC_REQBUFS_capture_mmap(4);
+ do_VIDIOC_REQBUFS_capture_mmap((__u32)S16_MIN);
+ do_VIDIOC_REQBUFS_capture_mmap((__u32)S16_MAX);
+ do_VIDIOC_REQBUFS_capture_mmap(U32_MAX);
+ do_VIDIOC_REQBUFS_capture_mmap(0);
+}
+
+static void do_VIDIOC_REQBUFS_capture_userptr(__u32 count) {
+ int ret_cap, errno_cap;
+ int ret_req, errno_req;
+ struct v4l2_capability cap;
+ struct v4l2_requestbuffers reqbuf;
+ struct v4l2_requestbuffers reqbuf2;
+
+ memset(&cap, 0, sizeof(cap));
+
+ ret_cap = ioctl(get_video_fd(), VIDIOC_QUERYCAP, &cap);
+ errno_cap = errno;
+
+ memset(&reqbuf, 0xff, sizeof(reqbuf));
+ reqbuf.count = count;
+ reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ reqbuf.memory = V4L2_MEMORY_USERPTR;
+
+ ret_req = ioctl(get_video_fd(), VIDIOC_REQBUFS, &reqbuf);
+ errno_req = errno;
+
+ dprintf("\t%s:%u: VIDIOC_REQBUF, count=%u, ret_req=%i, errno_req=%i\n",
+ __FILE__, __LINE__, count, ret_req, errno_req);
+
+ if (ret_cap == 0 &&
+ (cap.capabilities & V4L2_CAP_STREAMING) &&
+ (cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) &&
+ ret_req == 0
+ ) {
+ CU_ASSERT_EQUAL(ret_cap, 0);
+ CU_ASSERT(cap.capabilities & V4L2_CAP_STREAMING);
+
+ CU_ASSERT_EQUAL(ret_req, 0);
+ //CU_ASSERT_EQUAL(reqbuf.count, ???);
+ CU_ASSERT_EQUAL(reqbuf.type, V4L2_BUF_TYPE_VIDEO_CAPTURE);
+ CU_ASSERT_EQUAL(reqbuf.memory, V4L2_MEMORY_USERPTR);
+ CU_ASSERT_EQUAL(reqbuf.reserved[0], 0);
+ CU_ASSERT_EQUAL(reqbuf.reserved[1], 0);
+
+ } else {
+ CU_ASSERT_EQUAL(ret_req, -1);
+ CU_ASSERT_EQUAL(errno_req, EINVAL);
+
+ memset(&reqbuf2, 0xff, sizeof(reqbuf2));
+ reqbuf2.count = count;
+ reqbuf2.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ reqbuf2.memory = V4L2_MEMORY_USERPTR;
+
+ CU_ASSERT_EQUAL(memcmp(&reqbuf, &reqbuf2, sizeof(reqbuf)), 0);
+ }
+
+ if (ret_req == 0) {
+ show_v4l2_requestbuffers(&reqbuf);
+ }
+
+}
+
+void test_VIDIOC_REQBUFS_capture_userptr() {
+ do_VIDIOC_REQBUFS_capture_userptr(0);
+ do_VIDIOC_REQBUFS_capture_userptr(1);
+ do_VIDIOC_REQBUFS_capture_userptr((__u32)S16_MIN);
+ do_VIDIOC_REQBUFS_capture_userptr((__u32)S16_MAX);
+ do_VIDIOC_REQBUFS_capture_userptr(U32_MAX);
+ do_VIDIOC_REQBUFS_capture_userptr(0);
+}
+
+static void do_VIDIOC_REQBUFS_output_mmap(__u32 count) {
+ int ret_cap, errno_cap;
+ int ret_req, errno_req;
+ struct v4l2_capability cap;
+ struct v4l2_requestbuffers reqbuf;
+ struct v4l2_requestbuffers reqbuf2;
+
+ memset(&cap, 0, sizeof(cap));
+
+ ret_cap = ioctl(get_video_fd(), VIDIOC_QUERYCAP, &cap);
+ errno_cap = errno;
+
+ memset(&reqbuf, 0xff, sizeof(reqbuf));
+ reqbuf.count = count;
+ reqbuf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+ reqbuf.memory = V4L2_MEMORY_MMAP;
+
+ ret_req = ioctl(get_video_fd(), VIDIOC_REQBUFS, &reqbuf);
+ errno_req = errno;
+
+ dprintf("\t%s:%u: VIDIOC_REQBUF, count=%u, ret_req=%i, errno_req=%i\n",
+ __FILE__, __LINE__, count, ret_req, errno_req);
+
+ if (ret_cap == 0 &&
+ (cap.capabilities & V4L2_CAP_STREAMING) &&
+ (cap.capabilities & V4L2_CAP_VIDEO_OUTPUT)) {
+
+ CU_ASSERT_EQUAL(ret_cap, 0);
+ CU_ASSERT(cap.capabilities & V4L2_CAP_STREAMING);
+
+ CU_ASSERT_EQUAL(ret_req, 0);
+ //CU_ASSERT_EQUAL(reqbuf.count, ???);
+ CU_ASSERT_EQUAL(reqbuf.type, V4L2_BUF_TYPE_VIDEO_OUTPUT);
+ CU_ASSERT_EQUAL(reqbuf.memory, V4L2_MEMORY_MMAP);
+ CU_ASSERT_EQUAL(reqbuf.reserved[0], 0);
+ CU_ASSERT_EQUAL(reqbuf.reserved[1], 0);
+
+ } else {
+ CU_ASSERT_EQUAL(ret_req, -1);
+ CU_ASSERT_EQUAL(errno_req, EINVAL);
+
+ memset(&reqbuf2, 0xff, sizeof(reqbuf2));
+ reqbuf2.count = count;
+ reqbuf2.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+ reqbuf2.memory = V4L2_MEMORY_MMAP;
+
+ CU_ASSERT_EQUAL(memcmp(&reqbuf, &reqbuf2, sizeof(reqbuf)), 0);
+ }
+
+ if (ret_req == 0) {
+ show_v4l2_requestbuffers(&reqbuf);
+ }
+
+}
+
+void test_VIDIOC_REQBUFS_output_mmap() {
+ do_VIDIOC_REQBUFS_output_mmap(0);
+ do_VIDIOC_REQBUFS_output_mmap(1);
+ do_VIDIOC_REQBUFS_output_mmap(2);
+ do_VIDIOC_REQBUFS_output_mmap(3);
+ do_VIDIOC_REQBUFS_output_mmap(4);
+ do_VIDIOC_REQBUFS_output_mmap((__u32)S16_MIN);
+ do_VIDIOC_REQBUFS_output_mmap((__u32)S16_MAX);
+ do_VIDIOC_REQBUFS_output_mmap(U32_MAX);
+ do_VIDIOC_REQBUFS_output_mmap(0);
+}
+
+static void do_VIDIOC_REQBUFS_output_userptr(__u32 count) {
+ int ret_cap, errno_cap;
+ int ret_req, errno_req;
+ struct v4l2_capability cap;
+ struct v4l2_requestbuffers reqbuf;
+ struct v4l2_requestbuffers reqbuf2;
+
+ memset(&cap, 0, sizeof(cap));
+
+ ret_cap = ioctl(get_video_fd(), VIDIOC_QUERYCAP, &cap);
+ errno_cap = errno;
+
+ memset(&reqbuf, 0xff, sizeof(reqbuf));
+ reqbuf.count = count;
+ reqbuf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+ reqbuf.memory = V4L2_MEMORY_USERPTR;
+
+ ret_req = ioctl(get_video_fd(), VIDIOC_REQBUFS, &reqbuf);
+ errno_req = errno;
+
+ dprintf("\t%s:%u: VIDIOC_REQBUF, count=%u, ret_req=%i, errno_req=%i\n",
+ __FILE__, __LINE__, count, ret_req, errno_req);
+
+ if (ret_cap == 0 &&
+ (cap.capabilities & V4L2_CAP_STREAMING) &&
+ (cap.capabilities & V4L2_CAP_VIDEO_OUTPUT) &&
+ ret_req == 0
+ ) {
+ CU_ASSERT_EQUAL(ret_cap, 0);
+ CU_ASSERT(cap.capabilities & V4L2_CAP_STREAMING);
+
+ CU_ASSERT_EQUAL(ret_req, 0);
+ //CU_ASSERT_EQUAL(reqbuf.count, ???);
+ CU_ASSERT_EQUAL(reqbuf.type, V4L2_BUF_TYPE_VIDEO_OUTPUT);
+ CU_ASSERT_EQUAL(reqbuf.memory, V4L2_MEMORY_USERPTR);
+ CU_ASSERT_EQUAL(reqbuf.reserved[0], 0);
+ CU_ASSERT_EQUAL(reqbuf.reserved[1], 0);
+
+ } else {
+ CU_ASSERT_EQUAL(ret_req, -1);
+ CU_ASSERT_EQUAL(errno_req, EINVAL);
+
+ memset(&reqbuf2, 0xff, sizeof(reqbuf2));
+ reqbuf2.count = count;
+ reqbuf2.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+ reqbuf2.memory = V4L2_MEMORY_USERPTR;
+
+ CU_ASSERT_EQUAL(memcmp(&reqbuf, &reqbuf2, sizeof(reqbuf)), 0);
+ }
+
+ if (ret_req == 0) {
+ show_v4l2_requestbuffers(&reqbuf);
+ }
+
+}
+
+void test_VIDIOC_REQBUFS_output_userptr() {
+ do_VIDIOC_REQBUFS_output_userptr(0);
+ do_VIDIOC_REQBUFS_output_userptr(1);
+ do_VIDIOC_REQBUFS_output_userptr((__u32)S16_MIN);
+ do_VIDIOC_REQBUFS_output_userptr((__u32)S16_MAX);
+ do_VIDIOC_REQBUFS_output_userptr(U32_MAX);
+ do_VIDIOC_REQBUFS_output_userptr(0);
+}
+
+static void do_VIDIOC_REQBUFS_invalid_memory(enum v4l2_buf_type type, enum v4l2_memory memory) {
+ int ret_req, errno_req;
+ struct v4l2_requestbuffers reqbuf;
+ struct v4l2_requestbuffers reqbuf2;
+
+ memset(&reqbuf, 0xff, sizeof(reqbuf));
+ reqbuf.count = 0;
+ reqbuf.type = type;
+ reqbuf.memory = memory;
+
+ ret_req = ioctl(get_video_fd(), VIDIOC_REQBUFS, &reqbuf);
+ errno_req = errno;
+
+ dprintf("\t%s:%u: VIDIOC_REQBUF, type=0%x, ret_req=%i, errno_req=%i\n",
+ __FILE__, __LINE__, type, ret_req, errno_req);
+
+ CU_ASSERT_EQUAL(ret_req, -1);
+ CU_ASSERT_EQUAL(errno_req, EINVAL);
+
+ memset(&reqbuf2, 0xff, sizeof(reqbuf2));
+ reqbuf2.count = 0;
+ reqbuf2.type = type;
+ reqbuf2.memory = memory;
+
+ CU_ASSERT_EQUAL(memcmp(&reqbuf, &reqbuf2, sizeof(reqbuf)), 0);
+
+ if (ret_req == 0) {
+ show_v4l2_requestbuffers(&reqbuf);
+ }
+
+}
+
+void test_VIDIOC_REQBUFS_invalid_memory_capture() {
+ do_VIDIOC_REQBUFS_invalid_memory(V4L2_BUF_TYPE_VIDEO_CAPTURE, SINT_MIN);
+ do_VIDIOC_REQBUFS_invalid_memory(V4L2_BUF_TYPE_VIDEO_CAPTURE, 0);
+ do_VIDIOC_REQBUFS_invalid_memory(V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_MEMORY_OVERLAY);
+ do_VIDIOC_REQBUFS_invalid_memory(V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_MEMORY_OVERLAY+1);
+ do_VIDIOC_REQBUFS_invalid_memory(V4L2_BUF_TYPE_VIDEO_CAPTURE, SINT_MAX);
+}
+
+void test_VIDIOC_REQBUFS_invalid_memory_output() {
+ do_VIDIOC_REQBUFS_invalid_memory(V4L2_BUF_TYPE_VIDEO_OUTPUT, SINT_MIN);
+ do_VIDIOC_REQBUFS_invalid_memory(V4L2_BUF_TYPE_VIDEO_OUTPUT, 0);
+ do_VIDIOC_REQBUFS_invalid_memory(V4L2_BUF_TYPE_VIDEO_OUTPUT, V4L2_MEMORY_OVERLAY);
+ do_VIDIOC_REQBUFS_invalid_memory(V4L2_BUF_TYPE_VIDEO_OUTPUT, V4L2_MEMORY_OVERLAY+1);
+ do_VIDIOC_REQBUFS_invalid_memory(V4L2_BUF_TYPE_VIDEO_OUTPUT, SINT_MAX);
+}
+
+
+static void do_VIDIOC_REQBUFS_invalid_type(enum v4l2_memory memory, enum v4l2_buf_type type) {
+ int ret_req, errno_req;
+ struct v4l2_requestbuffers reqbuf;
+ struct v4l2_requestbuffers reqbuf2;
+ __u32 count;
+
+ count = 1;
+
+ memset(&reqbuf, 0xff, sizeof(reqbuf));
+ reqbuf.count = count;
+ reqbuf.type = type;
+ reqbuf.memory = memory;
+
+ ret_req = ioctl(get_video_fd(), VIDIOC_REQBUFS, &reqbuf);
+ errno_req = errno;
+
+ dprintf("\t%s:%u: VIDIOC_REQBUF, type=0x%x, memory=%i, ret_req=%i, errno_req=%i\n",
+ __FILE__, __LINE__, type, memory, ret_req, errno_req);
+
+ CU_ASSERT_EQUAL(ret_req, -1);
+ CU_ASSERT_EQUAL(errno_req, EINVAL);
+
+ memset(&reqbuf2, 0xff, sizeof(reqbuf2));
+ reqbuf2.count = count;
+ reqbuf2.type = type;
+ reqbuf2.memory = memory;
+
+ CU_ASSERT_EQUAL(memcmp(&reqbuf, &reqbuf2, sizeof(reqbuf)), 0);
+
+ if (ret_req == 0) {
+ show_v4l2_requestbuffers(&reqbuf);
+ }
+}
+
+void test_VIDIOC_REQUBUFS_invalid_type_mmap() {
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_MMAP, 0);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OVERLAY);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VBI_CAPTURE);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VBI_OUTPUT);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_SLICED_VBI_CAPTURE);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_SLICED_VBI_OUTPUT);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_PRIVATE-1);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_PRIVATE);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_MMAP, V4L2_BUF_TYPE_PRIVATE+1);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_MMAP, S32_MAX);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_MMAP, (__s32)((__u32)S32_MAX+1));
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_MMAP, U32_MAX-1);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_MMAP, U32_MAX);
+
+}
+
+void test_VIDIOC_REQUBUFS_invalid_type_userptr() {
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_USERPTR, 0);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OVERLAY);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VBI_CAPTURE);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VBI_OUTPUT);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_SLICED_VBI_CAPTURE);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_SLICED_VBI_OUTPUT);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_PRIVATE-1);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_PRIVATE);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_USERPTR, V4L2_BUF_TYPE_PRIVATE+1);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_USERPTR, S32_MAX);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_USERPTR, (__s32)((__u32)S32_MAX+1));
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_USERPTR, U32_MAX-1);
+ do_VIDIOC_REQBUFS_invalid_type(V4L2_MEMORY_USERPTR, U32_MAX);
+
+}
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_REQBUFS.h ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_REQBUFS.h
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_REQBUFS.h 1970-01-01 01:00:00.000000000 +0100
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_REQBUFS.h 2009-04-29 20:14:36.000000000 +0200
@@ -0,0 +1,20 @@
+/*
+ * v4l-test: Test environment for Video For Linux Two API
+ *
+ * 29 Apr 2009 0.1 First release
+ *
+ * Written by Márton Németh <[email protected]>
+ * Released under GPL
+ */
+
+void test_VIDIOC_REQBUFS_capture_mmap(void);
+void test_VIDIOC_REQBUFS_capture_userptr(void);
+
+void test_VIDIOC_REQBUFS_output_mmap(void);
+void test_VIDIOC_REQBUFS_output_userptr(void);
+
+void test_VIDIOC_REQBUFS_invalid_memory_capture(void);
+void test_VIDIOC_REQBUFS_invalid_memory_output(void);
+
+void test_VIDIOC_REQUBUFS_invalid_type_mmap(void);
+void test_VIDIOC_REQUBUFS_invalid_type_userptr(void);
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_STD.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_STD.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_STD.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_STD.c 2009-04-19 16:48:42.000000000 +0200
@@ -41,6 +41,18 @@ void test_VIDIOC_G_STD() {
int ret_get, errno_get;
v4l2_std_id std_id;
+ /* TODO: Iterate trough all inputs and all outputs
+ * with VIDIOC_ENUMINPUT and VIDIOC_ENUMOUTPUT.
+ * Also ensure tahat VIDIC_G_STD is called at least
+ * once even if VIDIOC_ENUMINPUT and VIDIOC_ENUMOUTPUT
+ * always return EINVAL.
+ *
+ * V4L2 API specification rev. 0.24, Chapter 1.7.
+ * "Video Standards" specifies if the std field
+ * of v4l2_input and v4l2_output is zero then
+ * VIDIOC_G_STD shall always return EINVAL.
+ */
+
memset(&std_id, 0xff, sizeof(std_id));
ret_get = ioctl(get_video_fd(), VIDIOC_G_STD, &std_id);
errno_get = errno;
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_TUNER.c ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_TUNER.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_TUNER.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/test_VIDIOC_TUNER.c 2009-04-20 20:03:16.000000000 +0200
@@ -1,6 +1,7 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 20 Apr 2009 0.5 Added string content validation
* 18 Apr 2009 0.4 More strict check for strings
* 28 Mar 2009 0.3 Clean up ret and errno variable names and dprintf() output
* 9 Feb 2009 0.2 Added test cases for VIDIOC_S_TUNER;
@@ -105,6 +106,7 @@ static int do_get_tuner(int f, __u32 ind
CU_ASSERT_EQUAL(tuner.index, index);
CU_ASSERT(0 < strlen( (char*)tuner.name ));
+ CU_ASSERT(valid_string((char*)tuner.name, sizeof(tuner.name)));
CU_ASSERT(valid_tuner_type(tuner.type));
CU_ASSERT(valid_tuner_capability(tuner.capability));
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/v4l2_test.c ltp/testcases/kernel/device-drivers/v4l/user_space/v4l2_test.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/v4l2_test.c 2009-04-21 11:23:00.000000000 +0200
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/v4l2_test.c 2009-04-29 20:15:25.000000000 +0200
@@ -1,6 +1,7 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 29 Apr 2009 0.21 Test cases added for VIDIOC_REQBUFS
* 18 Apr 2009 0.20 NULL parameter test suite split to read only, write only
* and write/read ioctl suite
* 16 Apr 2009 0.19 Test cases added for VIDIOC_S_FMT
@@ -81,6 +82,8 @@
#include "test_VIDIOC_PARM.h"
#include "test_VIDIOC_FMT.h"
+#include "test_VIDIOC_REQBUFS.h"
+
#include "test_VIDIOC_LOG_STATUS.h"
#include "test_invalid_ioctl.h"
@@ -234,6 +237,19 @@ static CU_TestInfo suite_querystd[] = {
CU_TEST_INFO_NULL,
};
+static CU_TestInfo suite_buffs[] = {
+ { "VIDIOC_REQBUFS with memory map capture streaming i/o", test_VIDIOC_REQBUFS_capture_mmap },
+ { "VIDIOC_REQBUFS with user pointer capture streaming i/o", test_VIDIOC_REQBUFS_capture_userptr },
+ { "VIDIOC_REQBUFS with memory map output streaming i/o", test_VIDIOC_REQBUFS_output_mmap },
+ { "VIDIOC_REQBUFS with user pointer output streaming i/o", test_VIDIOC_REQBUFS_output_userptr },
+ { "VIDIOC_REQBUFS with invalid memory parameter, capture", test_VIDIOC_REQBUFS_invalid_memory_capture },
+ { "VIDIOC_REQBUFS with invalid memory parameter, output", test_VIDIOC_REQBUFS_invalid_memory_output },
+ { "VIDIOC_REQBUFS with invalid type parameter, memory mapped i/o", test_VIDIOC_REQUBUFS_invalid_type_mmap },
+ { "VIDIOC_REQBUFS with invalid type parameter, user pointer i/o", test_VIDIOC_REQUBUFS_invalid_type_userptr },
+
+ CU_TEST_INFO_NULL,
+};
+
static CU_TestInfo suite_null_readonly[] = {
{ "VIDIOC_QUERYCAP with NULL parameter", test_VIDIOC_QUERYCAP_NULL },
/* { "VIDIOC_G_FBUF with NULL parameter", }, */
@@ -311,6 +327,8 @@ static CU_TestInfo suite_null_writeread[
CU_TEST_INFO_NULL,
};
+
+
static CU_TestInfo suite_invalid_ioctl[] = {
{ "invalid ioctl _IO(0, 0)", test_invalid_ioctl_1 },
{ "invalid ioctl _IO(0xFF, 0xFF)", test_invalid_ioctl_2 },
@@ -331,6 +349,7 @@ static CU_SuiteInfo suites[] = {
{ "VIDIOC_ENUM* ioctl calls", open_video, close_video, suite_enums },
{ "VIDIOC_G_*, VIDIOC_S_* and VIDIOC_TRY_* ioctl calls", open_video, close_video, suite_get_set_try },
{ "VIDIOC_QUERYSTD", open_video, close_video, suite_querystd },
+ { "buffer i/o", open_video, close_video, suite_buffs },
{ "read only IOCTLs with NULL parameter", open_video, close_video, suite_null_readonly },
{ "write only IOCTLs with NULL parameter", open_video, close_video, suite_null_writeonly },
{ "write and read IOCTLs with NULL parameter", open_video, close_video, suite_null_writeread },
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/v4l2_validator.c ltp/testcases/kernel/device-drivers/v4l/user_space/v4l2_validator.c
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/v4l2_validator.c 2009-02-05 12:05:04.000000000 +0100
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/v4l2_validator.c 2009-04-20 19:39:53.000000000 +0200
@@ -82,3 +82,28 @@ int valid_tuner_capability(__u32 capabil
int valid_modulator_capability(__u32 capability) {
return valid_tuner_capability(capability);
}
+
+int valid_string(char* str, unsigned int max_length) {
+ int valid = 1;
+ unsigned int i;
+
+ i = 0;
+ while (i < max_length && str[i] != 0) {
+ /* Printable characters start with SPACE (32) and
+ * ends with '~' (126) inclusively.
+ */
+ if (str[i] < 32 || 126 < str[i]) {
+ valid = 0;
+ break;
+ }
+ i++;
+ }
+
+ /* check if the string was closed with zero byte properly */
+ if (i == max_length) {
+ valid = 0;
+ }
+
+ return valid;
+}
+
diff -uprN ltp.orig/testcases/kernel/device-drivers/v4l/user_space/v4l2_validator.h ltp/testcases/kernel/device-drivers/v4l/user_space/v4l2_validator.h
--- ltp.orig/testcases/kernel/device-drivers/v4l/user_space/v4l2_validator.h 2009-02-05 12:05:04.000000000 +0100
+++ ltp/testcases/kernel/device-drivers/v4l/user_space/v4l2_validator.h 2009-04-20 19:40:16.000000000 +0200
@@ -1,6 +1,7 @@
/*
* v4l-test: Test environment for Video For Linux Two API
*
+ * 20 Apr 2009 0.2 Printable string validator added
* 30 Jan 2009 0.1 First release
*
* Written by Márton Németh <[email protected]>
@@ -12,3 +13,4 @@
int valid_v4l2_std_id(v4l2_std_id std_id);
int valid_tuner_capability(__u32 capability);
int valid_modulator_capability(__u32 capability);
+int valid_string(char* str, unsigned int max_length);
------------------------------------------------------------------------------
Register Now & Save for Velocity, the Web Performance & Operations
Conference from O'Reilly Media. Velocity features a full day of
expert-led, hands-on workshops and two days of sessions from industry
leaders in dedicated Performance & Operations tracks. Use code vel09scf
and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list