[git commit] rpm: unmap rpm file before working with next one

Denys Vlasenko vda.linux at googlemail.com
Wed Feb 20 15:01:48 UTC 2013


commit: http://git.busybox.net/busybox/commit/?id=8e6a1ea8250137d1dd9b0a37b7a1d6d596a91099
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 archival/rpm.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/archival/rpm.c b/archival/rpm.c
index b506f17..86ba4dc 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);
 	}


More information about the busybox-cvs mailing list