[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Small TMPDIR fixes.
From: |
Mark Haigh |
Subject: |
[PATCH] Small TMPDIR fixes. |
Date: |
Mon, 05 Aug 2002 18:36:41 -0700 (PDT) |
Configuration Information [Automatically generated, do
not change]:
Machine: i686
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -DPROGRAM='bash'
-DCONF_HOSTTYPE='i686' -DCONF_OSTYPE='linux-gnu'
-DCONF_MACHTYPE='i686-pc-linux-gnu' -DCONF_VENDOR='pc'
-DSHELL -DHAVE_CONFIG_H -I. -I. -I./include -I./lib
-g -O2
uname output: Linux markh-laptop 2.4.19-gentoo-r7 #1
SMP Mon Jun 24 08:29:19 PDT 2002 i686 GenuineIntel
Machine Type: i686-pc-linux-gnu
Bash Version: 2.05b
Patch Level: 0
Release Status: release
Description:
Bash still uses the system tmp directory rather than
the one specified
in TMPDIR in several situations. When there's no
system tmp dir in
the usual places, or you're using per-user tmp
directories, this can
cause problems.
Repeat-By:
In Linux:
$ export TMPDIR=/home/mark/tmp
$ sleep 1234 << EOF &
> EOF
[1] 13170
su -c lsof -p 13170 | grep /tmp
sleep 13170 mark 0r REG 3,3 25 325386
/tmp/sh-thd-1028495363 (deleted)
This should be /home/mark/tmp/sh-thd-1028495363.
In Cygwin, there's also _cygwin_check_tmp () to muck
things up.
Fix:
Remove the MT_USETMPDIR flag, and always use TMPDIR by
default.
Fall back to the current behavior if TMPDIR is not
set. This has
been tested on Linux and Cygwin. This patch applies
cleanly to
bash-2.05b.0(1)-release. I've tried to respect the
style and
intent of the code being patched. Let me know if
there's something
you would like changed with it, and I'd be happy to do
it in order
to get this included. Thanks.
Mark Haigh
mfhaigh@DIRECTVInternet.com
--- externs.h.orig Sun Aug 4 16:17:25 2002
+++ externs.h Sun Aug 4 16:19:54 2002
@@ -315,9 +315,8 @@
extern void print_timeval ();
/* declarations for functions defined in
lib/sh/tmpfile.c */
-#define MT_USETMPDIR 0x0001
-#define MT_READWRITE 0x0002
-#define MT_USERANDOM 0x0004
+#define MT_READWRITE 0x0001
+#define MT_USERANDOM 0x0002
extern char *sh_mktmpname __P((char *, int));
extern int sh_mktmpfd __P((char *, int, char **));
--- builtins/fc.def.orig Sun Aug 4 16:10:04 2002
+++ builtins/fc.def Sun Aug 4 16:10:54 2002
@@ -332,7 +332,7 @@
else
{
numbering = 0;
- stream = sh_mktmpfp ("bash-fc",
MT_USERANDOM|MT_USETMPDIR, &fn);
+ stream = sh_mktmpfp ("bash-fc", MT_USERANDOM,
&fn);
if (stream == 0)
{
builtin_error ("cannot open temp file %s", fn ? fn
: "");
--- lib/sh/tmpfile.c.orig Sun Aug 4 16:25:22 2002
+++ lib/sh/tmpfile.c Sun Aug 4 16:25:27 2002
@@ -89,7 +89,7 @@
{
char *tdir;
- tdir = (flags & MT_USETMPDIR) ? get_string_value
("TMPDIR") : (char *)NULL;
+ tdir = get_string_value ("TMPDIR");
if (tdir == 0)
tdir = get_sys_tmpdir ();
--- shell.c.orig Sun Aug 4 17:15:42 2002
+++ shell.c Sun Aug 4 17:30:12 2002
@@ -286,12 +286,16 @@
{
struct stat sb;
- if (stat ("/tmp", &sb) < 0)
- internal_warning ("could not find /tmp, please
create!");
- else
+ /* Only check for /tmp if TMPDIR is not set. */
+ if (getenv("TMPDIR") == NULL)
{
- if (S_ISDIR (sb.st_mode) == 0)
- internal_warning ("/tmp must be a valid directory
name");
+ if (stat ("/tmp", &sb) < 0)
+ internal_warning ("TMPDIR or /tmp not found.
(hint: create /tmp)");
+ else
+ {
+ if (S_ISDIR (sb.st_mode) == 0)
+ internal_warning ("/tmp must be a valid
directory name.");
+ }
}
}
#endif /* __CYGWIN__ */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] Small TMPDIR fixes.,
Mark Haigh <=