This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Libiberty for VMS - mkstemps.c don't mix case
- From: Douglas B Rupp <rupp at gnat dot com>
- To: dj at redhat dot com, ian at airs dot com
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Wed, 22 Jul 2009 17:38:43 -0700
- Subject: [PATCH] Libiberty for VMS - mkstemps.c don't mix case
VMS temp files must be case insensitive.
Tested on x86-64-linux-gnu
--Douglas B Rupp
AdaCore
2009-07-22 Douglas B Rupp <rupp@gnat.com>
* mkstemps.c (mkstemps): Don't use mixed case on VMS.
diff -rupN libiberty/mkstemps.c libiberty/mkstemps.c
--- libiberty/mkstemps.c 2008-07-31 14:22:09.000000000 -0700
+++ libiberty/mkstemps.c 2009-01-21 14:40:34.000000000 -0800
@@ -77,8 +77,8 @@ reading and writing.
int
mkstemps (char *pattern, int suffix_len)
{
- static const char letters[]
- = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+ char *letters;
+ int nletters = 0;
static gcc_uint64_t value;
#ifdef HAVE_GETTIMEOFDAY
struct timeval tv;
@@ -87,6 +87,21 @@ mkstemps (char *pattern, int suffix_len)
size_t len;
int count;
+ if (nletters == 0)
+ {
+ char *gletters = getenv ("GNU_MKSTEMPS_LETTERS");
+ if (gletters)
+ letters = strdup (gletters);
+ else
+ letters = strdup
+#ifdef VMS
+ ("abcdefghijklmnopqrstuvwxyz0123456789");
+#else
+ ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
+#endif
+ nletters = (sizeof letters) - 1;
+ }
+
len = strlen (pattern);
if ((int) len < 6 + suffix_len
@@ -111,17 +126,17 @@ mkstemps (char *pattern, int suffix_len)
int fd;
/* Fill in the random bits. */
- XXXXXX[0] = letters[v % 62];
- v /= 62;
- XXXXXX[1] = letters[v % 62];
- v /= 62;
- XXXXXX[2] = letters[v % 62];
- v /= 62;
- XXXXXX[3] = letters[v % 62];
- v /= 62;
- XXXXXX[4] = letters[v % 62];
- v /= 62;
- XXXXXX[5] = letters[v % 62];
+ XXXXXX[0] = letters[v % nletters];
+ v /= nletters;
+ XXXXXX[1] = letters[v % nletters];
+ v /= nletters;
+ XXXXXX[2] = letters[v % nletters];
+ v /= nletters;
+ XXXXXX[3] = letters[v % nletters];
+ v /= nletters;
+ XXXXXX[4] = letters[v % nletters];
+ v /= nletters;
+ XXXXXX[5] = letters[v % nletters];
fd = open (pattern, O_BINARY|O_RDWR|O_CREAT|O_EXCL, 0600);
if (fd >= 0)