diff options
| author | Jeroen Ruigrok van der Werven <asmodai@FreeBSD.org> | 2001-03-05 11:05:49 +0000 |
|---|---|---|
| committer | Jeroen Ruigrok van der Werven <asmodai@FreeBSD.org> | 2001-03-05 11:05:49 +0000 |
| commit | 9bd5190caa30ac09a0832c55bfa05ff211f82be5 (patch) | |
| tree | a0b543f444a1c07e45449352ba84d66299b07270 /bin/sh/redir.c | |
| parent | 74d89837e7842004ac17c6960f25cdae4a797e77 (diff) | |
Notes
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 3ef30d0e0151..ee893f40bef2 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 |
