]> git.pld-linux.org Git - packages/systemd.git/blobdiff - udev-uClibc.patch
- rel 1
[packages/systemd.git] / udev-uClibc.patch
index 95cd47547ed82ae6b95823afd45cf9e1ff5939af..6d347e9e5159904b03b5ea4eb5d511b6690e7ca8 100644 (file)
-diff -ur udev-150/extras/ata_id/ata_id.c udev-150-uclibc/extras/ata_id/ata_id.c
---- udev-150/extras/ata_id/ata_id.c    2009-12-08 18:43:09.000000000 +0100
-+++ udev-150-uclibc/extras/ata_id/ata_id.c     2010-01-19 17:10:19.000000000 +0100
+diff -ur udev-150/src/ata_id/ata_id.c udev-150-uclibc/src/ata_id/ata_id.c
+--- udev-150/src/ata_id/ata_id.c        2009-12-08 18:43:09.000000000 +0100
++++ udev-150-uclibc/src/ata_id/ata_id.c        2010-01-19 17:10:19.000000000 +0100
 @@ -168,7 +168,11 @@
-       uint16_t *p;
+         uint16_t *p;
  
-       p = (uint16_t *) identify;
+         p = (uint16_t *) identify;
 +#ifdef __UCLIBC__
-+      p[offset_words] = __le16_to_cpu (p[offset_words]);
++        p[offset_words] = __le16_to_cpu (p[offset_words]);
 +#else
-       p[offset_words] = le16toh (p[offset_words]);
+         p[offset_words] = le16toh (p[offset_words]);
 +#endif
  }
  
  /**
-diff -ur udev-150/udev/udevadm-info.c udev-150-uclibc/udev/udevadm-info.c
---- udev-150/udev/udevadm-info.c       2009-12-24 20:40:34.000000000 +0100
-+++ udev-150-uclibc/udev/udevadm-info.c        2010-01-19 17:47:00.000000000 +0100
-@@ -43,6 +43,9 @@
-                       struct stat statbuf;
-                       const char *value;
-                       size_t len;
-+#ifdef __UCLIBC__
-+                      char filename[UTIL_PATH_SIZE];
-+#endif
-                       if (dent->d_name[0] == '.')
-                               continue;
-@@ -52,7 +55,12 @@
-                       if (strcmp(dent->d_name, "dev") == 0)
-                               continue;
-+#ifdef __UCLIBC__
-+                      util_strscpyl(filename, sizeof(filename), udev_device_get_syspath(device), "/", dent->d_name, NULL);
-+                      if (lstat(filename, &statbuf) != 0)
-+#else
-                       if (fstatat(dirfd(dir), dent->d_name, &statbuf, AT_SYMLINK_NOFOLLOW) != 0)
-+#endif
-                               continue;
-                       if (S_ISLNK(statbuf.st_mode))
-                               continue;
-diff -ur udev-150/udev/udev-node.c udev-150-uclibc/udev/udev-node.c
---- udev-150/udev/udev-node.c  2009-12-18 21:25:07.000000000 +0100
-+++ udev-150-uclibc/udev/udev-node.c   2010-01-19 17:30:10.000000000 +0100
-@@ -178,7 +178,9 @@
-                                       info(udev, "preserve already existing symlink '%s' to '%s'\n",
-                                            slink, target);
-                                       udev_selinux_lsetfilecon(udev, slink, S_IFLNK);
-+#if !defined(__UCLIBC__) && !defined(__dietlibc__)
-                                       lutimes(slink, NULL);
-+#endif
-                                       goto exit;
-                               }
-                       }
+diff -ur udev-150/src/udevadm-info.c udev-150-uclibc/src/udevadm-info.c
+--- udev-150/src/udevadm-info.c        2009-12-24 20:40:34.000000000 +0100
++++ udev-150-uclibc/src/udevadm-info.c        2010-01-19 17:47:00.000000000 +0100
+@@ -200,8 +200,14 @@
+         return 0;
+ }
++#ifdef __UCLIBC__
++static void cleanup_dir(DIR *dir, char *dirname, mode_t mask, int depth)
++{
++        char filename[UTIL_PATH_SIZE];
++#else
+ static void cleanup_dir(DIR *dir, mode_t mask, int depth)
+ {
++#endif
+         struct dirent *dent;
+         if (depth <= 0)
+@@ -212,7 +215,12 @@
+                 if (dent->d_name[0] == '.')
+                         continue;
++#ifdef __UCLIBC__
++                util_strscpyl(filename, sizeof(filename), dirname, "/", dent->d_name, NULL);
++                if (lstat(filename, &stats) != 0)
++#else
+                 if (fstatat(dirfd(dir), dent->d_name, &stats, AT_SYMLINK_NOFOLLOW) != 0)
++#endif
+                         continue;
+                 if ((stats.st_mode & mask) != 0)
+                         continue;
+@@ -229,7 +232,11 @@
+                         dir2 = fdopendir(openat(dirfd(dir), dent->d_name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC));
+                         if (dir2 != NULL) {
++#ifdef __UCLIBC__
++                                cleanup_dir(dir2, filename, mask, depth-1);
++#else
+                                 cleanup_dir(dir2, mask, depth-1);
++#endif
+                                 closedir(dir2);
+                         }
+                         unlinkat(dirfd(dir), dent->d_name, AT_REMOVEDIR);
+@@ -250,35 +257,55 @@
+         util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/data", NULL);
+         dir = opendir(filename);
+         if (dir != NULL) {
++#ifdef __UCLIBC__
++                cleanup_dir(dir, filename, S_ISVTX, 1);
++#else
+                 cleanup_dir(dir, S_ISVTX, 1);
++#endif
+                 closedir(dir);
+         }
+         util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/links", NULL);
+         dir = opendir(filename);
+         if (dir != NULL) {
++#ifdef __UCLIBC__
++                cleanup_dir(dir, filename, 0, 2);
++#else
+                 cleanup_dir(dir, 0, 2);
++#endif
+                 closedir(dir);
+         }
+         util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/tags", NULL);
+         dir = opendir(filename);
+         if (dir != NULL) {
++#ifdef __UCLIBC__
++                cleanup_dir(dir, filename, 0, 2);
++#else
+                 cleanup_dir(dir, 0, 2);
++#endif
+                 closedir(dir);
+         }
+         util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/watch", NULL);
+         dir = opendir(filename);
+         if (dir != NULL) {
++#ifdef __UCLIBC__
++                cleanup_dir(dir, filename, 0, 1);
++#else
+                 cleanup_dir(dir, 0, 1);
++#endif
+                 closedir(dir);
+         }
+         util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/firmware-missing", NULL);
+         dir = opendir(filename);
+         if (dir != NULL) {
++#ifdef __UCLIBC__
++                cleanup_dir(dir, filename, 0, 1);
++#else
+                 cleanup_dir(dir, 0, 1);
++#endif
+                 closedir(dir);
+         }
+ }
+--- udev-168/src/udev-event.c.orig        2011-04-21 14:05:13.000000000 +0200
++++ udev-168/src/udev-event.c        2011-04-26 01:09:16.813273489 +0200
+@@ -508,11 +508,18 @@
+         if (fd_stdout < 0 && fd_stderr < 0)
+                 return;
++#ifdef __UCLIBC__
++        fd_ep = epoll_create(1);
++#else
+         fd_ep = epoll_create1(EPOLL_CLOEXEC);
++#endif
+         if (fd_ep < 0) {
+                 err(udev, "error creating epoll fd: %m\n");
+                 goto out;
+         }
++#ifdef __UCLIBC__
++        fcntl(fd_ep, F_SETFD, FD_CLOEXEC);
++#endif
+         if (fd_stdout >= 0) {
+                 memset(&ep_outpipe, 0, sizeof(struct epoll_event));
+@@ -698,9 +698,11 @@
+                                 } else if (WIFSTOPPED(status)) {
+                                         err(udev, "'%s' [%u] stopped\n", cmd, pid);
+                                         err = -1;
++#ifdef WIFCONTINUED
+                                 } else if (WIFCONTINUED(status)) {
+                                         err(udev, "'%s' [%u] continued\n", cmd, pid);
+                                         err = -1;
++#endif
+                                 } else {
+                                         err(udev, "'%s' [%u] exit with status 0x%04x\n", cmd, pid, status);
+                                         err = -1;
+@@ -759,18 +759,34 @@
+         /* pipes from child to parent */
+         if (result != NULL || udev_get_log_priority(udev) >= LOG_INFO) {
++#ifdef __UCLIBC__
++                if (pipe(outpipe) != 0) {
++#else
+                 if (pipe2(outpipe, O_NONBLOCK) != 0) {
++#endif
+                         err = -errno;
+                         err(udev, "pipe failed: %m\n");
+                         goto out;
+                 }
++#ifdef __UCLIBC__
++                fcntl(outpipe[0], F_SETFL, O_NONBLOCK);
++                fcntl(outpipe[1], F_SETFL, O_NONBLOCK);
++#endif
+         }
+         if (udev_get_log_priority(udev) >= LOG_INFO) {
++#ifdef __UCLIBC__
++                if (pipe(errpipe) != 0) {
++#else
+                 if (pipe2(errpipe, O_NONBLOCK) != 0) {
++#endif
+                         err = -errno;
+                         err(udev, "pipe failed: %m\n");
+                         goto out;
+                 }
++#ifdef __UCLIBC__
++                fcntl(errpipe[0], F_SETFL, O_NONBLOCK);
++                fcntl(errpipe[1], F_SETFL, O_NONBLOCK);
++#endif
+         }
+         /* allow programs in /lib/src/ to be called without the path */
+--- udev-168/src/udevd.c.orig        2011-04-21 14:05:13.000000000 +0200
++++ udev-168/src/udevd.c        2011-04-26 01:13:39.984103209 +0200
+@@ -256,12 +256,19 @@
+                         goto out;
+                 }
++#ifdef __UCLIBC__
++                fd_ep = epoll_create(1);
++#else
+                 fd_ep = epoll_create1(EPOLL_CLOEXEC);
++#endif
+                 if (fd_ep < 0) {
+                         err(udev, "error creating epoll fd: %m\n");
+                         rc = 3;
+                         goto out;
+                 }
++#ifdef __UCLIBC__
++                fcntl(fd_ep, F_SETFD, FD_CLOEXEC);
++#endif
+                 memset(&ep_signal, 0, sizeof(struct epoll_event));
+                 ep_signal.events = EPOLLIN;
+@@ -826,8 +826,10 @@
+                                             pid, WTERMSIG(status), strsignal(WTERMSIG(status)));
+                                 } else if (WIFSTOPPED(status)) {
+                                         err(udev, "worker [%u] stopped\n", pid);
++#ifdef WIFCONTINUED
+                                 } else if (WIFCONTINUED(status)) {
+                                         err(udev, "worker [%u] continued\n", pid);
++#endif
+                                 } else {
+                                         err(udev, "worker [%u] exit with status 0x%04x\n", pid, status);
+                                 }
+@@ -1547,11 +1554,18 @@
+         ep_worker.events = EPOLLIN;
+         ep_worker.data.fd = fd_worker;
++#ifdef __UCLIBC__
++        fd_ep = epoll_create(1);
++#else
+         fd_ep = epoll_create1(EPOLL_CLOEXEC);
++#endif
+         if (fd_ep < 0) {
+                 err(udev, "error creating epoll fd: %m\n");
+                 goto exit;
+         }
++#ifdef __UCLIBC__
++        fcntl(fd_ep, F_SETFD, FD_CLOEXEC);
++#endif
+         if (epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_ctrl, &ep_ctrl) < 0 ||
+             epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_inotify, &ep_inotify) < 0 ||
+             epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_signal, &ep_signal) < 0 ||
+--- udev-172/src/udev-ctrl.c.orig        2011-04-26 01:20:36.150103207 +0200
++++ udev-172/src/udev-ctrl.c        2011-04-26 01:21:48.940103224 +0200
+@@ -15,6 +15,7 @@
+ #include <stddef.h>
+ #include <string.h>
+ #include <unistd.h>
++#include <fcntl.h>
+ #include <sys/types.h>
+ #include <sys/poll.h>
+ #include <sys/socket.h>
+@@ -187,13 +187,22 @@
+         conn->refcount = 1;
+         conn->uctrl = uctrl;
++#ifdef __UCLIBC__
++        conn->sock = accept(uctrl->sock, NULL, NULL);
++#else
+         conn->sock = accept4(uctrl->sock, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK);
++#endif
+         if (conn->sock < 0) {
+                 if (errno != EINTR)
+                         err(uctrl->udev, "unable to receive ctrl connection: %m\n");
+                 goto err;
+         }
++#ifdef __UCLIBC__
++        fcntl(conn->sock, F_SETFD, FD_CLOEXEC);
++        fcntl(conn->sock, F_SETFL, O_NONBLOCK);
++#endif
++
+         /* check peer credential of connection */
+         slen = sizeof(ucred);
+         if (getsockopt(conn->sock, SOL_SOCKET, SO_PEERCRED, &ucred, &slen) < 0) {
+--- udev-168/src/udevadm-monitor.c.orig        2011-04-26 01:53:44.361103209 +0200
++++ udev-168/src/udevadm-monitor.c        2011-04-26 01:54:41.946103207 +0200
+@@ -157,11 +157,18 @@
+         sigaddset(&mask, SIGTERM);
+         sigprocmask(SIG_UNBLOCK, &mask, NULL);
++#ifdef __UCLIBC__
++        fd_ep = epoll_create(1);
++#else
+         fd_ep = epoll_create1(EPOLL_CLOEXEC);
++#endif
+         if (fd_ep < 0) {
+                 err(udev, "error creating epoll fd: %m\n");
+                 goto out;
+         }
++#ifdef __UCLIBC__
++        fcntl(fd_ep, F_SETFD, FD_CLOEXEC);
++#endif
+         printf("monitor will print the received events for:\n");
+         if (print_udev) {
This page took 0.035976 seconds and 4 git commands to generate.