forked from mirrors/nixpkgs
Adding an udev patch for kernels not having the accept4 call. armv5tel 3.0, for example.
svn path=/nixpkgs/trunk/; revision=30053
This commit is contained in:
parent
d2006f51a0
commit
0ccd825d81
|
@ -44,7 +44,8 @@ stdenv.mkDerivation rec {
|
|||
rm -frv $out/share/gtk-doc
|
||||
'';
|
||||
|
||||
patches = [ ./custom-rules.patch ];
|
||||
patches = [ ./custom-rules.patch ] ++
|
||||
stdenv.lib.optional (stdenv.system == "armv5tel-linux") ./pre-accept4-kernel.patch;
|
||||
|
||||
meta = {
|
||||
homepage = http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html;
|
||||
|
|
43
pkgs/os-specific/linux/udev/pre-accept4-kernel.patch
Normal file
43
pkgs/os-specific/linux/udev/pre-accept4-kernel.patch
Normal file
|
@ -0,0 +1,43 @@
|
|||
From:
|
||||
https://github.com/archlinuxarm/PKGBUILDs/blob/master/core/udev-oxnas/pre-accept4-kernel.patch
|
||||
|
||||
diff -urN a/udev/udev-ctrl.c b/udev/udev-ctrl.c
|
||||
--- a/udev/udev-ctrl.c 2011-10-09 17:10:32.000000000 -0600
|
||||
+++ b/udev/udev-ctrl.c 2011-10-25 15:11:09.000000000 -0600
|
||||
@@ -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>
|
||||
@@ -182,6 +183,7 @@
|
||||
struct ucred ucred;
|
||||
socklen_t slen;
|
||||
const int on = 1;
|
||||
+ int flgs;
|
||||
|
||||
conn = calloc(1, sizeof(struct udev_ctrl_connection));
|
||||
if (conn == NULL)
|
||||
@@ -189,13 +191,19 @@
|
||||
conn->refcount = 1;
|
||||
conn->uctrl = uctrl;
|
||||
|
||||
- conn->sock = accept4(uctrl->sock, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK);
|
||||
+// conn->sock = accept4(uctrl->sock, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK);
|
||||
+ conn->sock = accept(uctrl->sock, NULL, NULL);
|
||||
if (conn->sock < 0) {
|
||||
if (errno != EINTR)
|
||||
err(uctrl->udev, "unable to receive ctrl connection: %m\n");
|
||||
goto err;
|
||||
}
|
||||
|
||||
+// Since we don't have accept4
|
||||
+ flgs = fcntl(conn->sock, F_GETFL, NULL);
|
||||
+ if(flgs >= 0) fcntl(conn->sock, F_SETFL, flgs | O_NONBLOCK);
|
||||
+ fcntl(conn->sock, F_SETFD, FD_CLOEXEC);
|
||||
+
|
||||
/* check peer credential of connection */
|
||||
slen = sizeof(ucred);
|
||||
if (getsockopt(conn->sock, SOL_SOCKET, SO_PEERCRED, &ucred, &slen) < 0) {
|
Loading…
Reference in a new issue