From: Ivo Timmermans Date: Tue, 28 Nov 2000 23:23:41 +0000 (+0000) Subject: dropin.c/h contain a set of drop-in replacements for non-standard C X-Git-Tag: import-tinc-1.1~785^2~657 X-Git-Url: https://git.meshlink.io/?a=commitdiff_plain;h=c94f7637427f4c89d56c41fe4c75f2970b664a63;p=meshlink dropin.c/h contain a set of drop-in replacements for non-standard C library functions (read: GNU extensions). --- diff --git a/lib/Makefile.am b/lib/Makefile.am index 7ac630a0..355493cd 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1,15 +1,15 @@ ## Process this file with automake to produce Makefile.in -# $Id: Makefile.am,v 1.2.4.4 2000/11/24 23:12:58 guus Exp $ +# $Id: Makefile.am,v 1.2.4.5 2000/11/28 23:23:41 zarq Exp $ noinst_LIBRARIES = libvpn.a INCLUDES = -I. -I$(top_builddir) -I$(top_srcdir)/intl -libvpn_a_SOURCES = xmalloc.c pidfile.c utils.c getopt.c getopt1.c list.c rbl.c daemon.c +libvpn_a_SOURCES = xmalloc.c pidfile.c utils.c getopt.c getopt1.c list.c rbl.c dropin.c libvpn_a_LIBADD = @LIBOBJS@ @ALLOCA@ libvpn_a_DEPENDENCIES = $(libvpn_a_LIBADD) -noinst_HEADERS = xalloc.h pidfile.h utils.h getopt.h list.h rbl.h daemon.h +noinst_HEADERS = xalloc.h pidfile.h utils.h getopt.h list.h rbl.h dropin.h EXTRA_DIST = README diff --git a/lib/daemon.c b/lib/daemon.c deleted file mode 100644 index f12599f4..00000000 --- a/lib/daemon.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - daemon.c -- replacement daemon() for platforms that do not have it - Copyright (C) 2000 Ivo Timmermans , - 2000 Guus Sliepen - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - $Id: daemon.c,v 1.1.2.1 2000/11/24 23:30:50 guus Exp $ -*/ - -#include "config.h" - -#include -#include -#include -#include -#include - -#include - -#ifndef HAVE_DAEMON -int daemon(int nochdir, int noclose) -{ - pid_t pid; - int fd; - - pid = fork(); - - /* Check if forking failed */ - - if(pid < 0) - { - perror("fork"); - exit(-1); - } - - /* If we are the parent, terminate */ - - if(pid) - exit(0); - - /* Detach by becoming the new process group leader */ - - if(setsid() < 0) - { - perror("setsid"); - return -1; - } - - /* Change working directory to the root (to avoid keeping mount points busy) */ - - if(!nochdir) - { - chdir("/"); - } - - /* Redirect stdin/out/err to /dev/null */ - - if(!noclose) - { - fd = open("/dev/null", O_RDWR); - - if(fd < 0) - { - perror("opening /dev/null"); - return -1; - } - else - { - dup2(fd, 0); - dup2(fd, 1); - dup2(fd, 2); - } - } -} -#endif diff --git a/lib/daemon.h b/lib/daemon.h deleted file mode 100644 index ce23b762..00000000 --- a/lib/daemon.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - daemon.h -- header file for daemon.c - Copyright (C) 2000 Ivo Timmermans , - 2000 Guus Sliepen - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - $Id: daemon.h,v 1.1.2.1 2000/11/24 23:30:50 guus Exp $ -*/ - -#ifndef __DAEMON_H__ -#define __DAEMON_H__ - -#ifndef HAVE_DAEMON -extern int daemon(int, int); -#endif - -#endif /* __DAEMON_H__ */ diff --git a/lib/dropin.c b/lib/dropin.c new file mode 100644 index 00000000..faa2314b --- /dev/null +++ b/lib/dropin.c @@ -0,0 +1,101 @@ +/* + dropin.c -- a set of drop-in replacements for libc functions + Copyright (C) 2000 Ivo Timmermans , + 2000 Guus Sliepen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: dropin.c,v 1.1.2.1 2000/11/28 23:23:41 zarq Exp $ +*/ + +#include "config.h" + +#include +#include +#include +#include +#include + +#include + +#ifndef HAVE_DAEMON +int daemon(int nochdir, int noclose) +{ + pid_t pid; + int fd; + + pid = fork(); + + /* Check if forking failed */ + + if(pid < 0) + { + perror("fork"); + exit(-1); + } + + /* If we are the parent, terminate */ + + if(pid) + exit(0); + + /* Detach by becoming the new process group leader */ + + if(setsid() < 0) + { + perror("setsid"); + return -1; + } + + /* Change working directory to the root (to avoid keeping mount points busy) */ + + if(!nochdir) + { + chdir("/"); + } + + /* Redirect stdin/out/err to /dev/null */ + + if(!noclose) + { + fd = open("/dev/null", O_RDWR); + + if(fd < 0) + { + perror("opening /dev/null"); + return -1; + } + else + { + dup2(fd, 0); + dup2(fd, 1); + dup2(fd, 2); + } + } +} +#endif + + + + + +#ifndef HAVE_GET_CURRENT_DIR_NAME + +char *get_current_dir_name(void) +{ + return "."; +} + +#endif diff --git a/lib/dropin.h b/lib/dropin.h new file mode 100644 index 00000000..a104b38e --- /dev/null +++ b/lib/dropin.h @@ -0,0 +1,34 @@ +/* + daemon.h -- header file for daemon.c + Copyright (C) 2000 Ivo Timmermans , + 2000 Guus Sliepen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: dropin.h,v 1.1.2.1 2000/11/28 23:23:41 zarq Exp $ +*/ + +#ifndef __DROPIN_H__ +#define __DROPIN_H__ + +#ifndef HAVE_DAEMON +extern int daemon(int, int); +#endif + +#ifndef HAVE_GET_CURRENT_DIR_NAME +extern char* get_current_dir_name(void); +#endif + +#endif /* __DROPIN_H__ */