]> git.pld-linux.org Git - packages/systemd.git/blob - udev-uClibc.patch
69012f326d8f3a1ef83df73f991967b375c585f9
[packages/systemd.git] / udev-uClibc.patch
1 diff -ur udev-150/extras/ata_id/ata_id.c udev-150-uclibc/extras/ata_id/ata_id.c
2 --- udev-150/extras/ata_id/ata_id.c     2009-12-08 18:43:09.000000000 +0100
3 +++ udev-150-uclibc/extras/ata_id/ata_id.c      2010-01-19 17:10:19.000000000 +0100
4 @@ -168,7 +168,11 @@
5         uint16_t *p;
6  
7         p = (uint16_t *) identify;
8 +#ifdef __UCLIBC__
9 +       p[offset_words] = __le16_to_cpu (p[offset_words]);
10 +#else
11         p[offset_words] = le16toh (p[offset_words]);
12 +#endif
13  }
14  
15  /**
16 diff -ur udev-150/udev/udevadm-info.c udev-150-uclibc/udev/udevadm-info.c
17 --- udev-150/udev/udevadm-info.c        2009-12-24 20:40:34.000000000 +0100
18 +++ udev-150-uclibc/udev/udevadm-info.c 2010-01-19 17:47:00.000000000 +0100
19 @@ -200,8 +200,14 @@
20         return 0;
21  }
22  
23 +#ifdef __UCLIBC__
24 +static void cleanup_dir(DIR *dir, char *dirname, mode_t mask, int depth)
25 +{
26 +       char filename[UTIL_PATH_SIZE];
27 +#else
28  static void cleanup_dir(DIR *dir, mode_t mask, int depth)
29  {
30 +#endif
31         struct dirent *dent;
32  
33         if (depth <= 0)
34 @@ -212,7 +215,12 @@
35  
36                 if (dent->d_name[0] == '.')
37                         continue;
38 +#ifdef __UCLIBC__
39 +               util_strscpyl(filename, sizeof(filename), dirname, "/", dent->d_name, NULL);
40 +               if (lstat(filename, &stats) != 0)
41 +#else
42                 if (fstatat(dirfd(dir), dent->d_name, &stats, AT_SYMLINK_NOFOLLOW) != 0)
43 +#endif
44                         continue;
45                 if ((stats.st_mode & mask) != 0)
46                         continue;
47 @@ -229,7 +232,11 @@
48  
49                         dir2 = fdopendir(openat(dirfd(dir), dent->d_name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC));
50                         if (dir2 != NULL) {
51 +#ifdef __UCLIBC__
52 +                               cleanup_dir(dir2, filename, mask, depth-1);
53 +#else
54                                 cleanup_dir(dir2, mask, depth-1);
55 +#endif
56                                 closedir(dir2);
57                         }
58                         unlinkat(dirfd(dir), dent->d_name, AT_REMOVEDIR);
59 @@ -250,35 +257,55 @@
60         util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/data", NULL);
61         dir = opendir(filename);
62         if (dir != NULL) {
63 +#ifdef __UCLIBC__
64 +               cleanup_dir(dir, filename, S_ISVTX, 1);
65 +#else
66                 cleanup_dir(dir, S_ISVTX, 1);
67 +#endif
68                 closedir(dir);
69         }
70  
71         util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/links", NULL);
72         dir = opendir(filename);
73         if (dir != NULL) {
74 +#ifdef __UCLIBC__
75 +               cleanup_dir(dir, filename, 0, 2);
76 +#else
77                 cleanup_dir(dir, 0, 2);
78 +#endif
79                 closedir(dir);
80         }
81  
82         util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/tags", NULL);
83         dir = opendir(filename);
84         if (dir != NULL) {
85 +#ifdef __UCLIBC__
86 +               cleanup_dir(dir, filename, 0, 2);
87 +#else
88                 cleanup_dir(dir, 0, 2);
89 +#endif
90                 closedir(dir);
91         }
92  
93         util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/watch", NULL);
94         dir = opendir(filename);
95         if (dir != NULL) {
96 +#ifdef __UCLIBC__
97 +               cleanup_dir(dir, filename, 0, 1);
98 +#else
99                 cleanup_dir(dir, 0, 1);
100 +#endif
101                 closedir(dir);
102         }
103  
104         util_strscpyl(filename, sizeof(filename), udev_get_run_path(udev), "/firmware-missing", NULL);
105         dir = opendir(filename);
106         if (dir != NULL) {
107 +#ifdef __UCLIBC__
108 +               cleanup_dir(dir, filename, 0, 1);
109 +#else
110                 cleanup_dir(dir, 0, 1);
111 +#endif
112                 closedir(dir);
113         }
114  }
115 --- udev-168/udev/udev-event.c.orig     2011-04-21 14:05:13.000000000 +0200
116 +++ udev-168/udev/udev-event.c  2011-04-26 01:09:16.813273489 +0200
117 @@ -508,12 +508,19 @@
118         if (fd_stdout < 0 && fd_stderr < 0)
119                 return 0;
120  
121 +#ifdef __UCLIBC__
122 +       fd_ep = epoll_create(1);
123 +#else
124         fd_ep = epoll_create1(EPOLL_CLOEXEC);
125 +#endif
126         if (fd_ep < 0) {
127                 err = -errno;
128                 err(udev, "error creating epoll fd: %m\n");
129                 goto out;
130         }
131 +#ifdef __UCLIBC__
132 +       fcntl(fd_ep, F_SETFD, FD_CLOEXEC);
133 +#endif
134  
135         if (fd_stdout >= 0) {
136                 memset(&ep_outpipe, 0, sizeof(struct epoll_event));
137 @@ -698,9 +698,11 @@
138                                 } else if (WIFSTOPPED(status)) {
139                                         err(udev, "'%s' [%u] stopped\n", cmd, pid);
140                                         err = -1;
141 +#ifdef WIFCONTINUED
142                                 } else if (WIFCONTINUED(status)) {
143                                         err(udev, "'%s' [%u] continued\n", cmd, pid);
144                                         err = -1;
145 +#endif
146                                 } else {
147                                         err(udev, "'%s' [%u] exit with status 0x%04x\n", cmd, pid, status);
148                                         err = -1;
149 @@ -759,18 +759,34 @@
150  
151         /* pipes from child to parent */
152         if (result != NULL || udev_get_log_priority(udev) >= LOG_INFO) {
153 +#ifdef __UCLIBC__
154 +               if (pipe(outpipe) != 0) {
155 +#else
156                 if (pipe2(outpipe, O_NONBLOCK) != 0) {
157 +#endif
158                         err = -errno;
159                         err(udev, "pipe failed: %m\n");
160                         goto out;
161                 }
162 +#ifdef __UCLIBC__
163 +               fcntl(outpipe[0], F_SETFL, O_NONBLOCK);
164 +               fcntl(outpipe[1], F_SETFL, O_NONBLOCK);
165 +#endif
166         }
167         if (udev_get_log_priority(udev) >= LOG_INFO) {
168 +#ifdef __UCLIBC__
169 +               if (pipe(errpipe) != 0) {
170 +#else
171                 if (pipe2(errpipe, O_NONBLOCK) != 0) {
172 +#endif
173                         err = -errno;
174                         err(udev, "pipe failed: %m\n");
175                         goto out;
176                 }
177 +#ifdef __UCLIBC__
178 +               fcntl(errpipe[0], F_SETFL, O_NONBLOCK);
179 +               fcntl(errpipe[1], F_SETFL, O_NONBLOCK);
180 +#endif
181         }
182  
183         /* allow programs in /lib/udev/ to be called without the path */
184 --- udev-168/udev/udevd.c.orig  2011-04-21 14:05:13.000000000 +0200
185 +++ udev-168/udev/udevd.c       2011-04-26 01:13:39.984103209 +0200
186 @@ -256,12 +256,19 @@
187                         goto out;
188                 }
189  
190 +#ifdef __UCLIBC__
191 +               fd_ep = epoll_create(1);
192 +#else
193                 fd_ep = epoll_create1(EPOLL_CLOEXEC);
194 +#endif
195                 if (fd_ep < 0) {
196                         err(udev, "error creating epoll fd: %m\n");
197                         rc = 3;
198                         goto out;
199                 }
200 +#ifdef __UCLIBC__
201 +               fcntl(fd_ep, F_SETFD, FD_CLOEXEC);
202 +#endif
203  
204                 memset(&ep_signal, 0, sizeof(struct epoll_event));
205                 ep_signal.events = EPOLLIN;
206 @@ -826,8 +826,10 @@
207                                             pid, WTERMSIG(status), strsignal(WTERMSIG(status)));
208                                 } else if (WIFSTOPPED(status)) {
209                                         err(udev, "worker [%u] stopped\n", pid);
210 +#ifdef WIFCONTINUED
211                                 } else if (WIFCONTINUED(status)) {
212                                         err(udev, "worker [%u] continued\n", pid);
213 +#endif
214                                 } else {
215                                         err(udev, "worker [%u] exit with status 0x%04x\n", pid, status);
216                                 }
217 @@ -1547,11 +1554,18 @@
218         ep_worker.events = EPOLLIN;
219         ep_worker.data.fd = fd_worker;
220  
221 +#ifdef __UCLIBC__
222 +       fd_ep = epoll_create(1);
223 +#else
224         fd_ep = epoll_create1(EPOLL_CLOEXEC);
225 +#endif
226         if (fd_ep < 0) {
227                 err(udev, "error creating epoll fd: %m\n");
228                 goto exit;
229         }
230 +#ifdef __UCLIBC__
231 +       fcntl(fd_ep, F_SETFD, FD_CLOEXEC);
232 +#endif
233         if (epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_ctrl, &ep_ctrl) < 0 ||
234             epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_inotify, &ep_inotify) < 0 ||
235             epoll_ctl(fd_ep, EPOLL_CTL_ADD, fd_signal, &ep_signal) < 0 ||
236 --- udev-168/libudev/libudev-ctrl.c.orig        2011-04-26 01:20:36.150103207 +0200
237 +++ udev-168/libudev/libudev-ctrl.c     2011-04-26 01:21:48.940103224 +0200
238 @@ -15,6 +15,7 @@
239  #include <stddef.h>
240  #include <string.h>
241  #include <unistd.h>
242 +#include <fcntl.h>
243  #include <sys/types.h>
244  #include <sys/poll.h>
245  #include <sys/socket.h>
246 @@ -185,13 +185,21 @@
247         conn->refcount = 1;
248         conn->uctrl = uctrl;
249  
250 +#ifdef __UCLIBC__
251 +       conn->sock = accept(uctrl->sock, NULL, NULL);
252 +#else
253         conn->sock = accept4(uctrl->sock, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK);
254 +#endif
255         if (conn->sock < 0) {
256                 if (errno != EINTR)
257                         err(uctrl->udev, "unable to receive ctrl connection: %m\n");
258                 free(conn);
259                 return NULL;
260         }
261 +#ifdef __UCLIBC__
262 +       fcntl(conn->sock, F_SETFD, FD_CLOEXEC);
263 +       fcntl(conn->sock, F_SETFL, O_NONBLOCK);
264 +#endif
265  
266         /* enable receiving of the sender credentials */
267         setsockopt(conn->sock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on));
268 --- udev-168/udev/udevadm-monitor.c.orig        2011-04-26 01:53:44.361103209 +0200
269 +++ udev-168/udev/udevadm-monitor.c     2011-04-26 01:54:41.946103207 +0200
270 @@ -157,11 +157,18 @@
271         sigaddset(&mask, SIGTERM);
272         sigprocmask(SIG_UNBLOCK, &mask, NULL);
273  
274 +#ifdef __UCLIBC__
275 +       fd_ep = epoll_create(1);
276 +#else
277         fd_ep = epoll_create1(EPOLL_CLOEXEC);
278 +#endif
279         if (fd_ep < 0) {
280                 err(udev, "error creating epoll fd: %m\n");
281                 goto out;
282         }
283 +#ifdef __UCLIBC__
284 +       fcntl(fd_ep, F_SETFD, FD_CLOEXEC);
285 +#endif
286  
287         printf("monitor will print the received events for:\n");
288         if (print_udev) {
This page took 0.361659 seconds and 2 git commands to generate.