summaryrefslogtreecommitdiff
path: root/lib/libalpm/util.c
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-06-03 14:37:51 -0500
committerDan McGee <dan@archlinux.org>2011-06-03 14:37:51 -0500
commitcc25576f8b54b3e975949ac7991a193053b519bc (patch)
tree546febcbf96be529f4326b526841ca4c2ec8c9de /lib/libalpm/util.c
parente68f5d9a30671419c853b255b32b2e9d0239c9f1 (diff)
downloadpacman-cc25576f8b54b3e975949ac7991a193053b519bc.tar.xz
Use standard errno codes in return from _alpm_archive_fgets
This allows us to not require the context (e.g. handle) when calling this function. Also beef up the checks in the two callers of this function to bail if the last return code is not ARCHIVE_EOF, which is the expected value. This requires a change to one of the pactest return codes and the overall result of the test, but results in a much safer operating condition whereby invalid database entries will stop the operation. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'lib/libalpm/util.c')
-rw-r--r--lib/libalpm/util.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index e25e19d3..5821bf9f 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -771,20 +771,19 @@ int _alpm_archive_fgets(struct archive *a, struct archive_read_buffer *b)
/* allocate our buffer, or ensure our existing one is big enough */
if(!b->line) {
/* set the initial buffer to the read block_size */
- CALLOC(b->line, b->block_size + 1, sizeof(char),
- RET_ERR(PM_ERR_MEMORY, -1));
+ CALLOC(b->line, b->block_size + 1, sizeof(char), return ENOMEM);
b->line_size = b->block_size + 1;
b->line_offset = b->line;
} else {
size_t needed = (size_t)((b->line_offset - b->line)
+ (i - b->block_offset) + 1);
if(needed > b->max_line_size) {
- RET_ERR(PM_ERR_MEMORY, -1);
+ return ERANGE;
}
if(needed > b->line_size) {
/* need to realloc + copy data to fit total length */
char *new;
- CALLOC(new, needed, sizeof(char), RET_ERR(PM_ERR_MEMORY, -1));
+ CALLOC(new, needed, sizeof(char), return ENOMEM);
memcpy(new, b->line, b->line_size);
b->line_size = needed;
b->line_offset = new + (b->line_offset - b->line);