[Box Backup-dev] COMMIT r545 - box/chris/general/lib/win32
boxbackup-dev at fluffy.co.uk
boxbackup-dev at fluffy.co.uk
Sun Mar 12 23:50:10 GMT 2006
Author: chris
Date: 2006-03-12 23:50:07 +0000 (Sun, 12 Mar 2006)
New Revision: 545
Modified:
box/chris/general/lib/win32/emu.cpp
Log:
* emu.cpp
- Open files with READ_CONTROL to give us access to the ACLs
- Force file size to zero for directories, since GetFileSizeEx returns
random results (sometimes a multiple of 4096 bytes, sometimes 0)
Modified: box/chris/general/lib/win32/emu.cpp
===================================================================
--- box/chris/general/lib/win32/emu.cpp 2006-03-12 23:04:47 UTC (rev 544)
+++ box/chris/general/lib/win32/emu.cpp 2006-03-12 23:50:07 UTC (rev 545)
@@ -555,8 +555,6 @@
// --------------------------------------------------------------------------
int emu_fstat(HANDLE hdir, struct stat * st)
{
- ULARGE_INTEGER conv;
-
if (hdir == INVALID_HANDLE_VALUE)
{
::syslog(LOG_ERR, "Error: invalid file handle in emu_fstat()");
@@ -584,6 +582,7 @@
memset(st, 0, sizeof(*st));
// This next example is how we get our INODE (equivalent) information
+ ULARGE_INTEGER conv;
conv.HighPart = fi.nFileIndexHigh;
conv.LowPart = fi.nFileIndexLow;
st->st_ino = (_ino_t)conv.QuadPart;
@@ -593,20 +592,29 @@
st->st_atime = ConvertFileTimeToTime_t(&fi.ftLastAccessTime);
st->st_mtime = ConvertFileTimeToTime_t(&fi.ftLastWriteTime);
- // size of the file
- LARGE_INTEGER st_size;
- if (!GetFileSizeEx(hdir, &st_size))
+ if (fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
- ::syslog(LOG_WARNING, "Failed to get file size: error %d",
- GetLastError());
- errno = EACCES;
- return -1;
+ st->st_size = 0;
}
+ else
+ {
+ // size of the file
+ LARGE_INTEGER st_size;
+ memset(&st_size, 0, sizeof(st_size));
- conv.HighPart = st_size.HighPart;
- conv.LowPart = st_size.LowPart;
- st->st_size = (_off_t)conv.QuadPart;
+ if (!GetFileSizeEx(hdir, &st_size))
+ {
+ ::syslog(LOG_WARNING, "Failed to get file size: "
+ "error %d", GetLastError());
+ errno = EACCES;
+ return -1;
+ }
+ conv.HighPart = st_size.HighPart;
+ conv.LowPart = st_size.LowPart;
+ st->st_size = (_off_t)conv.QuadPart;
+ }
+
// at the mo
st->st_uid = 0;
st->st_gid = 0;
@@ -668,7 +676,8 @@
}
HANDLE handle = CreateFileW(pBuffer,
- FILE_READ_ATTRIBUTES | FILE_LIST_DIRECTORY | FILE_READ_EA,
+ FILE_READ_ATTRIBUTES | FILE_LIST_DIRECTORY | FILE_READ_EA |
+ READ_CONTROL,
FILE_SHARE_READ | FILE_SHARE_DELETE | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
@@ -682,7 +691,7 @@
// at least one process must have the file open -
// in this case someone else does.
handle = CreateFileW(pBuffer,
- 0,
+ READ_CONTROL,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
More information about the Boxbackup-dev
mailing list