From 534374755d618c9c36c9940c82756241c4b25a67 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Sun, 16 Jul 2006 08:14:35 +0000 Subject: Cleaup read() and write() variants, plus a couple of new functions like xlseek and fdlength() for the new mkswap. --- archival/ar.c | 2 +- archival/gunzip.c | 4 +- archival/libunarchive/Makefile.in | 1 - archival/libunarchive/archive_xread_all.c | 21 --------- archival/libunarchive/archive_xread_all_eof.c | 2 +- archival/libunarchive/check_header_gzip.c | 14 +++--- archival/libunarchive/data_extract_to_buffer.c | 2 +- archival/libunarchive/decompress_uncompress.c | 2 +- archival/libunarchive/decompress_unzip.c | 7 ++- archival/libunarchive/get_header_ar.c | 4 +- archival/libunarchive/get_header_cpio.c | 5 ++- archival/libunarchive/get_header_tar.c | 12 ++--- archival/libunarchive/get_header_tar_gz.c | 2 +- archival/libunarchive/unpack_ar_archive.c | 2 +- archival/rpm.c | 2 +- archival/rpm2cpio.c | 6 +-- archival/tar.c | 12 ++--- archival/uncompress.c | 2 +- archival/unzip.c | 61 +++++++------------------- 19 files changed, 55 insertions(+), 108 deletions(-) delete mode 100644 archival/libunarchive/archive_xread_all.c (limited to 'archival') diff --git a/archival/ar.c b/archival/ar.c index 3bb75879b..fd2ab99a0 100644 --- a/archival/ar.c +++ b/archival/ar.c @@ -88,7 +88,7 @@ int ar_main(int argc, char **argv) llist_add_to(&(archive_handle->accept), argv[optind++]); } - archive_xread_all(archive_handle, magic, 7); + xread(archive_handle->src_fd, magic, 7); if (strncmp(magic, "!", 7) != 0) { bb_error_msg_and_die("Invalid ar magic"); } diff --git a/archival/gunzip.c b/archival/gunzip.c index 069666f58..bd6047e13 100644 --- a/archival/gunzip.c +++ b/archival/gunzip.c @@ -112,10 +112,10 @@ int gunzip_main(int argc, char **argv) } /* do the decompression, and cleanup */ - if (bb_xread_char(src_fd) == 0x1f) { + if (xread_char(src_fd) == 0x1f) { unsigned char magic2; - magic2 = bb_xread_char(src_fd); + magic2 = xread_char(src_fd); #ifdef CONFIG_FEATURE_GUNZIP_UNCOMPRESS if (magic2 == 0x9d) { status = uncompress(src_fd, dst_fd); diff --git a/archival/libunarchive/Makefile.in b/archival/libunarchive/Makefile.in index 928e5bf8b..46c50f81d 100644 --- a/archival/libunarchive/Makefile.in +++ b/archival/libunarchive/Makefile.in @@ -29,7 +29,6 @@ LIBUNARCHIVE-y:= \ header_list.o \ header_verbose_list.o \ \ - archive_xread_all.o \ archive_xread_all_eof.o \ \ seek_by_char.o \ diff --git a/archival/libunarchive/archive_xread_all.c b/archival/libunarchive/archive_xread_all.c deleted file mode 100644 index bed8641a2..000000000 --- a/archival/libunarchive/archive_xread_all.c +++ /dev/null @@ -1,21 +0,0 @@ -/* vi: set sw=4 ts=4: */ -/* - * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. - */ - -#include -#include -#include -#include "unarchive.h" -#include "libbb.h" - -void archive_xread_all(const archive_handle_t *archive_handle, void *buf, const size_t count) -{ - ssize_t size; - - size = bb_full_read(archive_handle->src_fd, buf, count); - if (size != count) { - bb_error_msg_and_die("Short read"); - } - return; -} diff --git a/archival/libunarchive/archive_xread_all_eof.c b/archival/libunarchive/archive_xread_all_eof.c index df9c88a56..e03fb0caa 100644 --- a/archival/libunarchive/archive_xread_all_eof.c +++ b/archival/libunarchive/archive_xread_all_eof.c @@ -13,7 +13,7 @@ ssize_t archive_xread_all_eof(archive_handle_t *archive_handle, unsigned char *b { ssize_t size; - size = bb_full_read(archive_handle->src_fd, buf, count); + size = full_read(archive_handle->src_fd, buf, count); if ((size != 0) && (size != count)) { bb_perror_msg_and_die("Short read, read %ld of %ld", (long)size, (long)count); } diff --git a/archival/libunarchive/check_header_gzip.c b/archival/libunarchive/check_header_gzip.c index 79477c610..77e1e6a46 100644 --- a/archival/libunarchive/check_header_gzip.c +++ b/archival/libunarchive/check_header_gzip.c @@ -20,7 +20,7 @@ void check_header_gzip(int src_fd) } formated; } header; - bb_xread_all(src_fd, header.raw, 8); + xread(src_fd, header.raw, 8); /* Check the compression method */ if (header.formated.method != 8) { @@ -32,10 +32,10 @@ void check_header_gzip(int src_fd) /* bit 2 set: extra field present */ unsigned char extra_short; - extra_short = bb_xread_char(src_fd) + (bb_xread_char(src_fd) << 8); + extra_short = xread_char(src_fd) + (xread_char(src_fd) << 8); while (extra_short > 0) { /* Ignore extra field */ - bb_xread_char(src_fd); + xread_char(src_fd); extra_short--; } } @@ -43,19 +43,19 @@ void check_header_gzip(int src_fd) /* Discard original name if any */ if (header.formated.flags & 0x08) { /* bit 3 set: original file name present */ - while(bb_xread_char(src_fd) != 0); + while(xread_char(src_fd) != 0); } /* Discard file comment if any */ if (header.formated.flags & 0x10) { /* bit 4 set: file comment present */ - while(bb_xread_char(src_fd) != 0); + while(xread_char(src_fd) != 0); } /* Read the header checksum */ if (header.formated.flags & 0x02) { - bb_xread_char(src_fd); - bb_xread_char(src_fd); + xread_char(src_fd); + xread_char(src_fd); } return; diff --git a/archival/libunarchive/data_extract_to_buffer.c b/archival/libunarchive/data_extract_to_buffer.c index fe76971df..95cb8f576 100644 --- a/archival/libunarchive/data_extract_to_buffer.c +++ b/archival/libunarchive/data_extract_to_buffer.c @@ -14,5 +14,5 @@ void data_extract_to_buffer(archive_handle_t *archive_handle) archive_handle->buffer = xzalloc(size + 1); - archive_xread_all(archive_handle, archive_handle->buffer, size); + xread(archive_handle->src_fd, archive_handle->buffer, size); } diff --git a/archival/libunarchive/decompress_uncompress.c b/archival/libunarchive/decompress_uncompress.c index 81764a47f..0c4ab6dda 100644 --- a/archival/libunarchive/decompress_uncompress.c +++ b/archival/libunarchive/decompress_uncompress.c @@ -116,7 +116,7 @@ int uncompress(int fd_in, int fd_out) insize = 0; - inbuf[0] = bb_xread_char(fd_in); + inbuf[0] = xread_char(fd_in); maxbits = inbuf[0] & BIT_MASK; block_mode = inbuf[0] & BLOCK_MODE; diff --git a/archival/libunarchive/decompress_unzip.c b/archival/libunarchive/decompress_unzip.c index 46a26933b..8f33e6e6c 100644 --- a/archival/libunarchive/decompress_unzip.c +++ b/archival/libunarchive/decompress_unzip.c @@ -116,9 +116,8 @@ static unsigned int fill_bitbuffer(unsigned int bitbuffer, unsigned int *current /* Leave the first 4 bytes empty so we can always unwind the bitbuffer * to the front of the bytebuffer, leave 4 bytes free at end of tail * so we can easily top up buffer in check_trailer_gzip() */ - if (!(bytebuffer_size = bb_xread(gunzip_src_fd, &bytebuffer[4], bytebuffer_max - 8))) { + if (1 > (bytebuffer_size = safe_read(gunzip_src_fd, &bytebuffer[4], bytebuffer_max - 8))) bb_error_msg_and_die("unexpected end of file"); - } bytebuffer_size += 4; bytebuffer_offset = 4; } @@ -862,7 +861,7 @@ int inflate_unzip(int in, int out) while(1) { int ret = inflate_get_next_window(); - nwrote = bb_full_write(out, gunzip_window, gunzip_outbuf_count); + nwrote = full_write(out, gunzip_window, gunzip_outbuf_count); if (nwrote == -1) { bb_perror_msg("write"); return -1; @@ -896,7 +895,7 @@ int inflate_gunzip(int in, int out) /* top up the input buffer with the rest of the trailer */ count = bytebuffer_size - bytebuffer_offset; if (count < 8) { - bb_xread_all(in, &bytebuffer[bytebuffer_size], 8 - count); + xread(in, &bytebuffer[bytebuffer_size], 8 - count); bytebuffer_size += 8 - count; } for (count = 0; count != 4; count++) { diff --git a/archival/libunarchive/get_header_ar.c b/archival/libunarchive/get_header_ar.c index 44d964287..48d7a5ad8 100644 --- a/archival/libunarchive/get_header_ar.c +++ b/archival/libunarchive/get_header_ar.c @@ -43,7 +43,7 @@ char get_header_ar(archive_handle_t *archive_handle) if (ar.raw[0] == '\n') { /* fix up the header, we started reading 1 byte too early */ memmove(ar.raw, &ar.raw[1], 59); - ar.raw[59] = bb_xread_char(archive_handle->src_fd); + ar.raw[59] = xread_char(archive_handle->src_fd); archive_handle->offset++; } archive_handle->offset += 60; @@ -68,7 +68,7 @@ char get_header_ar(archive_handle_t *archive_handle) * in static variable long_names for use in future entries */ ar_long_name_size = typed->size; ar_long_names = xmalloc(ar_long_name_size); - bb_xread_all(archive_handle->src_fd, ar_long_names, ar_long_name_size); + xread(archive_handle->src_fd, ar_long_names, ar_long_name_size); archive_handle->offset += ar_long_name_size; /* This ar entries data section only contained filenames for other records * they are stored in the static ar_long_names for future reference */ diff --git a/archival/libunarchive/get_header_cpio.c b/archival/libunarchive/get_header_cpio.c index 725c4911a..28c743589 100644 --- a/archival/libunarchive/get_header_cpio.c +++ b/archival/libunarchive/get_header_cpio.c @@ -76,7 +76,8 @@ char get_header_cpio(archive_handle_t *archive_handle) } file_header->name = (char *) xzalloc(namesize + 1); - archive_xread_all(archive_handle, file_header->name, namesize); /* Read in filename */ + /* Read in filename */ + xread(archive_handle->src_fd, file_header->name, namesize); archive_handle->offset += namesize; /* Update offset amount and skip padding before file contents */ @@ -103,7 +104,7 @@ char get_header_cpio(archive_handle_t *archive_handle) if (S_ISLNK(file_header->mode)) { file_header->link_name = (char *) xzalloc(file_header->size + 1); - archive_xread_all(archive_handle, file_header->link_name, file_header->size); + xread(archive_handle->src_fd, file_header->link_name, file_header->size); archive_handle->offset += file_header->size; file_header->size = 0; /* Stop possible seeks in future */ } else { diff --git a/archival/libunarchive/get_header_tar.c b/archival/libunarchive/get_header_tar.c index 1cbde9543..4394d23ee 100644 --- a/archival/libunarchive/get_header_tar.c +++ b/archival/libunarchive/get_header_tar.c @@ -56,11 +56,7 @@ char get_header_tar(archive_handle_t *archive_handle) /* Align header */ data_align(archive_handle, 512); - if (bb_full_read(archive_handle->src_fd, tar.raw, 512) != 512) { - /* Assume end of file */ - bb_error_msg_and_die("Short header"); - //return(EXIT_FAILURE); - } + xread(archive_handle->src_fd, tar.raw, 512); archive_handle->offset += 512; /* If there is no filename its an empty header */ @@ -69,7 +65,7 @@ char get_header_tar(archive_handle_t *archive_handle) /* This is the second consecutive empty header! End of archive! * Read until the end to empty the pipe from gz or bz2 */ - while (bb_full_read(archive_handle->src_fd, tar.raw, 512) == 512); + while (full_read(archive_handle->src_fd, tar.raw, 512) == 512); return(EXIT_FAILURE); } end = 1; @@ -166,14 +162,14 @@ char get_header_tar(archive_handle_t *archive_handle) #ifdef CONFIG_FEATURE_TAR_GNU_EXTENSIONS case 'L': { longname = xzalloc(file_header->size + 1); - archive_xread_all(archive_handle, longname, file_header->size); + xread(archive_handle->src_fd, longname, file_header->size); archive_handle->offset += file_header->size; return(get_header_tar(archive_handle)); } case 'K': { linkname = xzalloc(file_header->size + 1); - archive_xread_all(archive_handle, linkname, file_header->size); + xread(archive_handle->src_fd, linkname, file_header->size); archive_handle->offset += file_header->size; file_header->name = linkname; diff --git a/archival/libunarchive/get_header_tar_gz.c b/archival/libunarchive/get_header_tar_gz.c index 3e1f466a7..ad26f465a 100644 --- a/archival/libunarchive/get_header_tar_gz.c +++ b/archival/libunarchive/get_header_tar_gz.c @@ -15,7 +15,7 @@ char get_header_tar_gz(archive_handle_t *archive_handle) /* Cant lseek over pipe's */ archive_handle->seek = seek_by_char; - archive_xread_all(archive_handle, &magic, 2); + xread(archive_handle->src_fd, &magic, 2); if ((magic[0] != 0x1f) || (magic[1] != 0x8b)) { bb_error_msg_and_die("Invalid gzip magic"); } diff --git a/archival/libunarchive/unpack_ar_archive.c b/archival/libunarchive/unpack_ar_archive.c index 47cf812ef..eed528391 100644 --- a/archival/libunarchive/unpack_ar_archive.c +++ b/archival/libunarchive/unpack_ar_archive.c @@ -12,7 +12,7 @@ void unpack_ar_archive(archive_handle_t *ar_archive) { char magic[7]; - archive_xread_all(ar_archive, magic, 7); + xread(ar_archive->src_fd, magic, 7); if (strncmp(magic, "!", 7) != 0) { bb_error_msg_and_die("Invalid ar magic"); } diff --git a/archival/rpm.c b/archival/rpm.c index 075578971..3b70439a7 100644 --- a/archival/rpm.c +++ b/archival/rpm.c @@ -193,7 +193,7 @@ void extract_cpio_gz(int fd) { archive_handle->src_fd = fd; archive_handle->offset = 0; - bb_xread_all(archive_handle->src_fd, &magic, 2); + xread(archive_handle->src_fd, &magic, 2); if ((magic[0] != 0x1f) || (magic[1] != 0x8b)) { bb_error_msg_and_die("Invalid gzip magic"); } diff --git a/archival/rpm2cpio.c b/archival/rpm2cpio.c index 51807c7e2..6aae150e2 100644 --- a/archival/rpm2cpio.c +++ b/archival/rpm2cpio.c @@ -40,7 +40,7 @@ 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 */ } @@ -66,7 +66,7 @@ int rpm2cpio_main(int argc, char **argv) rpm_fd = bb_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 */ } @@ -78,7 +78,7 @@ 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"); } diff --git a/archival/tar.c b/archival/tar.c index 5b7c1425a..426176bd2 100644 --- a/archival/tar.c +++ b/archival/tar.c @@ -269,9 +269,9 @@ static inline int writeTarHeader(struct TarBallInfo *tbInfo, putOctal(header.chksum, 7, chksum); /* Now write the header out to disk */ - if ((size = - bb_full_write(tbInfo->tarFd, (char *) &header, - sizeof(struct TarHeader))) < 0) { + if ((size = full_write(tbInfo->tarFd, (char *) &header, + sizeof(struct TarHeader))) < 0) + { bb_error_msg(bb_msg_io_error, real_name); return (FALSE); } @@ -475,7 +475,7 @@ static inline int writeTarFile(const int tar_fd, const int verboseFlag, while (1) { char buf; - int n = bb_full_read(gzipStatusPipe[0], &buf, 1); + int n = full_read(gzipStatusPipe[0], &buf, 1); if (n == 0 && vfork_exec_errno != 0) { errno = vfork_exec_errno; @@ -562,8 +562,8 @@ static char get_header_tar_Z(archive_handle_t *archive_handle) archive_handle->seek = seek_by_char; /* do the decompression, and cleanup */ - if (bb_xread_char(archive_handle->src_fd) != 0x1f || - bb_xread_char(archive_handle->src_fd) != 0x9d) + if (xread_char(archive_handle->src_fd) != 0x1f || + xread_char(archive_handle->src_fd) != 0x9d) { bb_error_msg_and_die("Invalid magic"); } diff --git a/archival/uncompress.c b/archival/uncompress.c index b282fe811..801293fd9 100644 --- a/archival/uncompress.c +++ b/archival/uncompress.c @@ -70,7 +70,7 @@ int uncompress_main(int argc, char **argv) } /* do the decompression, and cleanup */ - if ((bb_xread_char(src_fd) != 0x1f) || (bb_xread_char(src_fd) != 0x9d)) { + if ((xread_char(src_fd) != 0x1f) || (xread_char(src_fd) != 0x9d)) { bb_error_msg_and_die("Invalid magic"); } diff --git a/archival/unzip.c b/archival/unzip.c index 8ba39e9af..632cc8551 100644 --- a/archival/unzip.c +++ b/archival/unzip.c @@ -32,28 +32,10 @@ #include "unarchive.h" #include "busybox.h" -#if BB_BIG_ENDIAN -static inline unsigned short -__swap16(unsigned short x) { - return (((uint16_t)(x) & 0xFF) << 8) | (((uint16_t)(x) & 0xFF00) >> 8); -} - -static inline uint32_t -__swap32(uint32_t x) { - return (((x & 0xFF) << 24) | - ((x & 0xFF00) << 8) | - ((x & 0xFF0000) >> 8) | - ((x & 0xFF000000) >> 24)); -} -#else /* it's little-endian */ -# define __swap16(x) (x) -# define __swap32(x) (x) -#endif /* BB_BIG_ENDIAN */ - -#define ZIP_FILEHEADER_MAGIC __swap32(0x04034b50) -#define ZIP_CDS_MAGIC __swap32(0x02014b50) -#define ZIP_CDS_END_MAGIC __swap32(0x06054b50) -#define ZIP_DD_MAGIC __swap32(0x08074b50) +#define ZIP_FILEHEADER_MAGIC SWAP_LE32(0x04034b50) +#define ZIP_CDS_MAGIC SWAP_LE32(0x02014b50) +#define ZIP_CDS_END_MAGIC SWAP_LE32(0x06054b50) +#define ZIP_DD_MAGIC SWAP_LE32(0x08074b50) extern unsigned int gunzip_crc; extern unsigned int gunzip_bytes_out; @@ -83,13 +65,6 @@ static void unzip_skip(int fd, off_t skip) } } -static void unzip_read(int fd, void *buf, size_t count) -{ - if (bb_xread(fd, buf, count) != count) { - bb_error_msg_and_die(bb_msg_read_error); - } -} - static void unzip_create_leading_dirs(char *fn) { /* Create all leading directories */ @@ -248,7 +223,7 @@ int unzip_main(int argc, char **argv) unsigned int magic; /* Check magic number */ - unzip_read(src_fd, &magic, 4); + xread(src_fd, &magic, 4); if (magic == ZIP_CDS_MAGIC) { break; } else if (magic != ZIP_FILEHEADER_MAGIC) { @@ -256,19 +231,17 @@ int unzip_main(int argc, char **argv) } /* Read the file header */ - unzip_read(src_fd, zip_header.raw, 26); -#if BB_BIG_ENDIAN - zip_header.formated.version = __swap16(zip_header.formated.version); - zip_header.formated.flags = __swap16(zip_header.formated.flags); - zip_header.formated.method = __swap16(zip_header.formated.method); - zip_header.formated.modtime = __swap16(zip_header.formated.modtime); - zip_header.formated.moddate = __swap16(zip_header.formated.moddate); - zip_header.formated.crc32 = __swap32(zip_header.formated.crc32); - zip_header.formated.cmpsize = __swap32(zip_header.formated.cmpsize); - zip_header.formated.ucmpsize = __swap32(zip_header.formated.ucmpsize); - zip_header.formated.filename_len = __swap16(zip_header.formated.filename_len); - zip_header.formated.extra_len = __swap16(zip_header.formated.extra_len); -#endif /* BB_BIG_ENDIAN */ + xread(src_fd, zip_header.raw, 26); + zip_header.formated.version = SWAP_LE32(zip_header.formated.version); + zip_header.formated.flags = SWAP_LE32(zip_header.formated.flags); + zip_header.formated.method = SWAP_LE32(zip_header.formated.method); + zip_header.formated.modtime = SWAP_LE32(zip_header.formated.modtime); + zip_header.formated.moddate = SWAP_LE32(zip_header.formated.moddate); + zip_header.formated.crc32 = SWAP_LE32(zip_header.formated.crc32); + zip_header.formated.cmpsize = SWAP_LE32(zip_header.formated.cmpsize); + zip_header.formated.ucmpsize = SWAP_LE32(zip_header.formated.ucmpsize); + zip_header.formated.filename_len = SWAP_LE32(zip_header.formated.filename_len); + zip_header.formated.extra_len = SWAP_LE32(zip_header.formated.extra_len); if ((zip_header.formated.method != 0) && (zip_header.formated.method != 8)) { bb_error_msg_and_die("Unsupported compression method %d", zip_header.formated.method); } @@ -276,7 +249,7 @@ int unzip_main(int argc, char **argv) /* Read filename */ free(dst_fn); dst_fn = xzalloc(zip_header.formated.filename_len + 1); - unzip_read(src_fd, dst_fn, zip_header.formated.filename_len); + xread(src_fd, dst_fn, zip_header.formated.filename_len); /* Skip extra header bytes */ unzip_skip(src_fd, zip_header.formated.extra_len); -- cgit v1.2.3