From 6722737ece4b8db3e30b53aef8f981f53db1621e Mon Sep 17 00:00:00 2001 From: Alexander Shishkin Date: Fri, 22 Oct 2010 13:27:16 +0200 Subject: *: introduce and use xmkstemp. -65 bytes. Signed-off-by: Alexander Shishkin Signed-off-by: Denys Vlasenko --- coreutils/dos2unix.c | 8 +++----- editors/diff.c | 5 ++--- editors/patch.c | 3 +-- editors/sed.c | 4 +--- include/libbb.h | 1 + libbb/xfuncs_printf.c | 8 ++++++++ printutils/lpr.c | 4 +--- 7 files changed, 17 insertions(+), 16 deletions(-) diff --git a/coreutils/dos2unix.c b/coreutils/dos2unix.c index ba1ca8c79..eab8110dc 100644 --- a/coreutils/dos2unix.c +++ b/coreutils/dos2unix.c @@ -41,12 +41,10 @@ static void convert(char *fn, int conv_type) fstat(fileno(in), &st); temp_fn = xasprintf("%sXXXXXX", resolved_fn); - i = mkstemp(temp_fn); - if (i == -1 - || fchmod(i, st.st_mode) == -1 - ) { + i = xmkstemp(temp_fn); + if (fchmod(i, st.st_mode) == -1) bb_simple_perror_msg_and_die(temp_fn); - } + out = xfdopen_for_write(i); } diff --git a/editors/diff.c b/editors/diff.c index 83de52753..d9d709db6 100644 --- a/editors/diff.c +++ b/editors/diff.c @@ -685,9 +685,8 @@ static int diffreg(char *file[2]) */ if (lseek(fd, 0, SEEK_SET) == -1 && errno == ESPIPE) { char name[] = "/tmp/difXXXXXX"; - int fd_tmp = mkstemp(name); - if (fd_tmp < 0) - bb_perror_msg_and_die("mkstemp"); + int fd_tmp = xmkstemp(name); + unlink(name); if (bb_copyfd_eof(fd, fd_tmp) < 0) xfunc_die(); diff --git a/editors/patch.c b/editors/patch.c index fff06907f..33ff8b569 100644 --- a/editors/patch.c +++ b/editors/patch.c @@ -200,8 +200,7 @@ int copy_tempfile(int fdin, char *name, char **tempname) int fd; *tempname = xasprintf("%sXXXXXX", name); - fd = mkstemp(*tempname); - if(-1 == fd) bb_perror_msg_and_die("no temp file"); + fd = xmkstemp(*tempname); // Set permissions of output file fstat(fdin, &statbuf); diff --git a/editors/sed.c b/editors/sed.c index 8d9f7b25b..964d0405e 100644 --- a/editors/sed.c +++ b/editors/sed.c @@ -1370,9 +1370,7 @@ int sed_main(int argc UNUSED_PARAM, char **argv) } G.outname = xasprintf("%sXXXXXX", argv[i]); - nonstdoutfd = mkstemp(G.outname); - if (-1 == nonstdoutfd) - bb_perror_msg_and_die("can't create temp file %s", G.outname); + nonstdoutfd = xmkstemp(G.outname); G.nonstdout = xfdopen_for_write(nonstdoutfd); /* Set permissions/owner of output file */ diff --git a/include/libbb.h b/include/libbb.h index 01dc33e63..409c434cb 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -425,6 +425,7 @@ int xopen_stdin(const char *pathname) FAST_FUNC; void xrename(const char *oldpath, const char *newpath) FAST_FUNC; int rename_or_warn(const char *oldpath, const char *newpath) FAST_FUNC; off_t xlseek(int fd, off_t offset, int whence) FAST_FUNC; +int xmkstemp(char *template) FAST_FUNC; off_t fdlength(int fd) FAST_FUNC; uoff_t FAST_FUNC get_volume_size_in_bytes(int fd, diff --git a/libbb/xfuncs_printf.c b/libbb/xfuncs_printf.c index ba660a2db..56ee459e4 100644 --- a/libbb/xfuncs_printf.c +++ b/libbb/xfuncs_printf.c @@ -240,6 +240,14 @@ off_t FAST_FUNC xlseek(int fd, off_t offset, int whence) return off; } +int FAST_FUNC xmkstemp(char *template) +{ + int fd = mkstemp(template); + if (fd < 0) + bb_perror_msg_and_die("can't create temp file '%s'", template); + return fd; +} + // Die with supplied filename if this FILE* has ferror set. void FAST_FUNC die_if_ferror(FILE *fp, const char *fn) { diff --git a/printutils/lpr.c b/printutils/lpr.c index fb7860d41..284917926 100644 --- a/printutils/lpr.c +++ b/printutils/lpr.c @@ -159,9 +159,7 @@ int lpqr_main(int argc UNUSED_PARAM, char *argv[]) // if data file is stdin, we need to dump it first if (LONE_DASH(*argv)) { strcpy(tempfile, "/tmp/lprXXXXXX"); - dfd = mkstemp(tempfile); - if (dfd < 0) - bb_perror_msg_and_die("mkstemp"); + dfd = xmkstemp(tempfile); bb_copyfd_eof(STDIN_FILENO, dfd); xlseek(dfd, 0, SEEK_SET); *argv = (char*)bb_msg_standard_input; -- cgit v1.2.3