Функциональные программисты имеют собственную версию UML, она называется Теория категорий .
(Для этого есть определенная правда, но она предназначена для чтения с помощью юмора ).
Сегодня я использую «creat» вместо «open» в V2.21.0 (wrapper.c-int git_mkstemps_mode (шаблон char *, int суффикс_len, режим int), режим - 0600). Тогда ладно.
507 for (count = 0; count < TMP_MAX; ++count) {
508 uint64_t v = value;
509 /* Fill in the random bits. */
510 filename_template[0] = letters[v % num_letters]; v /= num_letters;
511 filename_template[1] = letters[v % num_letters]; v /= num_letters;
512 filename_template[2] = letters[v % num_letters]; v /= num_letters;
513 filename_template[3] = letters[v % num_letters]; v /= num_letters;
514 filename_template[4] = letters[v % num_letters]; v /= num_letters;
515 filename_template[5] = letters[v % num_letters]; v /= num_letters;
516
517 // fd = open(pattern, O_CREAT | O_EXCL | O_RDWR, mode);
518 fd = creat(pattern, mode);
519 if (fd >= 0)
520 return fd;
521 /*
522 * Fatal error (EPERM, ENOSPC etc).
523 * It doesn't make sense to loop.
524 */
525 if (errno != EEXIST)
526 break;
527 /*
528 * This is a random value. It is only necessary that
529 * the next TMP_MAX values generated by adding 7777 to
530 * VALUE are different with (module 2^32).
531 */
532 value += 7777;
533 }