diff options
author | jilles <jilles@FreeBSD.org> | 2014-10-05 21:51:36 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2014-10-05 21:51:36 +0000 |
commit | 8883e8ad3ea72532152caf26aaa12be04744a63f (patch) | |
tree | b00ee3e4cda755dd02e5000755469b550cf3c8ca /bin/sh/redir.c | |
parent | a25e91cfdb087b8b2986b66a6a47e8012daede14 (diff) | |
download | FreeBSD-src-8883e8ad3ea72532152caf26aaa12be04744a63f.zip FreeBSD-src-8883e8ad3ea72532152caf26aaa12be04744a63f.tar.gz |
sh: Eliminate some gotos.
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); + } } |