libextractor

GNU libextractor
Log | Files | Refs | Submodules | README | LICENSE

commit ca0e75ecd18bfe7d40def0d014edc19741063818
parent 8ee63fbd5348b89f49dd3f746f15fa19f0a7be4e
Author: Christian Grothoff <christian@grothoff.org>
Date:   Mon, 26 Sep 2005 14:21:56 +0000

better error handling

Diffstat:
Msrc/main/extract.c | 10++++++++--
Msrc/main/extractor.c | 14++++++++------
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; }