PostgreSQL Source Code: src/port/dirent.c Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16#ifndef FRONTEND

18#else

20#endif

21

23

24

26{

28 struct dirent ret;

30};

31

34{

35 DWORD attr;

37

38

39 attr = GetFileAttributes(dirname);

40 if (attr == INVALID_FILE_ATTRIBUTES)

41 {

42 errno = ENOENT;

43 return NULL;

44 }

45 if ((attr & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)

46 {

47 errno = ENOTDIR;

48 return NULL;

49 }

50

52 if (!d)

53 {

54 errno = ENOMEM;

55 return NULL;

56 }

59 {

60 errno = ENOMEM;

62 return NULL;

63 }

64 strcpy(d->dirname, dirname);

67 strcat(d->dirname, "\\");

68 strcat(d->dirname, "*");

69 d->handle = INVALID_HANDLE_VALUE;

70 d->ret.d_ino = 0;

71 d->ret.d_reclen = 0;

73

74 return d;

75}

76

79{

80 WIN32_FIND_DATA fd;

81

82 if (d->handle == INVALID_HANDLE_VALUE)

83 {

85 if (d->handle == INVALID_HANDLE_VALUE)

86 {

87

88 if (GetLastError() == ERROR_FILE_NOT_FOUND)

89 errno = 0;

90 else

92 return NULL;

93 }

94 }

95 else

96 {

97 if (!FindNextFile(d->handle, &fd))

98 {

99

100 if (GetLastError() == ERROR_NO_MORE_FILES)

101 errno = 0;

102 else

104 return NULL;

105 }

106 }

107 strcpy(d->ret.d_name, fd.cFileName);

109

110

111

112

113

114

115 if ((fd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0 &&

116 (fd.dwReserved0 == IO_REPARSE_TAG_MOUNT_POINT))

118 else if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)

120 else

122

123 return &d->ret;

124}

125

126int

128{

129 int ret = 0;

130

131 if (d->handle != INVALID_HANDLE_VALUE)

132 ret = !FindClose(d->handle);

135

136 return ret;

137}

struct dirent * readdir(DIR *d)

DIR * opendir(const char *dirname)

static int fd(const char *x, int i)

void _dosmaperr(unsigned long)