commit ca0e75ecd18bfe7d40def0d014edc19741063818
parent 8ee63fbd5348b89f49dd3f746f15fa19f0a7be4e
Author: Christian Grothoff <christian@grothoff.org>
Date: Mon, 26 Sep 2005 14:21:56 +0000
better error handling
Diffstat:
2 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/src/main/extract.c b/src/main/extract.c
@@ -600,11 +600,17 @@ main (int argc, char *argv[])
_("%% BiBTeX file\n"));
for (i = optind; i < argc; i++)
{
- if (0 != ACCESS(argv[i], R_OK)) {
+ errno = 0;
+ keywords = EXTRACTOR_getKeywords (extractors, argv[i]);
+ if (0 != errno) {
+ if (verbose == YES) {
+ fprintf(stderr,
+ "%s: %s: %s\n",
+ argv[0], argv[i], strerror(errno));
+ }
ret = 1;
continue;
}
- keywords = EXTRACTOR_getKeywords (extractors, argv[i]);
if (duplicates != -1 || bibtex == YES)
keywords = EXTRACTOR_removeDuplicateKeywords (keywords, duplicates);
if (verbose == YES && bibtex == NO)
diff --git a/src/main/extractor.c b/src/main/extractor.c
@@ -883,6 +883,7 @@ EXTRACTOR_getKeywords (EXTRACTOR_ExtractorList * extractor,
void * buffer;
struct stat fstatbuf;
size_t size;
+ int eno;
#ifdef O_LARGEFILE
file = fileopen(filename, O_RDONLY | O_LARGEFILE);
@@ -904,17 +905,18 @@ EXTRACTOR_getKeywords (EXTRACTOR_ExtractorList * extractor,
if (size > MAX_READ)
size = MAX_READ; /* do not mmap/read more than 1 GB! */
buffer = MMAP(NULL, size, PROT_READ, MAP_PRIVATE, file, 0);
- close(file);
- if ( (buffer == NULL) || (buffer == (void *) -1) )
+ if ( (buffer == NULL) || (buffer == (void *) -1) ) {
+ eno = errno;
+ close(file);
+ errno = eno;
return NULL;
+ }
result = getKeywords(extractor,
filename,
buffer,
size);
- if (size > 0)
- MUNMAP (buffer, size);
- else
- free(buffer);
+ MUNMAP (buffer, size);
+ close(file);
return result;
}