diff options
author | jmallett <jmallett@FreeBSD.org> | 2002-05-07 23:32:26 +0000 |
---|---|---|
committer | jmallett <jmallett@FreeBSD.org> | 2002-05-07 23:32:26 +0000 |
commit | 9514d77a481abe6ebe3cb1f52d850f3b3382e4a8 (patch) | |
tree | 218affa9c0831cab1cb3d31d7389c36caa49d159 /usr.bin/sed/main.c | |
parent | 3c0c83176102700daccbd554604e5b5efd759a38 (diff) | |
download | FreeBSD-src-9514d77a481abe6ebe3cb1f52d850f3b3382e4a8.zip FreeBSD-src-9514d77a481abe6ebe3cb1f52d850f3b3382e4a8.tar.gz |
Add handling for any nil-length string passed to -i for the backup extension.
Add a note that this is kinda-sorta dangerous to the manual page.
Diffstat (limited to 'usr.bin/sed/main.c')
-rw-r--r-- | usr.bin/sed/main.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/usr.bin/sed/main.c b/usr.bin/sed/main.c index b4c0916..812f62e 100644 --- a/usr.bin/sed/main.c +++ b/usr.bin/sed/main.c @@ -320,6 +320,8 @@ mf_fgets(sp, spflag) fname = files->fname; if ((f = fopen(fname, "r")) == NULL) err(1, "%s", fname); + if (inplace != NULL && *inplace == '\0') + unlink(fname); } if ((c = getc(f)) != EOF) { (void)ungetc(c, f); @@ -366,6 +368,8 @@ mf_fgets(sp, spflag) fname = files->fname; if ((f = fopen(fname, "r")) == NULL) err(1, "%s", fname); + if (inplace != NULL && *inplace == '\0') + unlink(fname); } } (void)ungetc(c, f); @@ -427,8 +431,16 @@ inplace_edit(filename) return -1; } - strlcpy(backup, *filename, MAXPATHLEN); - strlcat(backup, inplace, MAXPATHLEN); + if (*inplace == '\0') { + char template[] = "/tmp/sed.XXXXXXXXXX"; + + if (mktemp(template) == NULL) + err(1, "mktemp"); + strlcpy(backup, template, MAXPATHLEN); + } else { + strlcpy(backup, *filename, MAXPATHLEN); + strlcat(backup, inplace, MAXPATHLEN); + } input = open(*filename, O_RDONLY); if (input == -1) |