podman

Форк
0
/
rootless_freebsd.c 
63 строки · 1.4 Кб
1
#include <dirent.h>
2
#include <stdio.h>
3
#include <stdlib.h>
4
#include <unistd.h>
5
#include <sys/select.h>
6

7
static int open_files_max_fd;
8
static fd_set *open_files_set;
9

10
int
11
is_fd_inherited(int fd)
12
{
13
  if (open_files_set == NULL || fd > open_files_max_fd || fd < 0)
14
    return 0;
15

16
  return FD_ISSET(fd % FD_SETSIZE, &(open_files_set[fd / FD_SETSIZE])) ? 1 : 0;
17
}
18

19
static void __attribute__((constructor)) init()
20
{
21
  /* Store how many FDs were open before the Go runtime kicked in.  */
22
  DIR* d = opendir ("/dev/fd");
23
  if (d)
24
    {
25
      struct dirent *ent;
26
      size_t size = 0;
27

28
      for (ent = readdir (d); ent; ent = readdir (d))
29
        {
30
          int fd;
31

32
          if (ent->d_name[0] == '.')
33
            continue;
34

35
          fd = atoi (ent->d_name);
36
          if (fd == dirfd (d)) {
37
            continue;
38
          }
39

40
          if (fd >= size * FD_SETSIZE)
41
            {
42
              int i;
43
              size_t new_size;
44

45
              new_size = (fd / FD_SETSIZE) + 1;
46
              open_files_set = realloc (open_files_set, new_size * sizeof (fd_set));
47
              if (open_files_set == NULL)
48
                _exit (EXIT_FAILURE);
49

50
              for (i = size; i < new_size; i++)
51
                FD_ZERO (&(open_files_set[i]));
52

53
              size = new_size;
54
            }
55

56
          if (fd > open_files_max_fd) {
57
            open_files_max_fd = fd;
58
          }
59

60
          FD_SET (fd % FD_SETSIZE, &(open_files_set[fd / FD_SETSIZE]));
61
        }
62
    }
63
}
64

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.