commit bash-20190328 snapshot

This commit is contained in:
Chet Ramey
2019-04-01 15:44:20 -04:00
parent 31321bf1b2
commit befdddcbf1
30 changed files with 462 additions and 61 deletions
+67 -3
View File
@@ -2,7 +2,7 @@
* tmpfile.c - functions to create and safely open temp files for the shell.
*/
/* Copyright (C) 2000-2015 Free Software Foundation, Inc.
/* Copyright (C) 2000-2019 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
@@ -146,9 +146,17 @@ sh_mktmpname (nameroot, flags)
tdlen = strlen (tdir);
lroot = nameroot ? nameroot : DEFAULT_NAMEROOT;
if (nameroot == 0)
flags &= ~MT_TEMPLATE;
if ((flags & MT_TEMPLATE) && strlen (nameroot) > PATH_MAX)
flags &= ~MT_TEMPLATE;
#ifdef USE_MKTEMP
sprintf (filename, "%s/%s.XXXXXX", tdir, lroot);
if (flags & MT_TEMPLATE)
strcpy (filename, nameroot);
else
sprintf (filename, "%s/%s.XXXXXX", tdir, lroot);
if (mktemp (filename) == 0)
{
free (filename);
@@ -192,9 +200,17 @@ sh_mktmpfd (nameroot, flags, namep)
tdlen = strlen (tdir);
lroot = nameroot ? nameroot : DEFAULT_NAMEROOT;
if (nameroot == 0)
flags &= ~MT_TEMPLATE;
if ((flags & MT_TEMPLATE) && strlen (nameroot) > PATH_MAX)
flags &= ~MT_TEMPLATE;
#ifdef USE_MKSTEMP
sprintf (filename, "%s/%s.XXXXXX", tdir, lroot);
if (flags & MT_TEMPLATE)
strcpy (filename, nameroot);
else
sprintf (filename, "%s/%s.XXXXXX", tdir, lroot);
fd = mkstemp (filename);
if (fd < 0 || namep == 0)
{
@@ -245,3 +261,51 @@ sh_mktmpfp (nameroot, flags, namep)
close (fd);
return fp;
}
char *
sh_mktmpdir (nameroot, flags)
char *nameroot;
int flags;
{
char *filename, *tdir, *lroot, *dirname;
int fd, tdlen;
#ifdef USE_MKDTEMP
filename = (char *)xmalloc (PATH_MAX + 1);
tdir = get_tmpdir (flags);
tdlen = strlen (tdir);
lroot = nameroot ? nameroot : DEFAULT_NAMEROOT;
if (nameroot == 0)
flags &= ~MT_TEMPLATE;
if ((flags & MT_TEMPLATE) && strlen (nameroot) > PATH_MAX)
flags &= ~MT_TEMPLATE;
if (flags & MT_TEMPLATE)
strcpy (filename, nameroot);
else
sprintf (filename, "%s/%s.XXXXXX", tdir, lroot);
dirname = mkdtemp (filename);
if (dirname == 0)
{
free (filename);
filename = NULL;
}
return dirname;
#else /* !USE_MKDTEMP */
filename = (char *)NULL;
do
{
filename = sh_mktmpname (nameroot, flags);
fd = mkdir (filename, 0700);
if (fd == 0)
break;
free (filename);
filename = (char *)NULL;
}
while (fd < 0 && errno == EEXIST);
return (filename);
#endif /* !USE_MKDTEMP */
}