From 4aca87515a5083ae0e31ce3177189fd43b6d05ac Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sat, 3 Jan 2015 13:58:15 +0100 Subject: patch to Vanilla Tomato 1.28 --- release/src/router/busybox/archival/rpm2cpio.c | 76 ++++++++++---------------- 1 file changed, 29 insertions(+), 47 deletions(-) (limited to 'release/src/router/busybox/archival/rpm2cpio.c') diff --git a/release/src/router/busybox/archival/rpm2cpio.c b/release/src/router/busybox/archival/rpm2cpio.c index bb9f6957..ee938716 100644 --- a/release/src/router/busybox/archival/rpm2cpio.c +++ b/release/src/router/busybox/archival/rpm2cpio.c @@ -4,60 +4,43 @@ * * Copyright (C) 2001 by Laurence Anderson * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */ -#include -#include /* For ntohl & htonl function */ -#include -#include -#include -#include "busybox.h" +#include "libbb.h" #include "unarchive.h" #define RPM_MAGIC "\355\253\356\333" #define RPM_HEADER_MAGIC "\216\255\350" struct rpm_lead { - unsigned char magic[4]; - u_int8_t major, minor; - u_int16_t type; - u_int16_t archnum; - char name[66]; - u_int16_t osnum; - u_int16_t signature_type; - char reserved[16]; + unsigned char magic[4]; + uint8_t major, minor; + uint16_t type; + uint16_t archnum; + char name[66]; + uint16_t osnum; + uint16_t signature_type; + char reserved[16]; }; struct rpm_header { char magic[3]; /* 3 byte magic: 0x8e 0xad 0xe8 */ - u_int8_t version; /* 1 byte version number */ - u_int32_t reserved; /* 4 bytes reserved */ - u_int32_t entries; /* Number of entries in header (4 bytes) */ - u_int32_t size; /* Size of store (4 bytes) */ + uint8_t version; /* 1 byte version number */ + uint32_t reserved; /* 4 bytes reserved */ + uint32_t entries; /* Number of entries in header (4 bytes) */ + uint32_t size; /* Size of store (4 bytes) */ }; -void skip_header(int rpm_fd) +static void skip_header(int rpm_fd) { struct rpm_header header; - bb_xread_all(rpm_fd, &header, sizeof(struct rpm_header)); + xread(rpm_fd, &header, sizeof(struct rpm_header)); if (strncmp((char *) &header.magic, RPM_HEADER_MAGIC, 3) != 0) { - bb_error_msg_and_die("Invalid RPM header magic"); /* Invalid magic */ + bb_error_msg_and_die("invalid RPM header magic"); /* Invalid magic */ } if (header.version != 1) { - bb_error_msg_and_die("Unsupported RPM header version"); /* This program only supports v1 headers */ + bb_error_msg_and_die("unsupported RPM header version"); /* This program only supports v1 headers */ } header.entries = ntohl(header.entries); header.size = ntohl(header.size); @@ -66,21 +49,22 @@ void skip_header(int rpm_fd) } /* No getopt required */ -extern int rpm2cpio_main(int argc, char **argv) +int rpm2cpio_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; +int rpm2cpio_main(int argc, char **argv) { struct rpm_lead lead; int rpm_fd; unsigned char magic[2]; if (argc == 1) { - rpm_fd = fileno(stdin); + rpm_fd = STDIN_FILENO; } else { - rpm_fd = bb_xopen(argv[1], O_RDONLY); + rpm_fd = xopen(argv[1], O_RDONLY); } - bb_xread_all(rpm_fd, &lead, sizeof(struct rpm_lead)); + xread(rpm_fd, &lead, sizeof(struct rpm_lead)); if (strncmp((char *) &lead.magic, RPM_MAGIC, 4) != 0) { - bb_error_msg_and_die("Invalid RPM magic"); /* Just check the magic, the rest is irrelevant */ + bb_error_msg_and_die("invalid RPM magic"); /* Just check the magic, the rest is irrelevant */ } /* Skip the signature header */ @@ -89,17 +73,15 @@ extern int rpm2cpio_main(int argc, char **argv) /* Skip the main header */ skip_header(rpm_fd); - - bb_xread_all(rpm_fd, &magic, 2); + + xread(rpm_fd, &magic, 2); if ((magic[0] != 0x1f) || (magic[1] != 0x8b)) { - bb_error_msg_and_die("Invalid gzip magic"); + bb_error_msg_and_die("invalid gzip magic"); } - check_header_gzip(rpm_fd); - if (inflate(rpm_fd, fileno(stdout)) != 0) { - bb_error_msg("Error inflating"); + if (unpack_gz_stream(rpm_fd, STDOUT_FILENO) < 0) { + bb_error_msg("error inflating"); } - check_trailer_gzip(rpm_fd); close(rpm_fd); -- cgit v1.2.3-54-g00ecf