diff options
author | jilles <jilles@FreeBSD.org> | 2015-09-13 13:43:08 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2015-09-13 13:43:08 +0000 |
commit | 71d275cef177108a01d07a8d7eccb8bb1d189e6c (patch) | |
tree | ae8f5ff23a75d1cc74ed502e9f9c1288098b22c9 /bin/sh/redir.c | |
parent | e646354b485aa16f77c0346625c3c2834f3b8df5 (diff) | |
download | FreeBSD-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.c | 29 |
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); + } } |