diff options
Diffstat (limited to 'contrib/expat/xmlwf/readfilemap.c')
| -rwxr-xr-x | contrib/expat/xmlwf/readfilemap.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/contrib/expat/xmlwf/readfilemap.c b/contrib/expat/xmlwf/readfilemap.c index b68b2ce06e79..088dda5c23de 100755 --- a/contrib/expat/xmlwf/readfilemap.c +++ b/contrib/expat/xmlwf/readfilemap.c @@ -8,6 +8,18 @@ #include <stdlib.h> #include <stdio.h> +#ifdef __WATCOMC__ +#ifndef __LINUX__ +#include <io.h> +#else +#include <unistd.h> +#endif +#endif + +#ifdef __BEOS__ +#include <unistd.h> +#endif + #ifndef S_ISREG #ifndef S_IFREG #define S_IFREG _S_IFREG @@ -53,19 +65,29 @@ filemap(const char *name, return 0; } nbytes = sb.st_size; + /* malloc will return NULL with nbytes == 0, handle files with size 0 */ + if (nbytes == 0) { + static const char c = '\0'; + processor(&c, 0, name, arg); + close(fd); + return 1; + } p = malloc(nbytes); if (!p) { fprintf(stderr, "%s: out of memory\n", name); + close(fd); return 0; } n = read(fd, p, nbytes); if (n < 0) { perror(name); + free(p); close(fd); return 0; } if (n != nbytes) { fprintf(stderr, "%s: read unexpected number of bytes\n", name); + free(p); close(fd); return 0; } |
