summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorproff <proff@NetBSD.org>1999-09-03 13:31:29 +0000
committerproff <proff@NetBSD.org>1999-09-03 13:31:29 +0000
commit50aa8b2b939d6dbc91c12c41d2801f840994e5f2 (patch)
treec162f4d348c64cdde6a85a563d308ec56b4b29b1
parent143f897d3da477b582021186d98e2116b70ce5f8 (diff)
use daemon(3) instead of vanilla fork()
use err(3) instead of perror..exit add new flag: -n don't detach from tty
-rw-r--r--sbin/slattach/slattach.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/sbin/slattach/slattach.c b/sbin/slattach/slattach.c
index 667fdc27563..dacd0ccb6d8 100644
--- a/sbin/slattach/slattach.c
+++ b/sbin/slattach/slattach.c
@@ -1,4 +1,4 @@
-/* $NetBSD: slattach.c,v 1.21 1998/03/23 04:41:16 fair Exp $ */
+/* $NetBSD: slattach.c,v 1.22 1999/09/03 13:31:29 proff Exp $ */
/*
* Copyright (c) 1988, 1993
@@ -46,7 +46,7 @@ __COPYRIGHT("@(#) Copyright (c) 1988, 1993\n\
#if 0
static char sccsid[] = "@(#)slattach.c 8.2 (Berkeley) 1/7/94";
#else
-__RCSID("$NetBSD: slattach.c,v 1.21 1998/03/23 04:41:16 fair Exp $");
+__RCSID("$NetBSD: slattach.c,v 1.22 1999/09/03 13:31:29 proff Exp $");
#endif
#endif /* not lint */
@@ -90,8 +90,9 @@ main(argc, argv)
tcflag_t cflag = HUPCL;
int ch;
sigset_t sigset;
+ int opt_detach = 1;
- while ((ch = getopt(argc, argv, "hHlms:t:")) != -1) {
+ while ((ch = getopt(argc, argv, "hHlmns:t:")) != -1) {
switch (ch) {
case 'h':
cflag |= CRTSCTS;
@@ -105,6 +106,9 @@ main(argc, argv)
case 'm':
cflag &= ~HUPCL;
break;
+ case 'n':
+ opt_detach = 0;
+ break;
case 's':
speed = atoi(optarg);
break;
@@ -128,10 +132,8 @@ main(argc, argv)
"%s%s", _PATH_DEV, dev);
dev = devicename;
}
- if ((fd = open(dev, O_RDWR | O_NDELAY)) < 0) {
- perror(dev);
- exit(1);
- }
+ if ((fd = open(dev, O_RDWR | O_NDELAY)) < 0)
+ err(1, "%s", dev);
tty.c_cflag = CREAD | CS8 | cflag;
tty.c_iflag = 0;
tty.c_lflag = 0;
@@ -145,9 +147,8 @@ main(argc, argv)
err(1, "TIOCSDTR");
if (ioctl(fd, TIOCSETD, &slipdisc) < 0)
err(1, "TIOCSETD");
-
- if (fork() > 0)
- exit(0);
+ if (opt_detach && daemon(0, 0) != 0)
+ err(1, "couldn't detach");
sigemptyset(&sigset);
for (;;)
sigsuspend(&sigset);