rpm: unmap rpm file before working with next one

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2013-02-20 16:01:48 +01:00
parent d4d4f3528e
commit 8e6a1ea825

View File

@ -305,16 +305,17 @@ int rpm_main(int argc, char **argv)
while (*argv) { while (*argv) {
int rpm_fd; int rpm_fd;
unsigned offset; unsigned mapsize;
const char *source_rpm; const char *source_rpm;
rpm_fd = xopen(*argv++, O_RDONLY); rpm_fd = xopen(*argv++, O_RDONLY);
G.mytags = rpm_gettags(rpm_fd, &G.tagcount); G.mytags = rpm_gettags(rpm_fd, &G.tagcount);
if (!G.mytags) if (!G.mytags)
bb_error_msg_and_die("error reading rpm header"); 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 */ /* 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? //FIXME: error check?
source_rpm = rpm_getstr(TAG_SOURCERPM, 0); 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); free(G.mytags);
close(rpm_fd); close(rpm_fd);
} }