You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by wr...@apache.org on 2001/09/05 06:43:28 UTC
cvs commit: apr/file_io/win32 filestat.c
wrowe 01/09/04 21:43:28
Modified: file_io/win32 filestat.c
Log:
Work around the fact that GetNamedSecurityInfoW for unicode pathnames
is an odd beast that doesn't accept \\?\ notation.
Submitted by: Mats Nilsson <ma...@xware.se>
Revision Changes Path
1.56 +12 -2 apr/file_io/win32/filestat.c
Index: filestat.c
===================================================================
RCS file: /home/cvs/apr/file_io/win32/filestat.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -r1.55 -r1.56
--- filestat.c 2001/08/15 21:02:53 1.55
+++ filestat.c 2001/09/05 04:43:28 1.56
@@ -226,13 +226,23 @@
sinf |= GROUP_SECURITY_INFORMATION;
if (wanted & APR_FINFO_PROT)
sinf |= DACL_SECURITY_INFORMATION;
- if (whatfile == MORE_OF_WFSPEC)
- rv = GetNamedSecurityInfoW((apr_wchar_t*)ufile,
+ if (whatfile == MORE_OF_WFSPEC) {
+ apr_wchar_t *wfile = (apr_wchar_t*) ufile;
+ int fix = 0;
+ if (wcsncmp(wfile, L"\\\\?\\", 4)) {
+ fix = 4;
+ if (wcsncmp(wfile + fix, L"UNC\\", 4))
+ wfile[6] = L'\\', fix = 6;
+ }
+ rv = GetNamedSecurityInfoW(wfile + fix,
SE_FILE_OBJECT, sinf,
((wanted & APR_FINFO_USER) ? &user : NULL),
((wanted & APR_FINFO_GROUP) ? &grp : NULL),
((wanted & APR_FINFO_PROT) ? &dacl : NULL),
NULL, &pdesc);
+ if (fix == 6)
+ wfile[6] = L'C';
+ }
else if (whatfile == MORE_OF_FSPEC)
rv = GetNamedSecurityInfoA((char*)ufile,
SE_FILE_OBJECT, sinf,