bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bug-gnulib] tempname.c patch from libc


From: Bruno Haible
Subject: Re: [bug-gnulib] tempname.c patch from libc
Date: Wed, 20 Sep 2006 22:16:36 +0200
User-agent: KMail/1.9.1

>       Import this patch from libc:
> 
>       2006-04-07  Ulrich Drepper  <address@hidden>
> 
>       * lib/tempname.c (__gen_tempname): Change attempts_min
>       into a macro.  Use preprocessor to decide how to initialize
>       attempts [Coverity CID 67].

And I'm doing likewise for mkdtemp.c:

2006-09-20  Bruno Haible  <address@hidden>

        * mkdtemp.c: Import from libc.
        2006-04-07  Ulrich Drepper  <address@hidden>
                * sysdeps/posix/tempname.c (__gen_tempname): Change
                attempts_min into a macro.  Use preprocessor to decide how to
                initialize attempts [Coverity CID 67].
        2001-11-27  Paul Eggert  <address@hidden>
                * sysdeps/posix/tempname.c (__gen_tempname): Try at least
                ATTEMPTS_MIN or TMP_MAX times, whichever is greater.

*** mkdtemp.c   14 Sep 2006 14:18:36 -0000      1.11
--- mkdtemp.c   20 Sep 2006 20:15:26 -0000
***************
*** 114,122 ****
    char *XXXXXX;
    static uint64_t value;
    uint64_t random_time_bits;
!   int count, fd = -1;
    int save_errno = errno;
  
    len = strlen (tmpl);
    if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX"))
      {
--- 114,139 ----
    char *XXXXXX;
    static uint64_t value;
    uint64_t random_time_bits;
!   unsigned int count;
!   int fd = -1;
    int save_errno = errno;
  
+   /* A lower bound on the number of temporary files to attempt to
+      generate.  The maximum total number of temporary file names that
+      can exist for a given template is 62**6.  It should never be
+      necessary to try all these combinations.  Instead if a reasonable
+      number of names is tried (we define reasonable as 62**3) fail to
+      give the system administrator the chance to remove the problems.  */
+ #define ATTEMPTS_MIN (62 * 62 * 62)
+ 
+   /* The number of times to attempt to generate a temporary file.  To
+      conform to POSIX, this must be no smaller than TMP_MAX.  */
+ #if ATTEMPTS_MIN < TMP_MAX
+   unsigned int attempts = TMP_MAX;
+ #else
+   unsigned int attempts = ATTEMPTS_MIN;
+ #endif
+ 
    len = strlen (tmpl);
    if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX"))
      {
***************
*** 143,149 ****
  #endif
    value += random_time_bits ^ __getpid ();
  
!   for (count = 0; count < TMP_MAX; value += 7777, ++count)
      {
        uint64_t v = value;
  
--- 160,166 ----
  #endif
    value += random_time_bits ^ __getpid ();
  
!   for (count = 0; count < attempts; value += 7777, ++count)
      {
        uint64_t v = value;
  




reply via email to

[Prev in Thread] Current Thread [Next in Thread]