From 8e6a1ea8250137d1dd9b0a37b7a1d6d596a91099 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 20 Feb 2013 16:01:48 +0100 Subject: [PATCH] rpm: unmap rpm file before working with next one Signed-off-by: Denys Vlasenko --- archival/rpm.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/archival/rpm.c b/archival/rpm.c index b506f1779..86ba4dca4 100644 --- a/archival/rpm.c +++ b/archival/rpm.c @@ -305,16 +305,17 @@ int rpm_main(int argc, char **argv) while (*argv) { int rpm_fd; - unsigned offset; + unsigned mapsize; const char *source_rpm; rpm_fd = xopen(*argv++, O_RDONLY); G.mytags = rpm_gettags(rpm_fd, &G.tagcount); if (!G.mytags) bb_error_msg_and_die("error reading rpm header"); - offset = xlseek(rpm_fd, 0, SEEK_CUR); + mapsize = xlseek(rpm_fd, 0, SEEK_CUR); + mapsize = (mapsize + pagesize) & -(int)pagesize; /* Some NOMMU systems prefer MAP_PRIVATE over MAP_SHARED */ - G.map = mmap(0, (offset + pagesize) & (-(int)pagesize), PROT_READ, MAP_PRIVATE, rpm_fd, 0); + G.map = mmap(0, mapsize, PROT_READ, MAP_PRIVATE, rpm_fd, 0); //FIXME: error check? source_rpm = rpm_getstr(TAG_SOURCERPM, 0); @@ -386,6 +387,7 @@ int rpm_main(int argc, char **argv) } } } + munmap(G.map, mapsize); free(G.mytags); close(rpm_fd); }