Fix file access for xmlwf compiled with XML_UNICODE_WCHAR_T on MinGW
This commit is contained in:
parent
742fbf024f
commit
71b533dae1
@ -70,8 +70,8 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "filemap.h"
|
|
||||||
#include "xmltchar.h"
|
#include "xmltchar.h"
|
||||||
|
#include "filemap.h"
|
||||||
|
|
||||||
int
|
int
|
||||||
filemap(const tchar *name,
|
filemap(const tchar *name,
|
||||||
|
@ -43,11 +43,18 @@
|
|||||||
#define MAP_FILE 0
|
#define MAP_FILE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "xmltchar.h"
|
||||||
#include "filemap.h"
|
#include "filemap.h"
|
||||||
|
|
||||||
|
#ifdef XML_UNICODE_WCHAR_T
|
||||||
|
#define XML_FMT_STR "ls"
|
||||||
|
#else
|
||||||
|
#define XML_FMT_STR "s"
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
filemap(const char *name,
|
filemap(const tchar *name,
|
||||||
void (*processor)(const void *, size_t, const char *, void *arg),
|
void (*processor)(const void *, size_t, const tchar *, void *arg),
|
||||||
void *arg)
|
void *arg)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
@ -55,19 +62,19 @@ filemap(const char *name,
|
|||||||
struct stat sb;
|
struct stat sb;
|
||||||
void *p;
|
void *p;
|
||||||
|
|
||||||
fd = open(name, O_RDONLY);
|
fd = topen(name, O_RDONLY);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
perror(name);
|
tperror(name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (fstat(fd, &sb) < 0) {
|
if (fstat(fd, &sb) < 0) {
|
||||||
perror(name);
|
tperror(name);
|
||||||
close(fd);
|
close(fd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!S_ISREG(sb.st_mode)) {
|
if (!S_ISREG(sb.st_mode)) {
|
||||||
close(fd);
|
close(fd);
|
||||||
fprintf(stderr, "%s: not a regular file\n", name);
|
fprintf(stderr, "%" XML_FMT_STR ": not a regular file\n", name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (sb.st_size > XML_MAX_CHUNK_LEN) {
|
if (sb.st_size > XML_MAX_CHUNK_LEN) {
|
||||||
@ -86,7 +93,7 @@ filemap(const char *name,
|
|||||||
p = (void *)mmap((void *)0, (size_t)nbytes, PROT_READ,
|
p = (void *)mmap((void *)0, (size_t)nbytes, PROT_READ,
|
||||||
MAP_FILE|MAP_PRIVATE, fd, (off_t)0);
|
MAP_FILE|MAP_PRIVATE, fd, (off_t)0);
|
||||||
if (p == (void *)-1) {
|
if (p == (void *)-1) {
|
||||||
perror(name);
|
tperror(name);
|
||||||
close(fd);
|
close(fd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,9 @@
|
|||||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Ensures compile-time constants are consistent */
|
||||||
|
#include "expat_external.h"
|
||||||
|
|
||||||
#ifdef XML_UNICODE
|
#ifdef XML_UNICODE
|
||||||
#ifndef XML_UNICODE_WCHAR_T
|
#ifndef XML_UNICODE_WCHAR_T
|
||||||
#error xmlwf requires a 16-bit Unicode-compatible wchar_t
|
#error xmlwf requires a 16-bit Unicode-compatible wchar_t
|
||||||
|
Loading…
Reference in New Issue
Block a user