Hello community,
here is the log from the commit of package acpid for openSUSE:Factory checked in at 2012-01-25 15:00:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/acpid (Old)
and /work/SRC/openSUSE:Factory/.acpid.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "acpid", Maintainer is "hmacht@suse.com"
Changes:
--------
--- /work/SRC/openSUSE:Factory/acpid/acpid.changes 2012-01-05 13:47:33.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.acpid.new/acpid.changes 2012-01-25 15:01:01.000000000 +0100
@@ -1,0 +2,14 @@
+Tue Jan 17 23:43:46 UTC 2012 - tabraham@novell.com
+
+- Update to acpid 2.0.14
+ + fixed brace style (Ted Felix)
+ + added support for a "K" suffix on event strings to indicate
+ that they may have originated from a keyboard input layer
+ device. This can be used to differentiate between a power
+ switch on the keyboard, and a power switch on the computer's
+ case. (Ted Felix)
+ + Added a pathname to connection along with a find_connection_name()
+ Modifications to process_inotify() to log IN_DELETE events.
+ Additional debugging output (Ted Felix)
+
+-------------------------------------------------------------------
Old:
----
acpid-2.0.13.tar.gz
New:
----
acpid-2.0.14.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ acpid.spec ++++++
--- /var/tmp/diff_new_pack.HOfdsT/_old 2012-01-25 15:01:02.000000000 +0100
+++ /var/tmp/diff_new_pack.HOfdsT/_new 2012-01-25 15:01:02.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package acpid
#
-# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,13 +18,13 @@
Name: acpid
-Version: 2.0.13
+Version: 2.0.14
Release: 0
License: GPL-2.0+
Summary: Executes Actions at ACPI Events
Url: http://tedfelix.com/linux/acpid-netlink.html
Group: System/Daemons
-Source: http://tedfelix.com//linux/%{name}-%{version}.tar.gz
+Source: http://tedfelix.com/linux/%{name}-%{version}.tar.gz
Source2: rcacpid
Source3: README.SuSE
Source4: thinkpad_acpi.modprobe
++++++ acpid-2.0.13.tar.gz -> acpid-2.0.14.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acpid-2.0.13/Changelog new/acpid-2.0.14/Changelog
--- old/acpid-2.0.13/Changelog 2011-10-18 01:19:35.000000000 +0200
+++ new/acpid-2.0.14/Changelog 2011-12-09 23:31:36.000000000 +0100
@@ -1,3 +1,34 @@
+* Thu Dec 15 2011 Ted Felix http://www.tedfelix.com
+ - 2.0.14 release
+ - Fixed brace style. (inotify_handler.c acpid.c) (Ted Felix)
+ - Added support for a "K" suffix on event strings to indicate that they
+ may have originated from a keyboard input layer device. This can be
+ used to differentiate between a power switch on the keyboard, and a power
+ switch on the computer's case.
+
+ (connection_list.h inotify_handler.c input_layer.c netlink.c proc.c
+ sock.c) (Ted Felix)
+
+ - Added a pathname to connection along with a find_connection_name().
+ Modifications to process_inotify() to log IN_DELETE events. Additional
+ debugging output.
+
+ These changes were experimentation related to dealing with a ThinkPad
+ suspend problem. They should have no effect on acpid's behavior. They are
+ mainly noticeable as a change in the logging.
+
+ The Problem: When resuming from suspend, the lid switch and power button's
+ /dev/input event files do not trigger an IN_CREATE, so acpid doesn't
+ reconnect to them. Restarting acpid fixes this.
+
+ Tried using IN_DELETE instead of ENODEV to detect the drivers going away.
+ Worked fine for disconnecting/reconnecting a USB keyboard, but not for the
+ ThinkPad suspend problem. I've given up on fixing this as it appears to be
+ a kernel or driver issue.
+
+ (connection_list.c connection_list.h inotify_handler.c input_layer.c
+ netlink.c proc.c sock.c) (Ted Felix)
+
* Tue Nov 15 2011 Ted Felix http://www.tedfelix.com
- 2.0.13 release
- Fix for socket name buffer overflow. (ud_socket.c) (Ted Felix)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acpid-2.0.13/Makefile new/acpid-2.0.14/Makefile
--- old/acpid-2.0.13/Makefile 2011-10-18 01:12:24.000000000 +0200
+++ new/acpid-2.0.14/Makefile 2011-11-15 22:34:09.000000000 +0100
@@ -1,7 +1,7 @@
# Makefile for ACPI daemon
# update these numbers for new releases
-VERSION = 2.0.13
+VERSION = 2.0.14
OPT = -O2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acpid-2.0.13/acpid.c new/acpid-2.0.14/acpid.c
--- old/acpid-2.0.13/acpid.c 2011-10-18 01:06:54.000000000 +0200
+++ new/acpid-2.0.14/acpid.c 2011-12-08 02:59:39.000000000 +0100
@@ -80,16 +80,14 @@
/* open the log */
open_log();
- if (!netlink)
- {
+ if (!netlink) {
/* open the acpi event file in the proc fs */
/* if the open fails, try netlink */
if (open_proc())
netlink = 1;
}
- if (netlink)
- {
+ if (netlink) {
/* open the input layer */
open_input();
@@ -141,8 +139,7 @@
logevents ? "on" : "off");
/* main loop */
- while (1)
- {
+ while (1) {
fd_set readfds;
int nready;
int i;
@@ -165,8 +162,7 @@
acpid_close_dead_clients();
/* for each connection */
- for (i = 0; i <= get_number_of_connections(); ++i)
- {
+ for (i = 0; i <= get_number_of_connections(); ++i) {
int fd;
p = get_connection(i);
@@ -179,8 +175,7 @@
fd = p->fd;
/* if this file descriptor has data waiting */
- if (FD_ISSET(fd, &readfds))
- {
+ if (FD_ISSET(fd, &readfds)) {
/* delegate to this connection's process function */
p->process(fd);
}
@@ -300,8 +295,7 @@
}
for (opt = opts, hlp = opts_help;
opt->name;
- opt++, hlp++)
- {
+ opt++, hlp++) {
fprintf(stderr, " -%c, --%s",
opt->val, opt->name);
size = strlen(opt->name);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acpid-2.0.13/connection_list.c new/acpid-2.0.14/connection_list.c
--- old/acpid-2.0.13/connection_list.c 2011-10-18 00:26:23.000000000 +0200
+++ new/acpid-2.0.14/connection_list.c 2011-12-03 04:29:00.000000000 +0100
@@ -22,6 +22,8 @@
#include
#include
+#include
+#include
#include "acpid.h"
#include "log.h"
@@ -88,8 +90,11 @@
for (i = 0; i < nconnections; ++i) {
/* if the file descriptors match, delete the connection */
if (connection_list[i].fd == fd) {
+ free(connection_list[i].pathname);
+
--nconnections;
connection_list[i] = connection_list[nconnections];
+
break;
}
}
@@ -117,6 +122,27 @@
return &connection_list[i];
}
+ return NULL;
+}
+
+/*---------------------------------------------------------------*/
+
+struct connection *
+find_connection_name(char *pathname)
+{
+ int i;
+
+ /* for each connection */
+ for (i = 0; i < nconnections; ++i) {
+ /* skip null pathnames */
+ if (connection_list[i].pathname == NULL)
+ continue;
+
+ /* if the pathname matches, return the connection */
+ if (strcmp(connection_list[i].pathname, pathname) == 0)
+ return &connection_list[i];
+ }
+
return NULL;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acpid-2.0.13/connection_list.h new/acpid-2.0.14/connection_list.h
--- old/acpid-2.0.13/connection_list.h 2009-11-06 21:42:40.000000000 +0100
+++ new/acpid-2.0.14/connection_list.h 2011-12-16 01:14:37.000000000 +0100
@@ -35,7 +35,16 @@
int fd;
/* process incoming data on the connection */
+ /* ??? suggest passing a pointer to this connection struct */
void (* process)(int fd);
+
+ /* Optional. Used by find_connection_name() to find the connection for a
+ specific file. Set to NULL if not specified. Memory will be freed
+ with free() when connection is deleted. */
+ char *pathname;
+
+ /* 0 indicates this is probably not a keyboard device */
+ int kybd;
};
/* add a connection to the list */
@@ -45,8 +54,15 @@
extern void delete_connection(int fd);
/* find a connection in the list by file descriptor */
+/* ??? This routine is unnecessary. When we call the connection's process
+ * routine, we should pass a pointer to the connection. That will have
+ * the usual fd along with everything else. */
extern struct connection *find_connection(int fd);
+/* find a connection in the list by pathname */
+/* ??? unused last I checked */
+extern struct connection *find_connection_name(char *pathname);
+
/* get the number of connections in the list */
extern int get_number_of_connections();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acpid-2.0.13/inotify_handler.c new/acpid-2.0.14/inotify_handler.c
--- old/acpid-2.0.13/inotify_handler.c 2011-10-18 00:26:51.000000000 +0200
+++ new/acpid-2.0.14/inotify_handler.c 2011-12-08 02:55:03.000000000 +0100
@@ -53,13 +53,11 @@
acpid_log(LOG_DEBUG, "inotify read bytes: %d", bytes);
/* eof is not expected */
- if (bytes == 0)
- {
+ if (bytes == 0) {
acpid_log(LOG_WARNING, "inotify fd eof encountered");
return;
}
- else if (bytes < 0)
- {
+ else if (bytes < 0) {
/* EINVAL means buffer wasn't big enough. See inotify(7). */
acpid_log(LOG_ERR, "inotify read error: %s (%d)",
strerror(errno), errno);
@@ -70,21 +68,43 @@
acpid_log(LOG_DEBUG, "inotify name len: %d", eventbuf.event.len);
- /* if a name is included */
- if (eventbuf.event.len > 0)
- {
- const int dnsize = 256;
- char devname[dnsize];
+ const int dnsize = 256;
+ char devname[dnsize];
+ /* if a name is included */
+ if (eventbuf.event.len > 0) {
/* devname = ACPID_INPUTLAYERDIR + "/" + pevent -> name */
strcpy(devname, ACPID_INPUTLAYERDIR);
strcat(devname, "/");
strncat(devname, eventbuf.event.name, dnsize - strlen(devname) - 1);
+ }
+ /* if this is a create */
+ if (eventbuf.event.mask & IN_CREATE) {
acpid_log(LOG_DEBUG, "inotify about to open: %s", devname);
open_inputfile(devname);
}
+
+ /* if this is a delete */
+ if (eventbuf.event.mask & IN_DELETE) {
+ /* struct connection *c; */
+
+ acpid_log(LOG_DEBUG, "inotify received a delete for: %s", devname);
+
+#if 0
+/* Switching back to the original ENODEV detection scheme. See
+ process_input() in input_layer.c. */
+/* keeping this for future reference */
+ /* search for the event file in the connection list */
+ /* ??? Or should we just have a delete_connection_name()? */
+ c = find_connection_name(devname);
+
+ /* close that connection if found */
+ if (c)
+ delete_connection(c->fd);
+#endif
+ }
}
/*-----------------------------------------------------------------*/
@@ -106,8 +126,8 @@
acpid_log(LOG_DEBUG, "inotify fd: %d", fd);
- /* watch for new files being created in /dev/input */
- wd = inotify_add_watch(fd, ACPID_INPUTLAYERDIR, IN_CREATE);
+ /* watch for files being created or deleted in /dev/input */
+ wd = inotify_add_watch(fd, ACPID_INPUTLAYERDIR, IN_CREATE | IN_DELETE);
if (wd < 0) {
acpid_log(LOG_ERR, "inotify_add_watch() failed: %s (%d)",
@@ -121,6 +141,8 @@
/* add a connection to the list */
c.fd = fd;
c.process = process_inotify;
+ c.pathname = NULL;
+ c.kybd = 0;
add_connection(&c);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acpid-2.0.13/input_layer.c new/acpid-2.0.14/input_layer.c
--- old/acpid-2.0.13/input_layer.c 2011-10-18 00:28:19.000000000 +0200
+++ new/acpid-2.0.14/input_layer.c 2011-12-09 00:01:12.000000000 +0100
@@ -188,6 +188,8 @@
ssize_t nbytes;
const char *str;
static int nerrs;
+ struct connection *c;
+ char str2[100];
nbytes = read(fd, &event, sizeof(event));
@@ -201,7 +203,8 @@
if (errno == EINTR)
return;
if (errno == ENODEV) {
- acpid_log(LOG_WARNING, "input device has been disconnected");
+ acpid_log(LOG_WARNING, "input device has been disconnected, fd %d",
+ fd);
delete_connection(fd);
return;
}
@@ -225,11 +228,27 @@
return;
}
+ c = find_connection(fd);
+
+ /* if we're getting scancodes, we probably have a keyboard */
+ if (event.type == EV_MSC && event.code == MSC_SCAN) {
+ if (c)
+ c->kybd = 1; /* appears to be a keyboard device */
+ }
+
/* convert the event into a string */
str = event_string(event);
/* if this is not an event we care about, bail */
if (str == NULL)
return;
+
+ /* If we suspect this is a keyboard, and we have enough space, tack a
+ * "K" on to the end of the event string. */
+ if (c && c->kybd && strnlen(str, sizeof(str2)) <= sizeof(str2) - 3) {
+ strcpy(str2, str);
+ strcat(str2, " K");
+ str = str2;
+ }
/* if we're locked, don't process the event */
if (locked()) {
@@ -308,18 +327,30 @@
fcntl(fd, F_SETFD, FD_CLOEXEC);
if (fd >= 0) {
+ char evname[256];
+
/* if this file doesn't have events we need, indicate failure */
if (!has_event(fd)) {
close(fd);
return -1;
}
- acpid_log(LOG_DEBUG, "input layer %s "
- "opened successfully", filename);
+ /* get this event file's name for debugging */
+ strcpy(evname, "Unknown");
+ ioctl(fd, EVIOCGNAME(sizeof(evname)), evname);
+
+ acpid_log(LOG_DEBUG, "input layer %s (%s) "
+ "opened successfully, fd %d", filename, evname, fd);
/* add a connection to the list */
c.fd = fd;
c.process = process_input;
+ /* delete_connection() will free */
+ c.pathname = malloc(strlen(filename) + 1);
+ if (c.pathname)
+ strcpy(c.pathname, filename);
+ /* assume not a keyboard until we see a scancode */
+ c.kybd = 0;
add_connection(&c);
return 0; /* success */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acpid-2.0.13/netlink.c new/acpid-2.0.14/netlink.c
--- old/acpid-2.0.13/netlink.c 2011-10-18 00:29:43.000000000 +0200
+++ new/acpid-2.0.14/netlink.c 2011-12-08 01:34:42.000000000 +0100
@@ -233,6 +233,8 @@
/* add a connection to the list */
c.fd = rth.fd;
c.process = process_netlink;
+ c.pathname = NULL;
+ c.kybd = 0;
add_connection(&c);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acpid-2.0.13/proc.c new/acpid-2.0.14/proc.c
--- old/acpid-2.0.13/proc.c 2011-10-18 00:27:39.000000000 +0200
+++ new/acpid-2.0.14/proc.c 2011-12-08 01:35:09.000000000 +0100
@@ -108,6 +108,8 @@
/* add a connection to the list */
c.fd = fd;
c.process = process_proc;
+ c.pathname = NULL;
+ c.kybd = 0;
add_connection(&c);
return 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/acpid-2.0.13/sock.c new/acpid-2.0.14/sock.c
--- old/acpid-2.0.13/sock.c 2011-10-18 00:27:54.000000000 +0200
+++ new/acpid-2.0.14/sock.c 2011-12-08 01:35:28.000000000 +0100
@@ -175,5 +175,7 @@
/* add a connection to the list */
c.fd = fd;
c.process = process_sock;
+ c.pathname = NULL;
+ c.kybd = 0;
add_connection(&c);
}
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org