diff options
author | cokane <cokane@FreeBSD.org> | 2008-05-08 13:51:16 +0000 |
---|---|---|
committer | cokane <cokane@FreeBSD.org> | 2008-05-08 13:51:16 +0000 |
commit | eef7fc6660961eb9e0913c4fe68b72df0f9fb8c3 (patch) | |
tree | 140a049e6dfd3941649feaf205e3a527a7543b00 /contrib/expat/xmlwf/readfilemap.c | |
parent | 676528b41eb1d7ef205f19c99dcb9585d9105d85 (diff) | |
download | FreeBSD-src-eef7fc6660961eb9e0913c4fe68b72df0f9fb8c3.zip FreeBSD-src-eef7fc6660961eb9e0913c4fe68b72df0f9fb8c3.tar.gz |
Virgin import (trimmed) of eXpat v2.0.1. Discussed and tested with
sam and phk who are the two consumers of this library. If there is
any other fallout, email me and I will take care of it.
Approved by: sam, phk
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 b68b2ce..088dda5 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; } |