[tor-commits] [tor/master] Merge remote-tracking branch 'public/getfilesize_64'
nickm at torproject.org
nickm at torproject.org
Tue Jun 5 15:15:40 UTC 2012
commit d09a3ecd01330e2ec5da942a0469a37416da75ed
Merge: b482c87 e7d3493
Author: Nick Mathewson <nickm at torproject.org>
Date: Tue Jun 5 11:10:42 2012 -0400
Merge remote-tracking branch 'public/getfilesize_64'
Conflicts:
src/common/compat.c
The getfilesize change conflicted with the removal of file_handle
from the windows tor_mmap_t.
changes/getfilesize_64 | 3 +++
src/common/compat.c | 24 ++++++++++++++++--------
2 files changed, 19 insertions(+), 8 deletions(-)
diff --cc src/common/compat.c
index 87fe84c,00ebbe4..334ea1b
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@@ -228,40 -175,48 +228,48 @@@ tor_mmap_file(const char *filename
TCHAR tfilename[MAX_PATH]= {0};
tor_mmap_t *res = tor_malloc_zero(sizeof(tor_mmap_t));
int empty = 0;
+ HANDLE file_handle = INVALID_HANDLE_VALUE;
+ DWORD size_low, size_high;
+ uint64_t real_size;
- res->file_handle = INVALID_HANDLE_VALUE;
res->mmap_handle = NULL;
#ifdef UNICODE
mbstowcs(tfilename,filename,MAX_PATH);
#else
strlcpy(tfilename,filename,MAX_PATH);
#endif
- res->file_handle = CreateFile(tfilename,
- GENERIC_READ, FILE_SHARE_READ,
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- 0);
+ file_handle = CreateFile(tfilename,
+ GENERIC_READ, FILE_SHARE_READ,
+ NULL,
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL,
+ 0);
- if (res->file_handle == INVALID_HANDLE_VALUE)
+ if (file_handle == INVALID_HANDLE_VALUE)
goto win_err;
- res->size = GetFileSize(file_handle, NULL);
- size_low = GetFileSize(res->file_handle, &size_high);
++ size_low = GetFileSize(file_handle, &size_high);
- if (res->size == 0) {
+ if (size_low == INVALID_FILE_SIZE && GetLastError() != NO_ERROR) {
+ log_warn(LD_FS,"Error getting size of \"%s\".",filename);
+ goto win_err;
+ }
+ if (size_low == 0 && size_high == 0) {
log_info(LD_FS,"File \"%s\" is empty. Ignoring.",filename);
empty = 1;
goto err;
}
+ real_size = (((uint64_t)size_high)<<32) | size_low;
+ if (real_size > SIZE_MAX) {
+ log_warn(LD_FS,"File \"%s\" is too big to map; not trying.",filename);
+ goto err;
+ }
+ res->size = real_size;
- res->mmap_handle = CreateFileMapping(res->file_handle,
+ res->mmap_handle = CreateFileMapping(file_handle,
NULL,
PAGE_READONLY,
- #if SIZEOF_SIZE_T > 4
- (res->base.size >> 32),
- #else
- 0,
- #endif
- (res->size & 0xfffffffful),
+ size_high,
+ size_low,
NULL);
if (res->mmap_handle == NULL)
goto win_err;
More information about the tor-commits
mailing list