summaryrefslogtreecommitdiffstats
path: root/bin/sh/redir.c
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>2000-10-03 23:13:14 +0000
committerbrian <brian@FreeBSD.org>2000-10-03 23:13:14 +0000
commit89a0a9cf1836abe33d8635f8eff8286193d3e620 (patch)
tree70219d438da762201d07f27ffc7f0b20263e1b0e /bin/sh/redir.c
parent917d66438f42a2cdb4cd8ca613b239a72e5652b3 (diff)
downloadFreeBSD-src-89a0a9cf1836abe33d8635f8eff8286193d3e620.zip
FreeBSD-src-89a0a9cf1836abe33d8635f8eff8286193d3e620.tar.gz
Implement the <> redirection operator.
Diffstat (limited to 'bin/sh/redir.c')
-rw-r--r--bin/sh/redir.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/bin/sh/redir.c b/bin/sh/redir.c
index 3ef30d0..ee893f4 100644
--- a/bin/sh/redir.c
+++ b/bin/sh/redir.c
@@ -190,6 +190,27 @@ movefd:
close(f);
}
break;
+ case NFROMTO:
+ fname = redir->nfile.expfname;
+#ifdef O_CREAT
+ if ((f = open(fname, O_RDWR|O_CREAT, 0666)) < 0)
+ error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
+#else
+ if ((f = open(fname, O_RDWR, 0666)) < 0) {
+ if (errno != ENOENT)
+ error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
+ else if ((f = creat(fname, 0666)) < 0)
+ error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
+ else {
+ close(f);
+ if ((f = open(fname, O_RDWR)) < 0) {
+ error("cannot create %s: %s", fname, errmsg(errno, E_CREAT));
+ remove(fname);
+ }
+ }
+ }
+#endif
+ goto movefd;
case NTO:
fname = redir->nfile.expfname;
#ifdef O_CREAT
OpenPOWER on IntegriCloud