summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--THANKS1
-rw-r--r--src/mktemp.c12
-rw-r--r--src/sort.c3
-rw-r--r--src/tac.c3
-rwxr-xr-xtests/misc/mktemp7
-rwxr-xr-xtests/misc/sort-merge5
-rwxr-xr-xtests/misc/tac9
7 files changed, 32 insertions, 8 deletions
diff --git a/THANKS b/THANKS
index 5f3c5bd72..021ff6ad6 100644
--- a/THANKS
+++ b/THANKS
@@ -250,6 +250,7 @@ Jeff Moore jbm@mordor.com
Jeff Sheinberg jeff@bsrd.net
Jens Elkner elkner@imsgroup.de
Jens Schmidt jms@jsds.hamburg.com
+Jeph Cowan jeph@ucar.edu
Jeremy Maitin-Shepard jbms@cmu.edu
Jerome Abela abela@hsc.fr
Jérôme Zago bug-coreutils-ml@agt-the-walker.net
diff --git a/src/mktemp.c b/src/mktemp.c
index 8a09231f9..d745e6069 100644
--- a/src/mktemp.c
+++ b/src/mktemp.c
@@ -242,20 +242,24 @@ main (int argc, char **argv)
quote (template));
}
- dest_name = file_name_concat (dest_dir, template, NULL);
+ template = file_name_concat (dest_dir, template, NULL);
}
else
{
- dest_name = xstrdup (template);
+ template = xstrdup (template);
}
+ /* Make a copy to be used in case of diagnostic, since failing
+ mkstemp may leave the buffer in an undefined state. */
+ dest_name = xstrdup (template);
+
if (create_directory)
{
int err = mkdtemp_len (dest_name, x_count, dry_run);
if (err != 0)
{
error (0, errno, _("failed to create directory via template %s"),
- quote (dest_name));
+ quote (template));
status = EXIT_FAILURE;
}
}
@@ -265,7 +269,7 @@ main (int argc, char **argv)
if (fd < 0 || (!dry_run && close (fd) != 0))
{
error (0, errno, _("failed to create file via template %s"),
- quote (dest_name));
+ quote (template));
status = EXIT_FAILURE;
}
}
diff --git a/src/sort.c b/src/sort.c
index b932a51b3..92f400a96 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -741,7 +741,8 @@ create_temp_file (int *pfd)
errno = saved_errno;
if (fd < 0)
- die (_("cannot create temporary file"), file);
+ error (SORT_FAILURE, errno, _("cannot create temporary file in %s"),
+ quote (temp_dir));
*pfd = fd;
return node;
diff --git a/src/tac.c b/src/tac.c
index 9cf6d60dc..c83986f59 100644
--- a/src/tac.c
+++ b/src/tac.c
@@ -454,7 +454,8 @@ copy_to_temp (FILE **g_tmp, char **g_tempfile, int input_fd, char const *file)
fd = mkstemp (template);
if (fd < 0)
{
- error (0, errno, _("cannot create temporary file %s"), quote (tempfile));
+ error (0, errno, _("cannot create temporary file in %s"),
+ quote (tempdir));
return false;
}
diff --git a/tests/misc/mktemp b/tests/misc/mktemp
index 616a9e44f..356558291 100755
--- a/tests/misc/mktemp
+++ b/tests/misc/mktemp
@@ -49,6 +49,7 @@ sub check_tmp($$)
# Turn off localization of executable's output.
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
my $prog = 'mktemp';
+my $bad_dir = 'no/such/dir';
my @Tests =
(
@@ -97,6 +98,12 @@ my @Tests =
{POST => sub { my ($f) = @_; defined $f or return; chomp $f;
check_tmp $f, 'F'; unlink $f; rmdir 'a' or die "rmdir a: $!\n" }}
],
+
+ ['pipe-bad-tmpdir',
+ {ENV => "TMPDIR=$bad_dir"},
+ {ERR_SUBST => "s,($bad_dir/)[^']+': .*,\$1...,"},
+ {ERR => "$prog: failed to create file via template `$bad_dir/...\n"},
+ {EXIT => 1}],
);
my $save_temps = $ENV{DEBUG};
diff --git a/tests/misc/sort-merge b/tests/misc/sort-merge
index 985d7a414..6b8192610 100755
--- a/tests/misc/sort-merge
+++ b/tests/misc/sort-merge
@@ -66,8 +66,9 @@ my @Tests =
# this should fail since nmerge < # of input files, so
# temp files are needed
['nmerge-no', "-m --batch-size=2 -T$badtmp", @inputs,
- {ERR_SUBST=>"s|: $badtmp/sort.+||"},
- {ERR=>"$prog: cannot create temporary file\n"}, {EXIT=>2}],
+ {ERR_SUBST=>"s|': .*|':|"},
+ {ERR=>"$prog: cannot create temporary file in `$badtmp':\n"},
+ {EXIT=>2}],
# This used to fail because setting batch-size without also setting
# buffer size would cause the buffer size to be set to the minimum.
diff --git a/tests/misc/tac b/tests/misc/tac
index 2f9981d49..9995357ab 100755
--- a/tests/misc/tac
+++ b/tests/misc/tac
@@ -22,6 +22,8 @@ my $prog = 'tac';
# Turn off localization of executable's output.
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
+my $bad_dir = 'no/such/dir';
+
my @Tests =
(
['segfault', '-r', {IN=>"a\n"}, {IN=>"b\n"}, {OUT=>"a\nb\n"}],
@@ -58,6 +60,13 @@ my @Tests =
['opt-br2', qw(-b -r -s '\._+'),
{IN=>".__x.___y.____z._1._2.__3.___4"},
{OUT=>".___4.__3._2._1.____z.___y.__x"}],
+
+ ['pipe-bad-tmpdir',
+ {ENV => "TMPDIR=$bad_dir"},
+ {IN_PIPE => "a\n"},
+ {ERR_SUBST => "s,`$bad_dir': .*,...,"},
+ {ERR => "$prog: cannot create temporary file in ...\n"},
+ {EXIT => 1}],
);
@Tests = triple_test \@Tests;