summaryrefslogtreecommitdiffstats
path: root/bin/sh/redir.c
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2015-09-13 13:43:08 +0000
committerjilles <jilles@FreeBSD.org>2015-09-13 13:43:08 +0000
commit71d275cef177108a01d07a8d7eccb8bb1d189e6c (patch)
treeae8f5ff23a75d1cc74ed502e9f9c1288098b22c9 /bin/sh/redir.c
parente646354b485aa16f77c0346625c3c2834f3b8df5 (diff)
downloadFreeBSD-src-71d275cef177108a01d07a8d7eccb8bb1d189e6c.zip
FreeBSD-src-71d275cef177108a01d07a8d7eccb8bb1d189e6c.tar.gz
MFC r272575: sh: Eliminate some gotos.
This MFC is to avoid conflicts in the MFC of r287148.
Diffstat (limited to 'bin/sh/redir.c')
-rw-r--r--bin/sh/redir.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/bin/sh/redir.c b/bin/sh/redir.c
index 6127e86..95d3238 100644
--- a/bin/sh/redir.c
+++ b/bin/sh/redir.c
@@ -173,21 +173,12 @@ openredirect(union node *redir, char memory[10])
fname = redir->nfile.expfname;
if ((f = open(fname, O_RDONLY)) < 0)
error("cannot open %s: %s", fname, strerror(errno));
-movefd:
- if (f != fd) {
- if (dup2(f, fd) == -1) {
- e = errno;
- close(f);
- error("%d: %s", fd, strerror(e));
- }
- close(f);
- }
break;
case NFROMTO:
fname = redir->nfile.expfname;
if ((f = open(fname, O_RDWR|O_CREAT, 0666)) < 0)
error("cannot create %s: %s", fname, strerror(errno));
- goto movefd;
+ break;
case NTO:
if (Cflag) {
fname = redir->nfile.expfname;
@@ -205,19 +196,19 @@ movefd:
} else
error("cannot create %s: %s", fname,
strerror(EEXIST));
- goto movefd;
+ break;
}
/* FALLTHROUGH */
case NCLOBBER:
fname = redir->nfile.expfname;
if ((f = open(fname, O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0)
error("cannot create %s: %s", fname, strerror(errno));
- goto movefd;
+ break;
case NAPPEND:
fname = redir->nfile.expfname;
if ((f = open(fname, O_WRONLY|O_CREAT|O_APPEND, 0666)) < 0)
error("cannot create %s: %s", fname, strerror(errno));
- goto movefd;
+ break;
case NTOFD:
case NFROMFD:
if (redir->ndup.dupfd >= 0) { /* if not ">&-" */
@@ -231,14 +222,22 @@ movefd:
} else {
close(fd);
}
- break;
+ return;
case NHERE:
case NXHERE:
f = openhere(redir);
- goto movefd;
+ break;
default:
abort();
}
+ if (f != fd) {
+ if (dup2(f, fd) == -1) {
+ e = errno;
+ close(f);
+ error("%d: %s", fd, strerror(e));
+ }
+ close(f);
+ }
}
OpenPOWER on IntegriCloud