Changeset 3001 in kBuild
- Timestamp:
- Nov 5, 2016 8:03:21 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/src/lib/nt/fts-nt.c ¶
r3000 r3001 85 85 #include "nthlp.h" 86 86 #include "ntdir.h" 87 #include <stdio.h>//debug 87 88 88 89 static FTSENT *fts_alloc(FTS *sp, char const *name, size_t namelen, wchar_t const *wcsname, size_t cwcname); … … 116 117 #define MAX(a, b) ( (a) >= (b) ? (a) : (b) ) 117 118 118 #define AT_SYMLINK_NOFOLLOW 1119 #define fstatat(hDir, pszPath, pStat, fFlags) birdStatAt((hDir), (pszPath), (pStat), (fFlags) != AT_SYMLINK_NOFOLLOW)120 119 #define FTS_NT_DUMMY_SYMFD_VALUE ((HANDLE)~(intptr_t)(2)) /* current process */ 121 120 … … 313 312 * known that the path will fit. 314 313 */ 315 314 if (!(sp->fts_options & FTS_NO_ANSI)) { 316 315 char *cp; 317 316 len = p->fts_pathlen = p->fts_namelen; … … 711 710 if (cur->fts_parent->fts_dirfd != INVALID_HANDLE_VALUE) { 712 711 /* (This works fine for symlinks too, since we follow them.) */ 713 cur->fts_dirfd = birdOpenFileEx (cur->fts_parent->fts_dirfd,714 cur->fts_name,715 716 717 718 719 720 712 cur->fts_dirfd = birdOpenFileExW(cur->fts_parent->fts_dirfd, 713 cur->fts_wcsname, 714 FILE_READ_DATA | SYNCHRONIZE, 715 FILE_ATTRIBUTE_NORMAL, 716 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 717 FILE_OPEN, 718 FILE_DIRECTORY_FILE | FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT, 719 OBJ_CASE_INSENSITIVE); 721 720 } else { 722 cur->fts_dirfd = birdOpenFile(cur->fts_accpath, 723 FILE_READ_DATA | SYNCHRONIZE, 724 FILE_ATTRIBUTE_NORMAL, 725 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 726 FILE_OPEN, 727 FILE_DIRECTORY_FILE | FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT, 728 OBJ_CASE_INSENSITIVE); 729 } 721 cur->fts_dirfd = birdOpenFileW(cur->fts_wcsaccpath, 722 FILE_READ_DATA | SYNCHRONIZE, 723 FILE_ATTRIBUTE_NORMAL, 724 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 725 FILE_OPEN, 726 FILE_DIRECTORY_FILE | FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT, 727 OBJ_CASE_INSENSITIVE); 728 } 729 if (cur->fts_dirfd != INVALID_HANDLE_VALUE) { /* likely */ } 730 else goto l_open_err; 731 730 732 } else { 731 733 fDirOpenFlags |= BIRDDIR_F_RESTART_SCAN; … … 733 735 dirp = birdDirOpenFromHandle(cur->fts_dirfd, NULL, fDirOpenFlags); 734 736 if (dirp == NULL) { 737 l_open_err: 735 738 if (type == BREAD) { 736 739 cur->fts_info = FTS_DNR; … … 866 869 { 867 870 int saved_errno; 868 const char *path;871 const wchar_t *wcspath; 869 872 870 873 if (dfd == INVALID_HANDLE_VALUE) { 871 path = p->fts_accpath;874 wcspath = p->fts_wcsaccpath; 872 875 } else { 873 path = p->fts_name;876 wcspath = p->fts_wcsname; 874 877 } 875 878 … … 880 883 */ 881 884 if (ISSET(FTS_LOGICAL) || follow) { 882 if ( fstatat(dfd, path, &p->fts_stat, 0)) {885 if (birdStatAtW(dfd, wcspath, &p->fts_stat, 1 /*fFollowLink*/)) { 883 886 saved_errno = errno; 884 if ( fstatat(dfd, path, &p->fts_stat, AT_SYMLINK_NOFOLLOW)) {887 if (birdStatAtW(dfd, wcspath, &p->fts_stat, 0 /*fFollowLink*/)) { 885 888 p->fts_errno = saved_errno; 886 889 goto err; … … 890 893 return (FTS_SLNONE); 891 894 } 892 } else if ( fstatat(dfd, path, &p->fts_stat, AT_SYMLINK_NOFOLLOW)) {895 } else if (birdStatAtW(dfd, wcspath, &p->fts_stat, 0 /*fFollowLink*/)) { 893 896 p->fts_errno = errno; 894 897 err: memset(&p->fts_stat, 0, sizeof(struct stat)); … … 1009 1012 p->fts_wcsname = (wchar_t *)(p + 1); 1010 1013 memcpy(p->fts_wcsname, wcsname, cwcname * sizeof(wchar_t)); 1011 p->fts_wcsname[cwcname] ;1014 p->fts_wcsname[cwcname] = '\0'; 1012 1015 p->fts_cwcname = cwcname; 1013 1016 if (!(sp->fts_options & FTS_NO_ANSI)) {
Note:
See TracChangeset
for help on using the changeset viewer.