diff options
author | brian <brian@FreeBSD.org> | 2000-10-03 23:13:14 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 2000-10-03 23:13:14 +0000 |
commit | 89a0a9cf1836abe33d8635f8eff8286193d3e620 (patch) | |
tree | 70219d438da762201d07f27ffc7f0b20263e1b0e /bin/sh/redir.c | |
parent | 917d66438f42a2cdb4cd8ca613b239a72e5652b3 (diff) | |
download | FreeBSD-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.c | 21 |
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 |