1 /* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
2 See the file COPYING for copying permission.
6 #define WIN32_LEAN_AND_MEAN 1
8 #ifdef XML_UNICODE_WCHAR_T
17 #endif /* XML_UNICODE */
23 static void win32perror(const TCHAR *);
26 filemap(const TCHAR *name,
27 void (*processor)(const void *, size_t, const TCHAR *, void *arg),
36 f = CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
37 FILE_FLAG_SEQUENTIAL_SCAN, NULL);
38 if (f == INVALID_HANDLE_VALUE) {
42 size = GetFileSize(f, &sizeHi);
43 if (size == (DWORD)-1) {
48 _ftprintf(stderr, _T("%s: bigger than 2Gb\n"), name);
51 /* CreateFileMapping barfs on zero length files */
53 static const char c = '\0';
54 processor(&c, 0, name, arg);
58 m = CreateFileMapping(f, NULL, PAGE_READONLY, 0, 0, NULL);
64 p = MapViewOfFile(m, FILE_MAP_READ, 0, 0, 0);
71 processor(p, size, name, arg);
79 win32perror(const TCHAR *s)
82 if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
83 | FORMAT_MESSAGE_FROM_SYSTEM,
86 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
90 _ftprintf(stderr, _T("%s: %s"), s, buf);
95 _ftprintf(stderr, _T("%s: unknown Windows error\n"), s);