X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udev.c;h=17867180c7d793824de88b91365b4c6b653414b5;hb=a8d141a3c165dafcf21d081e88f3cc0b7f1e65c5;hp=beaa191c045098ce4c2424735407d63e7ddce1fc;hpb=40caaeec51f5d8f65245932a85396ac85265cbe5;p=elogind.git diff --git a/udev.c b/udev.c index beaa191c0..17867180c 100644 --- a/udev.c +++ b/udev.c @@ -72,6 +72,7 @@ int main(int argc, char *argv[], char *envp[]) const char *devpath; const char *subsystem; struct sigaction act; + int devnull; int retval = -EINVAL; if (argc == 2 && strcmp(argv[1], "-V") == 0) { @@ -79,7 +80,22 @@ int main(int argc, char *argv[], char *envp[]) exit(0); } + /* set std fd's to /dev/null, if the kernel forks us, we don't have them at all */ + devnull = open("/dev/null", O_RDWR); + if (devnull >= 0) { + if (devnull != STDIN_FILENO) + dup2(devnull, STDIN_FILENO); + if (devnull != STDOUT_FILENO) + dup2(devnull, STDOUT_FILENO); + if (devnull != STDERR_FILENO) + dup2(devnull, STDERR_FILENO); + if (devnull > STDERR_FILENO) + close(devnull); + } + logging_init("udev"); + if (devnull < 0) + err("fatal, could not open /dev/null: %s", strerror(errno)); udev_init_config(); dbg("version %s", UDEV_VERSION); @@ -116,7 +132,7 @@ int main(int argc, char *argv[], char *envp[]) } udev_init_device(&udev, devpath, subsystem, action); - udev_rules_init(&rules, 1, 0); + udev_rules_init(&rules, 0); retval = udev_process_event(&rules, &udev);