[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#633961: linux images must conflict with unfixed input-utils



tags 609300 +patch
thanks

On Fri, Jul 15, 2011 at 06:30:41PM +0100, Ben Hutchings wrote:
>...
> This is wrong on so many levels.
> 1. There is no way to declare relations to 'all kernel packages'.

Why not?

How could a package declare "I need at least kernel 2.6.39"?
(I know that self-compiled kernels are a different story, but for
 kernel packages that should be possible.)

>...
> 3. You know how people complain about udev and kernel upgrade ordering
>    dependencies?  You're proposing to do the same thing.

udev is a special case, since it is very essential and udev and kernel 
upgrade ordering was a tricky problem.

input-utils is a peripheral package without much hassle.

> I suspect that the correct way to deal with this may be to build
> input-utils from the linux-2.6 source package and add some sort of
> wrapper in linux-base to select the right version (like we do for
> perf).
> 
> Or, you change the program to check which protocol version to use at
> run-time.

After looking a bit into it, and especially at commit ab4e0192
(Input: define separate EVIOCGKEYCODE_V2/EVIOCSKEYCODE_V2) in
the kernel, the correct fix for input-utils is a different and
quite simple one:

The input kernel<->userspace API might be enhanced with additional 
functionality in the future, but it will never change in a way that 
breaks the ABI.

Therefore the old functionality input-utils is using will always
be available, and the bug was that EVIOCGVERSION shouldn't be used
to check with equality for EV_VERSION (version >= 0x010001 might
be a valid check for software using EVIOCGKEYCODE_V2).

A patch for input-utils to remove the wrong version check is below.

After that, a Breaks in all kernel images on the unfixed input-utils 
would be required.

> Ben.

cu
Adrian


<--  snip  -->


--- input.c.old	2011-07-18 14:12:14.000000000 +0300
+++ input.c	2011-07-18 14:12:32.000000000 +0300
@@ -83,7 +83,7 @@
 int device_open(int nr, int verbose)
 {
 	char filename[32];
-	int fd, version;
+	int fd;
 
 	snprintf(filename,sizeof(filename),
 		 "/dev/input/event%d",nr);
@@ -96,17 +96,6 @@
 	if (verbose)
 		printf("%s\n",filename);
 
-	if (-1 == ioctl(fd,EVIOCGVERSION,&version)) {
-		perror("ioctl EVIOCGVERSION");
-		close(fd);
-		return -1;
-	}
-	if (EV_VERSION != version) {
-		fprintf(stderr, "protocol version mismatch (expected %d, got %d)\n",
-			EV_VERSION, version);
-		close(fd);
-		return -1;
-	}
 	return fd;
 }
 




Reply to: