Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit87e6ed7

Browse files
committed
Add d_type to our Windows dirent emulation.
This allows us to skip some stat calls, by extending commit861c6e7 tocover Windows systems.Author: Juan José Santamaría Flecha <juanjo.santamaria@gmail.com>Reviewed-by: Alvaro Herrera <alvherre@2ndquadrant.com>Reviewed-by: Andres Freund <andres@anarazel.de>Reviewed-by: Magnus Hagander <magnus@hagander.net>Reviewed-by: Thomas Munro <thomas.munro@gmail.com>Discussion:https://postgr.es/m/CA%2BhUKG%2BFzxupGGN4GpUdbzZN%2Btn6FQPHo8w0Q%2BAPH5Wz8RG%2Bww%40mail.gmail.com
1 parent74ff281 commit87e6ed7

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

‎src/include/port/win32_msvc/dirent.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ struct dirent
1010
{
1111
longd_ino;
1212
unsigned shortd_reclen;
13+
unsignedchard_type;
1314
unsigned shortd_namlen;
1415
chard_name[MAX_PATH];
1516
};
@@ -20,4 +21,14 @@ DIR *opendir(const char *);
2021
structdirent*readdir(DIR*);
2122
intclosedir(DIR*);
2223

24+
/* File types for 'd_type'. */
25+
#defineDT_UNKNOWN0
26+
#defineDT_FIFO1
27+
#defineDT_CHR2
28+
#defineDT_DIR4
29+
#defineDT_BLK6
30+
#defineDT_REG8
31+
#defineDT_LNK10
32+
#defineDT_SOCK12
33+
#defineDT_WHT14
2334
#endif

‎src/port/dirent.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ opendir(const char *dirname)
6969
d->handle=INVALID_HANDLE_VALUE;
7070
d->ret.d_ino=0;/* no inodes on win32 */
7171
d->ret.d_reclen=0;/* not used on win32 */
72+
d->ret.d_type=DT_UNKNOWN;
7273

7374
returnd;
7475
}
@@ -105,6 +106,15 @@ readdir(DIR *d)
105106
}
106107
strcpy(d->ret.d_name,fd.cFileName);/* Both strings are MAX_PATH long */
107108
d->ret.d_namlen=strlen(d->ret.d_name);
109+
/* The only identified types are: directory, regular file or symbolic link */
110+
if ((fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)!=0)
111+
d->ret.d_type=DT_DIR;
112+
/* For reparse points dwReserved0 field will contain the ReparseTag */
113+
elseif ((fd.dwFileAttributes&FILE_ATTRIBUTE_REPARSE_POINT)!=0&&
114+
(fd.dwReserved0==IO_REPARSE_TAG_MOUNT_POINT))
115+
d->ret.d_type=DT_LNK;
116+
else
117+
d->ret.d_type=DT_REG;
108118

109119
return&d->ret;
110120
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp