diff options
author | Matthew Bauer <mjbauer95@gmail.com> | 2019-02-09 12:14:06 -0500 |
---|---|---|
committer | Matthew Bauer <mjbauer95@gmail.com> | 2019-02-09 12:14:06 -0500 |
commit | 5c09d977c794d9243ddac17f6c429b5432431f8f (patch) | |
tree | 1acbd7e7f0c01546d955d47c6a8fddfec8e632b6 /pkgs/os-specific | |
parent | 21d991b1fd78214023551a0dada17b129cbd5cd5 (diff) | |
parent | 18d059a4ac001fbaa9c2abc750a2830a52e1dae5 (diff) | |
download | nixlib-5c09d977c794d9243ddac17f6c429b5432431f8f.tar nixlib-5c09d977c794d9243ddac17f6c429b5432431f8f.tar.gz nixlib-5c09d977c794d9243ddac17f6c429b5432431f8f.tar.bz2 nixlib-5c09d977c794d9243ddac17f6c429b5432431f8f.tar.lz nixlib-5c09d977c794d9243ddac17f6c429b5432431f8f.tar.xz nixlib-5c09d977c794d9243ddac17f6c429b5432431f8f.tar.zst nixlib-5c09d977c794d9243ddac17f6c429b5432431f8f.zip |
Merge remote-tracking branch 'origin/master' into staging
Diffstat (limited to 'pkgs/os-specific')
-rw-r--r-- | pkgs/os-specific/linux/batman-adv/alfred.nix | 4 | ||||
-rw-r--r-- | pkgs/os-specific/linux/batman-adv/batctl.nix | 4 | ||||
-rw-r--r-- | pkgs/os-specific/linux/batman-adv/default.nix | 4 | ||||
-rw-r--r-- | pkgs/os-specific/linux/guvcview/default.nix | 4 | ||||
-rw-r--r-- | pkgs/os-specific/linux/kernel/linux-4.14.nix | 4 | ||||
-rw-r--r-- | pkgs/os-specific/linux/kernel/linux-4.19.nix | 4 | ||||
-rw-r--r-- | pkgs/os-specific/linux/kernel/linux-4.20.nix | 4 | ||||
-rw-r--r-- | pkgs/os-specific/linux/kernel/linux-4.4.nix | 4 | ||||
-rw-r--r-- | pkgs/os-specific/linux/kernel/linux-4.9.nix | 4 | ||||
-rw-r--r-- | pkgs/os-specific/linux/kernel/linux-testing-bcachefs.nix | 8 | ||||
-rw-r--r-- | pkgs/os-specific/linux/kernel/linux-testing.nix | 6 | ||||
-rw-r--r-- | pkgs/os-specific/linux/kernel/patches.nix | 11 | ||||
-rw-r--r-- | pkgs/os-specific/linux/lxc/default.nix | 4 | ||||
-rw-r--r-- | pkgs/os-specific/linux/sdnotify-wrapper/default.nix | 37 | ||||
-rw-r--r-- | pkgs/os-specific/linux/sdnotify-wrapper/sdnotify-wrapper.c | 172 |
15 files changed, 236 insertions, 38 deletions
diff --git a/pkgs/os-specific/linux/batman-adv/alfred.nix b/pkgs/os-specific/linux/batman-adv/alfred.nix index 390b0c9e4b47..1227d22916c9 100644 --- a/pkgs/os-specific/linux/batman-adv/alfred.nix +++ b/pkgs/os-specific/linux/batman-adv/alfred.nix @@ -1,14 +1,14 @@ { stdenv, fetchurl, pkgconfig, gpsd, libcap, libnl }: let - ver = "2018.4"; + ver = "2019.0"; in stdenv.mkDerivation rec { name = "alfred-${ver}"; src = fetchurl { url = "https://downloads.open-mesh.org/batman/releases/batman-adv-${ver}/${name}.tar.gz"; - sha256 = "0n6cw6inkzlgz8p6jcc83npqjmvhxp4qsh2dhbiv88ax3lh9arcd"; + sha256 = "0sml6z90kpchmn61597j7yag97gk59fscz4xjxdfh9zycd3nfsn0"; }; nativeBuildInputs = [ pkgconfig ]; diff --git a/pkgs/os-specific/linux/batman-adv/batctl.nix b/pkgs/os-specific/linux/batman-adv/batctl.nix index 1645fbef49bc..b84338ed258b 100644 --- a/pkgs/os-specific/linux/batman-adv/batctl.nix +++ b/pkgs/os-specific/linux/batman-adv/batctl.nix @@ -1,14 +1,14 @@ { stdenv, fetchurl, pkgconfig, libnl }: let - ver = "2018.4"; + ver = "2019.0"; in stdenv.mkDerivation rec { name = "batctl-${ver}"; src = fetchurl { url = "https://downloads.open-mesh.org/batman/releases/batman-adv-${ver}/${name}.tar.gz"; - sha256 = "0mv2vlzcqfh5yavg2sqncca9iqgxi6llv83wwwsf3d38x2jjff74"; + sha256 = "0cdmb3zkjh8xcsicwyrimwzj8f4x3rjsfzk9im7695pkdw4j2xwr"; }; nativeBuildInputs = [ pkgconfig ]; diff --git a/pkgs/os-specific/linux/batman-adv/default.nix b/pkgs/os-specific/linux/batman-adv/default.nix index 744d42ea9fd4..52ef018cbfeb 100644 --- a/pkgs/os-specific/linux/batman-adv/default.nix +++ b/pkgs/os-specific/linux/batman-adv/default.nix @@ -1,13 +1,13 @@ { stdenv, fetchurl, kernel }: -let base = "batman-adv-2018.4"; in +let base = "batman-adv-2019.0"; in stdenv.mkDerivation rec { name = "${base}-${kernel.version}"; src = fetchurl { url = "http://downloads.open-mesh.org/batman/releases/${base}/${base}.tar.gz"; - sha256 = "0ka80l3ajfzi9plq50m79d2qpm1rlir4js5hy3g1mkj1gnyb801m"; + sha256 = "1h5xxf6nkdhk9dxf3d4fsasmiahy0y7bhlicyhnppgfdf6kxi5ry"; }; nativeBuildInputs = kernel.moduleBuildDependencies; diff --git a/pkgs/os-specific/linux/guvcview/default.nix b/pkgs/os-specific/linux/guvcview/default.nix index 4b9c37686c1c..1afd1078c03e 100644 --- a/pkgs/os-specific/linux/guvcview/default.nix +++ b/pkgs/os-specific/linux/guvcview/default.nix @@ -5,12 +5,12 @@ assert pulseaudioSupport -> libpulseaudio != null; stdenv.mkDerivation rec { - version = "2.0.5"; + version = "2.0.6"; name = "guvcview-${version}"; src = fetchurl { url = "mirror://sourceforge/project/guvcview/source/guvcview-src-${version}.tar.gz"; - sha256 = "a86beb5993a8449ed3cbcc6ec2a238ef0b90138b6cbe2afab4456d37f44c41a0"; + sha256 = "11byyfpkcik7wvf2qic77zjamfr2rhji97dpj1gy2fg1bvpiqf4m"; }; buildInputs = diff --git a/pkgs/os-specific/linux/kernel/linux-4.14.nix b/pkgs/os-specific/linux/kernel/linux-4.14.nix index a63dd96a7b62..78448b4bc389 100644 --- a/pkgs/os-specific/linux/kernel/linux-4.14.nix +++ b/pkgs/os-specific/linux/kernel/linux-4.14.nix @@ -3,7 +3,7 @@ with stdenv.lib; buildLinux (args // rec { - version = "4.14.97"; + version = "4.14.98"; # modDirVersion needs to be x.y.z, will automatically add .0 if needed modDirVersion = if (modDirVersionArg == null) then concatStrings (intersperse "." (take 3 (splitString "." "${version}.0"))) else modDirVersionArg; @@ -13,6 +13,6 @@ buildLinux (args // rec { src = fetchurl { url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz"; - sha256 = "1x25x6scd81npiald8i5ybb5yy3n0dh6x56avm0n5z5bvlqwilld"; + sha256 = "0pqc04ij6qdfhh3rpakas0qc0vqj8mm120z64q9v9vxin5qi20lg"; }; } // (args.argsOverride or {})) diff --git a/pkgs/os-specific/linux/kernel/linux-4.19.nix b/pkgs/os-specific/linux/kernel/linux-4.19.nix index 05cfbb781734..b88196754a19 100644 --- a/pkgs/os-specific/linux/kernel/linux-4.19.nix +++ b/pkgs/os-specific/linux/kernel/linux-4.19.nix @@ -3,7 +3,7 @@ with stdenv.lib; buildLinux (args // rec { - version = "4.19.19"; + version = "4.19.20"; # modDirVersion needs to be x.y.z, will automatically add .0 if needed modDirVersion = if (modDirVersionArg == null) then concatStrings (intersperse "." (take 3 (splitString "." "${version}.0"))) else modDirVersionArg; @@ -13,6 +13,6 @@ buildLinux (args // rec { src = fetchurl { url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz"; - sha256 = "1gb98s14w8gzbgd9r6hmppal92lqfjhf1s1rn1p6k7a7f3vcmbwr"; + sha256 = "1904zamsxxzm0qbjv9mprxamhs7a3dymxl0yfj777gylv9v2fzfw"; }; } // (args.argsOverride or {})) diff --git a/pkgs/os-specific/linux/kernel/linux-4.20.nix b/pkgs/os-specific/linux/kernel/linux-4.20.nix index 9f2c3719f9fc..d3fce3b3ec07 100644 --- a/pkgs/os-specific/linux/kernel/linux-4.20.nix +++ b/pkgs/os-specific/linux/kernel/linux-4.20.nix @@ -3,7 +3,7 @@ with stdenv.lib; buildLinux (args // rec { - version = "4.20.6"; + version = "4.20.7"; # modDirVersion needs to be x.y.z, will automatically add .0 if needed modDirVersion = if (modDirVersionArg == null) then concatStrings (intersperse "." (take 3 (splitString "." "${version}.0"))) else modDirVersionArg; @@ -13,6 +13,6 @@ buildLinux (args // rec { src = fetchurl { url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz"; - sha256 = "09fzspfs1hhbqgb3fh54q1i5jmakmxb1y180m5dn1zqwsxayx1a1"; + sha256 = "0ivdz7kdc69n86rd489dhi4srhr4k3fic5vabf61l3syzqx7s3al"; }; } // (args.argsOverride or {})) diff --git a/pkgs/os-specific/linux/kernel/linux-4.4.nix b/pkgs/os-specific/linux/kernel/linux-4.4.nix index 335abe645beb..8edd744ba66c 100644 --- a/pkgs/os-specific/linux/kernel/linux-4.4.nix +++ b/pkgs/os-specific/linux/kernel/linux-4.4.nix @@ -1,11 +1,11 @@ { stdenv, buildPackages, fetchurl, perl, buildLinux, ... } @ args: buildLinux (args // rec { - version = "4.4.172"; + version = "4.4.174"; extraMeta.branch = "4.4"; src = fetchurl { url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz"; - sha256 = "1yrrwvj260sqnn8qh7a2b31d31jjnap6qh2f6jhdy275q6rickgv"; + sha256 = "0fdsxfwhn1xqic56c4aafxw1rdqy7s4w0inmkhcnh98lj3fi2lmy"; }; } // (args.argsOverride or {})) diff --git a/pkgs/os-specific/linux/kernel/linux-4.9.nix b/pkgs/os-specific/linux/kernel/linux-4.9.nix index c63fa6189eff..6bc54ef44f6d 100644 --- a/pkgs/os-specific/linux/kernel/linux-4.9.nix +++ b/pkgs/os-specific/linux/kernel/linux-4.9.nix @@ -1,11 +1,11 @@ { stdenv, buildPackages, fetchurl, perl, buildLinux, ... } @ args: buildLinux (args // rec { - version = "4.9.154"; + version = "4.9.155"; extraMeta.branch = "4.9"; src = fetchurl { url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz"; - sha256 = "15jnkpf6kg061970cwh2z0l6nscffl63y1d0rq5f2y3gq4d4ycav"; + sha256 = "179w0yfnqk0rjdfl3fjqx5b9jn8i0bizhqckv49f63rwwc5wcam5"; }; } // (args.argsOverride or {})) diff --git a/pkgs/os-specific/linux/kernel/linux-testing-bcachefs.nix b/pkgs/os-specific/linux/kernel/linux-testing-bcachefs.nix index b4df3b7b33e8..a3275786b338 100644 --- a/pkgs/os-specific/linux/kernel/linux-testing-bcachefs.nix +++ b/pkgs/os-specific/linux/kernel/linux-testing-bcachefs.nix @@ -1,13 +1,13 @@ { stdenv, buildPackages, fetchgit, perl, buildLinux, ... } @ args: buildLinux (args // rec { - version = "4.18.2018.10.12"; - modDirVersion = "4.18.0"; + version = "4.20.2019.01.23"; + modDirVersion = "4.20.0"; src = fetchgit { url = "https://evilpiepirate.org/git/bcachefs.git"; - rev = "d7f6da1d60ec24266301231538ff6f09716537ed"; - sha256 = "05d7dh41nc35www8vmrn47wlf2mr2b8i4rm15vq3zgm32d0xv3lk"; + rev = "99750eab4d583132cf61f071082c7cf21f5295c0"; + sha256 = "05wg9w5f68qg02yrciir9h1wx448869763hg3w7j23wc2qywhwqb"; }; extraConfig = "BCACHEFS_FS m"; diff --git a/pkgs/os-specific/linux/kernel/linux-testing.nix b/pkgs/os-specific/linux/kernel/linux-testing.nix index 22e31f2aec1c..b1e74da256b6 100644 --- a/pkgs/os-specific/linux/kernel/linux-testing.nix +++ b/pkgs/os-specific/linux/kernel/linux-testing.nix @@ -1,13 +1,13 @@ { stdenv, buildPackages, fetchurl, perl, buildLinux, libelf, utillinux, ... } @ args: buildLinux (args // rec { - version = "5.0-rc4"; - modDirVersion = "5.0.0-rc4"; + version = "5.0-rc5"; + modDirVersion = "5.0.0-rc5"; extraMeta.branch = "5.0"; src = fetchurl { url = "https://git.kernel.org/torvalds/t/linux-${version}.tar.gz"; - sha256 = "061afxv1d29w5kkb1rxrz3ax7pc5x8yhx5yjf9p1dbh7lw64rglh"; + sha256 = "0a60svgiz06cq4hq5z1rmwyjq1748fm7wi87arl659aidp0r0qky"; }; # Should the testing kernels ever be built on Hydra? diff --git a/pkgs/os-specific/linux/kernel/patches.nix b/pkgs/os-specific/linux/kernel/patches.nix index 2ff0d5d26205..4c338b37deca 100644 --- a/pkgs/os-specific/linux/kernel/patches.nix +++ b/pkgs/os-specific/linux/kernel/patches.nix @@ -57,15 +57,4 @@ rec { sha256 = "1l8xq02rd7vakxg52xm9g4zng0ald866rpgm8kjlh88mwwyjkrwv"; }; }; - - # Reverts a change related to the overlayfs overhaul in 4.19 - # https://github.com/NixOS/nixpkgs/issues/48828#issuecomment-445208626 - revert-vfs-dont-open-real = rec { - name = "revert-vfs-dont-open-real"; - patch = fetchpatch { - name = name + ".patch"; - url = https://github.com/samueldr/linux/commit/ee23fa215caaa8102f4ab411d39fcad5858147f2.patch; - sha256 = "0bp4jryihg1y2sl8zlj6w7vvnxj0kmb6xdy42hpvdv43kb6ngiaq"; - }; - }; } diff --git a/pkgs/os-specific/linux/lxc/default.nix b/pkgs/os-specific/linux/lxc/default.nix index 9aae9c6013a9..a8668313465a 100644 --- a/pkgs/os-specific/linux/lxc/default.nix +++ b/pkgs/os-specific/linux/lxc/default.nix @@ -9,11 +9,11 @@ with stdenv.lib; stdenv.mkDerivation rec { name = "lxc-${version}"; - version = "3.0.3"; + version = "3.1.0"; src = fetchurl { url = "https://linuxcontainers.org/downloads/lxc/lxc-${version}.tar.gz"; - sha256 = "0hcql4srcs2dlf2f67i8v92y2i352zv7nr9hsgs3pih2rhrbh332"; + sha256 = "1igxqgx8q9cp15mcp1y8j564bl85ijw04jcmgb1s5bmfbg1751sd"; }; nativeBuildInputs = [ diff --git a/pkgs/os-specific/linux/sdnotify-wrapper/default.nix b/pkgs/os-specific/linux/sdnotify-wrapper/default.nix new file mode 100644 index 000000000000..28e1f0257897 --- /dev/null +++ b/pkgs/os-specific/linux/sdnotify-wrapper/default.nix @@ -0,0 +1,37 @@ +{ lib, fetchurl, runCommandCC, skawarePackages }: + +with skawarePackages; + +let + # From https://skarnet.org/software/misc/sdnotify-wrapper.c, + # which is unversioned. + src = ./sdnotify-wrapper.c; + +in runCommandCC "sdnotify-wrapper" { + + outputs = [ "bin" "doc" "out" ]; + + meta = { + homepage = "https://skarnet.org/software/misc/sdnotify-wrapper.c"; + description = "Use systemd sd_notify without having to link against libsystemd"; + platforms = lib.platforms.all; + license = lib.licenses.isc; + maintainers = with lib.maintainers; [ Profpatsch ]; + }; + +} '' + mkdir -p $bin/bin + mkdir $out + + # just dynamic for now + $CC \ + -o $bin/bin/sdnotify-wrapper \ + -I${skalibs.dev}/include \ + -L${skalibs.lib}/lib \ + -lskarnet \ + ${src} + + mkdir -p $doc/share/doc/sdnotify-wrapper + # copy the documentation comment + sed -ne '/Usage:/,/*\//p' ${src} > $doc/share/doc/sdnotify-wrapper/README +'' diff --git a/pkgs/os-specific/linux/sdnotify-wrapper/sdnotify-wrapper.c b/pkgs/os-specific/linux/sdnotify-wrapper/sdnotify-wrapper.c new file mode 100644 index 000000000000..0d1ae96068a4 --- /dev/null +++ b/pkgs/os-specific/linux/sdnotify-wrapper/sdnotify-wrapper.c @@ -0,0 +1,172 @@ +/* + Copyright: (C)2015-2017 Laurent Bercot. http://skarnet.org/ + ISC license. See http://opensource.org/licenses/ISC + + Build-time requirements: skalibs. http://skarnet.org/software/skalibs/ + Run-time requirements: none, if you link skalibs statically. + + Compilation: + gcc -o sdnotify-wrapper -L/usr/lib/skalibs sdnotify-wrapper.c -lskarnet + Use /usr/lib/skalibs/libskarnet.a instead of -lskarnet to link statically. + Adapt gcc's -I and -L options to your skalibs installation paths. + + Usage: if a daemon would be launched by systemd as "foobard args...", + launch it as "sdnotify-wrapper foobard args..." instead, and you can now + tell systemd that this daemon supports readiness notification. + + Instead of using sd_notify() and having to link against the systemd + library, the daemon notifies readiness by writing whatever it wants + to a file descriptor (by default: stdout), then a newline. (Then it + should close that file descriptor.) The simplest way is something like + int notify_readiness() { write(1, "\n", 1) ; close(1) ; } + This mechanism is understandable by any notification readiness framework. + + Readiness notification occurs when the newline is written, not when + the descriptor is closed; but since sdnotify-wrapper stops reading + after the first newline and will exit, any subsequent writes will + fail and it's best to simply close the descriptor right away. + + sdnotify-wrapper sees the notification when it occurs and sends it + to systemd using the sd_notify format. + + Options: + -d fd: the daemon will write its notification on descriptor fd. + Default is 1. + -f: do not doublefork. Use if the daemon waits for children it does + not know it has (for instance, superservers do this). When in doubt, + do not use that option, or you may have a zombie hanging around. + -t timeout: if the daemon has not sent a notification after timeout + milliseconds, give up and exit; systemd will not be notified. + -k: keep the NOTIFY_SOCKET environment variable when execing into the + daemon. By default, the variable is unset: the daemon should not need it. + + Notes: + sdnotify-wrapper does not change the daemon's pid. It runs as a + (grand)child of the daemon. + If the NOTIFY_SOCKET environment variable is not set, sdnotify-wrapper + does nothing - it only execs into the daemon. + sdnotify-wrapper is more liberal than sd_notify(). It will accept + a relative path in NOTIFY_SOCKET. +*/ + + +#include <sys/types.h> +#include <string.h> +#include <unistd.h> +#include <errno.h> +#include <sys/socket.h> +#include <sys/un.h> +#include <skalibs/uint64.h> +#include <skalibs/types.h> +#include <skalibs/bytestr.h> +#include <skalibs/sgetopt.h> +#include <skalibs/strerr2.h> +#include <skalibs/env.h> +#include <skalibs/allreadwrite.h> +#include <skalibs/tai.h> +#include <skalibs/iopause.h> +#include <skalibs/djbunix.h> +#include <skalibs/webipc.h> + +#define USAGE "sdnotify-wrapper [ -d fd ] [ -f ] [ -t timeout ] [ -k ] prog..." +#define dieusage() strerr_dieusage(100, USAGE) + +#define VAR "NOTIFY_SOCKET" + +static inline int ipc_sendto (int fd, char const *s, size_t len, char const *path) +{ + struct sockaddr_un sa ; + size_t l = strlen(path) ; + if (l > IPCPATH_MAX) return (errno = ENAMETOOLONG, 0) ; + memset(&sa, 0, sizeof sa) ; + sa.sun_family = AF_UNIX ; + memcpy(sa.sun_path, path, l+1) ; + if (path[0] == '@') sa.sun_path[0] = 0 ; + return sendto(fd, s, len, MSG_NOSIGNAL, (struct sockaddr *)&sa, sizeof sa) >= 0 ; +} + +static inline void notify_systemd (pid_t pid, char const *socketpath) +{ + size_t n = 16 ; + char fmt[16 + PID_FMT] = "READY=1\nMAINPID=" ; + int fd = ipc_datagram_b() ; + if (fd < 0) strerr_diefu1sys(111, "create socket") ; + n += pid_fmt(fmt + n, pid) ; + fmt[n++] = '\n' ; + if (!ipc_sendto(fd, fmt, n, socketpath)) + strerr_diefu2sys(111, "send notification message to ", socketpath) ; + close(fd) ; +} + +static inline int run_child (int fd, unsigned int timeout, pid_t pid, char const *s) +{ + char dummy[4096] ; + iopause_fd x = { .fd = fd, .events = IOPAUSE_READ } ; + tain_t deadline ; + tain_now_g() ; + if (timeout) tain_from_millisecs(&deadline, timeout) ; + else deadline = tain_infinite_relative ; + tain_add_g(&deadline, &deadline) ; + for (;;) + { + int r = iopause_g(&x, 1, &deadline) ; + if (r < 0) strerr_diefu1sys(111, "iopause") ; + if (!r) return 99 ; + r = sanitize_read(fd_read(fd, dummy, 4096)) ; + if (r < 0) + if (errno == EPIPE) return 1 ; + else strerr_diefu1sys(111, "read from parent") ; + else if (r && memchr(dummy, '\n', r)) break ; + } + close(fd) ; + notify_systemd(pid, s) ; + return 0 ; +} + +int main (int argc, char const *const *argv, char const *const *envp) +{ + char const *s = env_get2(envp, VAR) ; + unsigned int fd = 1 ; + unsigned int timeout = 0 ; + int df = 1, keep = 0 ; + PROG = "sdnotify-wrapper" ; + { + subgetopt_t l = SUBGETOPT_ZERO ; + for (;;) + { + register int opt = subgetopt_r(argc, argv, "d:ft:k", &l) ; + if (opt == -1) break ; + switch (opt) + { + case 'd' : if (!uint0_scan(l.arg, &fd)) dieusage() ; break ; + case 'f' : df = 0 ; break ; + case 't' : if (!uint0_scan(l.arg, &timeout)) dieusage() ; break ; + case 'k' : keep = 1 ; break ; + default : dieusage() ; + } + } + argc -= l.ind ; argv += l.ind ; + } + if (!argc) dieusage() ; + + if (!s) xpathexec_run(argv[0], argv, envp) ; + else + { + pid_t parent = getpid() ; + pid_t child ; + int p[2] ; + if (pipe(p) < 0) strerr_diefu1sys(111, "pipe") ; + child = df ? doublefork() : fork() ; + if (child < 0) strerr_diefu1sys(111, df ? "doublefork" : "fork") ; + else if (!child) + { + PROG = "sdnotify-wrapper (child)" ; + close(p[1]) ; + return run_child(p[0], timeout, parent, s) ; + } + close(p[0]) ; + if (fd_move((int)fd, p[1]) < 0) strerr_diefu1sys(111, "move descriptor") ; + if (keep) xpathexec_run(argv[0], argv, envp) ; + else xpathexec_r(argv, envp, env_len(envp), VAR, sizeof(VAR)) ; + } +} |