From 791cf6f05bc71118925343528edd44fd4a671bb3 Mon Sep 17 00:00:00 2001 From: Timo Teras Date: Fri, 7 Nov 2008 19:18:53 +0200 Subject: [PATCH] pkg: speed up indexing of version 2 .apks --- src/io.c | 18 ++++++++++++++++-- src/package.c | 8 +++++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/io.c b/src/io.c index 81e3de3..418c7f8 100644 --- a/src/io.c +++ b/src/io.c @@ -183,12 +183,22 @@ static void is_bs_close(void *stream, csum_t csum) struct apk_istream_bstream *isbs = container_of(stream, struct apk_istream_bstream, bs); - if (csum != NULL) + if (csum != NULL) { + size_t size; + + do { + size = isbs->is->read(isbs->is, isbs->buffer, + sizeof(isbs->buffer)); + csum_process(&isbs->csum_ctx, isbs->buffer, size); + } while (size == sizeof(isbs->buffer)); + csum_finish(&isbs->csum_ctx, csum); + } isbs->is->close(isbs->is); free(isbs); } + struct apk_bstream *apk_bstream_from_istream(struct apk_istream *istream) { struct apk_istream_bstream *isbs; @@ -238,8 +248,12 @@ static void mmap_close(void *stream, csum_t csum) struct apk_mmap_bstream *mbs = container_of(stream, struct apk_mmap_bstream, bs); - if (csum != NULL) + if (csum != NULL) { + if (mbs->pos != mbs->size) + csum_process(&mbs->csum_ctx, &mbs->ptr[mbs->pos], + mbs->size - mbs->pos); csum_finish(&mbs->csum_ctx, csum); + } munmap(mbs->ptr, mbs->size); free(mbs); diff --git a/src/package.c b/src/package.c index 9132b18..44cc387 100644 --- a/src/package.c +++ b/src/package.c @@ -54,8 +54,10 @@ static apk_blob_t trim(apk_blob_t str) if (str.ptr == NULL || str.len < 1) return str; - if (str.ptr[str.len-2] == '\n') + if (str.ptr[str.len-1] == '\n') { + str.ptr[str.len-1] = 0; return APK_BLOB_PTR_LEN(str.ptr, str.len-1); + } return str; } @@ -281,9 +283,9 @@ static int read_info_entry(void *ctx, const struct apk_archive_entry *ae, apk_blob_t blob = apk_blob_from_istream(is, ae->size); apk_blob_for_each_segment(blob, "\n", read_info_line, ctx); free(blob.ptr); - /* FIXME: all done after checking if .INSTALL exists */ - return 0; + return 1; } + /* FIXME: Check for .INSTALL */ } else if (strncmp(ae->name, "var/db/apk/", 11) == 0) { /* APK 1.0 format */ if (!S_ISREG(ae->mode))