10 // Implementation based on GLIBC implementation.
12 static const char letters[] =
13 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
15 static uint64_t value;
17 const unsigned int ATTEMPTS_MIN = (62 * 62 * 62);
19 int save_errno = errno;
21 size_t len = strlen(tmpl);
22 if (len < 6 || strcmp(&tmpl[len - 6], "XXXXXX"))
28 char *XXXXXX = &tmpl[len - 6];
30 uint64_t random_time_bits = time(NULL);
32 value += (random_time_bits ^ getpid());
35 for (count = 0; count < ATTEMPTS_MIN; value += 7777, ++count)
39 XXXXXX[0] = letters[v % 62];
41 XXXXXX[1] = letters[v % 62];
43 XXXXXX[2] = letters[v % 62];
45 XXXXXX[3] = letters[v % 62];
47 XXXXXX[4] = letters[v % 62];
49 XXXXXX[5] = letters[v % 62];