From: Kay Sievers Date: Fri, 16 Feb 2007 12:57:08 +0000 (+0100) Subject: add (subsystem) to udevmonitor output X-Git-Tag: 174~2065 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=8f4bc5f1df8699761bdc09b954fc6c86aee0ce89 add (subsystem) to udevmonitor output --- diff --git a/udevmonitor.c b/udevmonitor.c index 35c3721f7..89053185e 100644 --- a/udevmonitor.c +++ b/udevmonitor.c @@ -106,6 +106,26 @@ static void asmlinkage sig_handler(int signum) udev_exit = 1; } +static const char *search_key(const char *searchkey, const char *buf, size_t buflen) +{ + size_t bufpos = 0; + size_t searchkeylen = strlen(searchkey); + + while (bufpos < buflen) { + const char *key; + int keylen; + + key = &buf[bufpos]; + keylen = strlen(key); + if (keylen == 0) + break; + if ((strncmp(searchkey, key, searchkeylen) == 0) && key[searchkeylen] == '=') + return &key[searchkeylen + 1]; + bufpos += keylen + 1; + } + return NULL; +} + int main(int argc, char *argv[]) { struct sigaction act; @@ -156,10 +176,14 @@ int main(int argc, char *argv[]) while (!udev_exit) { char buf[UEVENT_BUFFER_SIZE*2]; ssize_t buflen; + ssize_t bufpos; + ssize_t keys; int fdcount; struct timeval tv; struct timezone tz; char timestr[64]; + const char *source = NULL; + const char *devpath, *action, *subsys; buflen = 0; FD_ZERO(&readfds); @@ -183,33 +207,35 @@ int main(int argc, char *argv[]) if ((uevent_netlink_sock >= 0) && FD_ISSET(uevent_netlink_sock, &readfds)) { buflen = recv(uevent_netlink_sock, &buf, sizeof(buf), 0); - if (buflen <= 0) { + if (buflen <= 0) { fprintf(stderr, "error receiving uevent message: %s\n", strerror(errno)); continue; } - printf("UEVENT[%s] %s\n", timestr, buf); + source = "UEVENT"; } if ((udev_monitor_sock >= 0) && FD_ISSET(udev_monitor_sock, &readfds)) { buflen = recv(udev_monitor_sock, &buf, sizeof(buf), 0); - if (buflen <= 0) { + if (buflen <= 0) { fprintf(stderr, "error receiving udev message: %s\n", strerror(errno)); continue; } - printf("UDEV [%s] %s\n", timestr, buf); + source = "UDEV "; } if (buflen == 0) continue; + keys = strlen(buf) + 1; /* start of payload */ + devpath = search_key("DEVPATH", &buf[keys], buflen); + action = search_key("ACTION", &buf[keys], buflen); + subsys = search_key("SUBSYSTEM", &buf[keys], buflen); + printf("%s[%s] %-8s %s (%s)\n", source, timestr, action, devpath, subsys); + /* print environment */ + bufpos = keys; if (env) { - size_t bufpos; - - /* start of payload */ - bufpos = strlen(buf) + 1; - - while (bufpos < (size_t)buflen) { + while (bufpos < buflen) { int keylen; char *key;