94 static uint64_t value;
95 uint64_t random_time_bits;
97 int save_errno = errno;
99 static const char letters[] =
100 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
102#define ATTEMPTS_MIN (62 * 62 * 62)
104#if ATTEMPTS_MIN < TMP_MAX
105 unsigned int attempts = TMP_MAX;
107 unsigned int attempts = ATTEMPTS_MIN;
110 len = strlen(
template);
111 if (len < 6 || memcmp(&
template[len - 6],
"XXXXXX", 6)) {
117 XXXXXX = &
template[len - 6];
120 random_time_bits = time(NULL);
123 mdb_thread_lock(&tmpname_lock);
124 value += random_time_bits ^ (pid * pid);
125 for (count = 0; count < attempts; value += 7777, ++count) {
129 XXXXXX[0] = letters[v % 62];
131 XXXXXX[1] = letters[v % 62];
133 XXXXXX[2] = letters[v % 62];
135 XXXXXX[3] = letters[v % 62];
137 XXXXXX[4] = letters[v % 62];
139 XXXXXX[5] = letters[v % 62];
143 mdb_thread_unlock(&tmpname_lock);
147 if (__lxstat64(_STAT_VER,
template, &st) < 0) {
148 if (errno == ENOENT) {
149 __set_errno(save_errno);
150 mdb_thread_unlock(&tmpname_lock);
155 mdb_thread_unlock(&tmpname_lock);
164 mdb_thread_unlock(&tmpname_lock);