Cleaup read() and write() variants, plus a couple of new functions like
authorRob Landley <rob@landley.net>
Sun, 16 Jul 2006 08:14:35 +0000 (08:14 -0000)
committerRob Landley <rob@landley.net>
Sun, 16 Jul 2006 08:14:35 +0000 (08:14 -0000)
xlseek and fdlength() for the new mkswap.

39 files changed:
applets/applets.c
archival/ar.c
archival/gunzip.c
archival/libunarchive/Makefile.in
archival/libunarchive/archive_xread_all.c [deleted file]
archival/libunarchive/archive_xread_all_eof.c
archival/libunarchive/check_header_gzip.c
archival/libunarchive/data_extract_to_buffer.c
archival/libunarchive/decompress_uncompress.c
archival/libunarchive/decompress_unzip.c
archival/libunarchive/get_header_ar.c
archival/libunarchive/get_header_cpio.c
archival/libunarchive/get_header_tar.c
archival/libunarchive/get_header_tar_gz.c
archival/libunarchive/unpack_ar_archive.c
archival/rpm.c
archival/rpm2cpio.c
archival/tar.c
archival/uncompress.c
archival/unzip.c
console-tools/loadkmap.c
coreutils/dd.c
coreutils/tail.c
include/libbb.h
include/unarchive.h
init/init.c
libbb/change_identity.c
libbb/copyfd.c
libbb/create_icmp6_socket.c
libbb/create_icmp_socket.c
libbb/full_read.c
libbb/full_write.c
libbb/loop.c
libbb/xfuncs.c
miscutils/rx.c
networking/httpd.c
networking/nc.c
networking/tftp.c
shell/ash.c

index 27becfd68bfe6e55eacace33ca7725c883574b82..bd8cfec5da2356ace2e14c4b57be656cb9f47dc7 100644 (file)
@@ -343,22 +343,15 @@ static void check_suid (struct BB_applet *applet)
                bb_error_msg_and_die ("You have no permission to run this applet!");
 
          if ((sct->m_mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) {     /* *both* have to be set for sgid */
-               if (setegid (sct->m_gid))
-                 bb_error_msg_and_die
-                       ("BusyBox binary has insufficient rights to set proper GID for applet!");
-         } else
-               setgid (rgid);                  /* no sgid -> drop */
-
-         if (sct->m_mode & S_ISUID) {
-               if (seteuid (sct->m_uid))
-                 bb_error_msg_and_die
-                       ("BusyBox binary has insufficient rights to set proper UID for applet!");
-         } else
-               setuid (ruid);                  /* no suid -> drop */
+               xsetgid(sct->m_gid);
+         } else xsetgid(rgid);                /* no sgid -> drop */
+
+         if (sct->m_mode & S_ISUID) xsetuid(sct->m_uid);
+         else xsetuid(ruid);                  /* no suid -> drop */
        } else {
                /* default: drop all privileges */
-         setgid (rgid);
-         setuid (ruid);
+         xsetgid(rgid);
+         xsetuid(ruid);
        }
        return;
   } else {
@@ -374,11 +367,10 @@ static void check_suid (struct BB_applet *applet)
 #endif
 
   if (applet->need_suid == _BB_SUID_ALWAYS) {
-       if (geteuid () != 0)
-         bb_error_msg_and_die ("This applet requires root privileges!");
+       if (geteuid()) bb_error_msg_and_die("Applet requires root privileges!");
   } else if (applet->need_suid == _BB_SUID_NEVER) {
-       setgid (rgid);                          /* drop all privileges */
-       setuid (ruid);
+       xsetgid(rgid);                          /* drop all privileges */
+       xsetuid(ruid);
   }
 }
 #else
@@ -419,14 +411,14 @@ static const char *unpack_usage_messages(void)
        case -1: /* error */
                exit(1);
        case 0: /* child */
-               bb_full_write(input[1], packed_usage, sizeof(packed_usage));
+               full_write(input[1], packed_usage, sizeof(packed_usage));
                exit(0);
        }
        /* parent */
        close(input[1]);
 
        buf = xmalloc(SIZEOF_usage_messages);
-       bb_full_read(output[0], buf, SIZEOF_usage_messages);
+       full_read(output[0], buf, SIZEOF_usage_messages);
        return buf;
 }
 
@@ -454,33 +446,32 @@ void bb_show_usage (void)
   exit (bb_default_error_retval);
 }
 
-static int applet_name_compare (const void *x, const void *y)
+static int applet_name_compare(const void *name, const void *vapplet)
 {
-  const char *name = x;
-  const struct BB_applet *applet = y;
+  const struct BB_applet *applet = vapplet;
 
-  return strcmp (name, applet->name);
+  return strcmp(name, applet->name);
 }
 
 extern const size_t NUM_APPLETS;
 
-struct BB_applet *find_applet_by_name (const char *name)
+struct BB_applet *find_applet_by_name(const char *name)
 {
-  return bsearch (name, applets, NUM_APPLETS, sizeof (struct BB_applet),
+  return bsearch(name, applets, NUM_APPLETS, sizeof(struct BB_applet),
                                  applet_name_compare);
 }
 
-void run_applet_by_name (const char *name, int argc, char **argv)
+void run_applet_by_name(const char *name, int argc, char **argv)
 {
-       if(ENABLE_FEATURE_SUID_CONFIG) parse_config_file ();
+       if (ENABLE_FEATURE_SUID_CONFIG) parse_config_file();
 
-       if(!strncmp(name, "busybox", 7)) busybox_main(argc, argv);
+       if (!strncmp(name, "busybox", 7)) busybox_main(argc, argv);
        /* Do a binary search to find the applet entry given the name. */
        applet_using = find_applet_by_name(name);
-       if(applet_using) {
+       if (applet_using) {
                bb_applet_name = applet_using->name;
-               if(argc==2 && !strcmp(argv[1], "--help")) bb_show_usage ();
-               if(ENABLE_FEATURE_SUID) check_suid (applet_using);
-               exit ((*(applet_using->main)) (argc, argv));
+               if(argc==2 && !strcmp(argv[1], "--help")) bb_show_usage();
+               if(ENABLE_FEATURE_SUID) check_suid(applet_using);
+               exit((*(applet_using->main))(argc, argv));
        }
 }
index 3bb75879bac37ed4d77a1126caeb5d6c7a6a0741..fd2ab99a0a55c984252d39a591a6acf8c1f3afac 100644 (file)
@@ -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, "!<arch>", 7) != 0) {
                bb_error_msg_and_die("Invalid ar magic");
        }
index 069666f58694a6bc4d9bd2db1580c2ad93d6616d..bd6047e135d9e60b6e3d398ecbe8535f26eac63d 100644 (file)
@@ -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);
index 928e5bf8bca0c7f2ecdc1c6ce28ae8b523b18bec..46c50f81dffee3204b870f05e04171ecc0bbab9e 100644 (file)
@@ -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 (file)
index bed8641..0000000
+++ /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 <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#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;
-}
index df9c88a5682928c1aa31e5a1e9fd2bd9e08e8502..e03fb0caaf95ba8718825c0a9707196da412bc82 100644 (file)
@@ -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);
        }
index 79477c610cdaa1e758a0f94d5b68b93c85b5c406..77e1e6a464f1162fb89f550f6976edda27cdde14 100644 (file)
@@ -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;
index fe76971df4592de664733bc6afe5164feca6a844..95cb8f576fb4dd79a9bd0970ae3095e5f888aeb4 100644 (file)
@@ -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);
 }
index 81764a47fb952931324cf38ee049cdb814aaf9c7..0c4ab6dda17e8cb6edf37de79552629fc44cdc57 100644 (file)
@@ -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;
index 46a26933bb75993c51cc8edcaf19ffc64373c206..8f33e6e6c066bdfab3e881eae29f0a413cfff17d 100644 (file)
@@ -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++) {
index 44d96428737355bcf440fc908b274135ec46a194..48d7a5ad8bdcdcd64252c419c6aafcf623f53ebe 100644 (file)
@@ -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 */
index 725c4911ad71c2e0bfe46d3cfbc61669c7a1036b..28c743589878760abebb6cc97c4b045b62364dcb 100644 (file)
@@ -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 {
index 1cbde954315c444295781559dffe9163be161ab4..4394d23ee016e50ca376df958cd0f9dad1e1ec46 100644 (file)
@@ -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;
index 3e1f466a7bb719222cacd8bc67cee5b671cd1e44..ad26f465a8f63702c1b6885585020bf19dda1211 100644 (file)
@@ -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");
        }
index 47cf812efa38170976c9de8289e7f1acbe4c807c..eed528391c06e34372dacbeacfe43652c2640d1a 100644 (file)
@@ -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, "!<arch>", 7) != 0) {
                bb_error_msg_and_die("Invalid ar magic");
        }
index 0755789714f3953c6d36c91e0e1c696c69c829ff..3b70439a7bb4f40100db931b1907bef81f5b9e6b 100644 (file)
@@ -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");
        }
index 51807c7e236dd9745b79c621ca754d17ef0ce20c..6aae150e2555a3a84957af61c35ff4fa00017007 100644 (file)
@@ -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");
        }
index 5b7c1425a60504a8438737b51850a98c1c6143c8..426176bd2b524c5d790f0db88dcff8ca426be9c7 100644 (file)
@@ -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");
        }
index b282fe811c7f3a1468c79b00014b7ac77e309f04..801293fd91f2b956bdf43915e1b3824b620ceba6 100644 (file)
@@ -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");
                }
 
index 8ba39e9af936440d576cd36b9cae0ffd835b6a77..632cc8551cea2ea28ffeb3eb540857e5e850fb78 100644 (file)
 #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);
index 499d34622dce26ce29ce3a9ea5c1d40d3f41a729..69d33bd9532c66caa8ed6464d60a2bb8704d1e7f 100644 (file)
@@ -45,15 +45,15 @@ int loadkmap_main(int argc, char **argv)
 
        fd = bb_xopen(CURRENT_VC, O_RDWR);
 
-       if ((bb_full_read(0, buff, 7) != 7) || (strncmp(buff, BINARY_KEYMAP_MAGIC, 7) != 0))
+       xread(0, buff, 7);
+       if (strncmp(buff, BINARY_KEYMAP_MAGIC, 7))
                bb_error_msg_and_die("This is not a valid binary keymap.");
 
-       if (bb_full_read(0, flags, MAX_NR_KEYMAPS) != MAX_NR_KEYMAPS)
-               bb_perror_msg_and_die("Error reading keymap flags");
+       xread(0, flags, MAX_NR_KEYMAPS);
 
        for (i = 0; i < MAX_NR_KEYMAPS; i++) {
                if (flags[i] == 1) {
-                       bb_full_read(0, ibuff, NR_KEYS * sizeof(u_short));
+                       xread(0, ibuff, NR_KEYS * sizeof(u_short));
                        for (j = 0; j < NR_KEYS; j++) {
                                ke.kb_index = j;
                                ke.kb_table = i;
@@ -63,8 +63,6 @@ int loadkmap_main(int argc, char **argv)
                }
        }
 
-       /* Don't bother to close files.  Exit does that
-        * automagically, so we can save a few bytes */
-       /* close(fd); */
-       return EXIT_SUCCESS;
+       if (ENABLE_FEATURE_CLEAN_UP) close(fd);
+       return 0;
 }
index 33e789311071c53ebb921605c409ccc9642cc65e..3d6f7cd2d2ddcda29f9ffed6ae923106c01aac73 100644 (file)
@@ -196,26 +196,20 @@ int dd_main(int argc, char **argv)
                                tmp += d;
                                oc += d;
                                if (oc == obs) {
-                                       if (bb_full_write(ofd, obuf, obs) < 0) {
-                                               bb_perror_msg_and_die("%s", outfile);
-                                       }
+                                       xwrite(ofd, obuf, obs);
                                        out_full++;
                                        oc = 0;
                                }
                        }
                } else {
-                       if ((n = bb_full_write(ofd, ibuf, n)) < 0) {
-                               bb_perror_msg_and_die("%s", outfile);
-                       }
+                       xwrite(ofd, ibuf, n);
                        if (n == ibs) out_full++;
                        else out_part++;
                }
        }
        
        if (ENABLE_FEATURE_DD_IBS_OBS && oc) {
-               if (bb_full_write(ofd, obuf, oc) < 0) {
-                       bb_perror_msg_and_die("%s", outfile);
-               }
+               xwrite(ofd, obuf, oc);
                out_part++;
        }
        if (close (ifd) < 0) {
index e63406e3155631d1045cd43889718b28202fa6e5..80a66fbf5b3f446df2fc66a426b03162896f4ba5 100644 (file)
@@ -54,9 +54,8 @@ static void tail_xprint_header(const char *fmt, const char *filename)
 static void tail_xbb_full_write(const char *buf, size_t len)
 {
        /* If we get a write error, there is really no sense in continuing. */
-       if (bb_full_write(STDOUT_FILENO, buf, len) < 0) {
+       if (full_write(STDOUT_FILENO, buf, len) < 0)
                bb_perror_nomsg_and_die();
-       }
 }
 
 static ssize_t tail_read(int fd, char *buf, size_t count)
index 549b4fc0cff9d5c48fc8aded6aff50d71d3ef317..ddf965fbf466b1e2bbca44432f1e9bf832da0439 100644 (file)
@@ -133,9 +133,9 @@ extern DIR *bb_xopendir(const char *path);
 extern int remove_file(const char *path, int flags);
 extern int copy_file(const char *source, const char *dest, int flags);
 extern ssize_t safe_read(int fd, void *buf, size_t count);
-extern ssize_t bb_full_read(int fd, void *buf, size_t len);
+extern ssize_t full_read(int fd, void *buf, size_t len);
 extern ssize_t safe_write(int fd, const void *buf, size_t count);
-extern ssize_t bb_full_write(int fd, const void *buf, size_t len);
+extern ssize_t full_write(int fd, const void *buf, size_t len);
 extern int recursive_action(const char *fileName, int recurse,
          int followLinks, int depthFirst,
          int (*fileAction) (const char *fileName, struct stat* statbuf, void* userData),
@@ -187,6 +187,7 @@ extern void itoa_to_buf(int n, char *buf, unsigned buflen);
 extern char *itoa(int n);
 extern void xsetgid(gid_t gid);
 extern void xsetuid(uid_t uid);
+extern off_t fdlength(int fd);
 
 #define BB_GETOPT_ERROR 0x80000000UL
 extern const char *bb_opt_complementally;
@@ -477,9 +478,10 @@ extern int obscure(const char *old, const char *newval, const struct passwd *pwd
 
 extern int bb_xopen(const char *pathname, int flags);
 extern int bb_xopen3(const char *pathname, int flags, int mode);
-extern ssize_t bb_xread(int fd, void *buf, size_t count);
-extern void bb_xread_all(int fd, void *buf, size_t count);
-extern unsigned char bb_xread_char(int fd);
+extern void xread(int fd, void *buf, size_t count);
+extern unsigned char xread_char(int fd);
+extern void xlseek(int fd, off_t offset, int whence);
+extern void xwrite(int fd, void *buf, size_t count);
 
 #ifndef COMM_LEN
 #ifdef TASK_COMM_LEN
index 752a05c8670198d22512394abb8dcb5504cf5b41..05ab0c16a88b3517ea9cb1b87a68ffc3507357ba 100644 (file)
@@ -96,7 +96,6 @@ extern char get_header_tar_gz(archive_handle_t *archive_handle);
 extern void seek_by_jump(const archive_handle_t *archive_handle, const unsigned int amount);
 extern void seek_by_char(const archive_handle_t *archive_handle, const unsigned int amount);
 
-extern void archive_xread_all(const archive_handle_t *archive_handle, void *buf, const size_t count);
 extern ssize_t archive_xread_all_eof(archive_handle_t *archive_handle, unsigned char *buf, size_t count);
 
 extern void data_align(archive_handle_t *archive_handle, const unsigned short boundary);
index c9200bd6cdbdd057e6a29eada95485cb48bdc7de..cad64f63ae25f185e5d4a1bf51d515d844ea923c 100644 (file)
@@ -221,7 +221,7 @@ static void message(int device, const char *fmt, ...)
                }
        }
        if ((device & LOG) && (log_fd >= 0)) {
-               bb_full_write(log_fd, msg, l);
+               full_write(log_fd, msg, l);
        }
 #endif
 
@@ -230,7 +230,7 @@ static void message(int device, const char *fmt, ...)
                                        O_WRONLY | O_NOCTTY | O_NONBLOCK);
                /* Always send console messages to /dev/console so people will see them. */
                if (fd >= 0) {
-                       bb_full_write(fd, msg, l);
+                       full_write(fd, msg, l);
                        close(fd);
 #if ENABLE_DEBUG_INIT
                /* all descriptors may be closed */
@@ -536,7 +536,7 @@ static pid_t run(const struct init_action *a)
                        messageD(LOG, "Waiting for enter to start '%s'"
                                                "(pid %d, terminal %s)\n",
                                          cmdpath, getpid(), a->terminal);
-                       bb_full_write(1, press_enter, sizeof(press_enter) - 1);
+                       full_write(1, press_enter, sizeof(press_enter) - 1);
                        while(read(0, &c, 1) == 1 && c != '\n')
                                ;
                }
index adebad8ed280bd9f6cfb141c3cdfbdaf4067f816..74ffccbd3589eab30f6d9ecf592f054e0d4e5cd0 100644 (file)
@@ -46,10 +46,8 @@ const char *change_identity_e2str ( const struct passwd *pw )
                return "cannot set groups";
        endgrent ( );
 
-       if ( setgid ( pw-> pw_gid ))
-               return "cannot set group id";
-       if ( setuid ( pw->pw_uid ))
-               return "cannot set user id";
+       xsetgid(pw-> pw_gid);
+       xsetuid(pw->pw_uid);
        return NULL;
 }
 
index e2c542e321c0951144aa7aa9037dbd7e6868d628..0c4f7a054b611e1bd58d3e870c173179510f55e8 100644 (file)
@@ -30,24 +30,24 @@ static ssize_t bb_full_fd_action(int src_fd, int dst_fd, size_t size)
        if (src_fd < 0) goto out;
        while (!size || total < size)
        {
-               ssize_t wrote, xread;
+               ssize_t wr, rd;
 
-               xread = safe_read(src_fd, buffer,
+               rd = safe_read(src_fd, buffer,
                                (!size || size - total > BUFSIZ) ? BUFSIZ : size - total);
 
-               if (xread > 0) {
+               if (rd > 0) {
                        /* A -1 dst_fd means we need to fake it... */
-                       wrote = (dst_fd < 0) ? xread : bb_full_write(dst_fd, buffer, xread);
-                       if (wrote < xread) {
+                       wr = (dst_fd < 0) ? rd : full_write(dst_fd, buffer, rd);
+                       if (wr < rd) {
                                bb_perror_msg(bb_msg_write_error);
                                break;
                        }
-                       total += wrote;
+                       total += wr;
                        if (total == size) status = 0;
-               } else if (xread < 0) {
+               } else if (rd < 0) {
                        bb_perror_msg(bb_msg_read_error);
                        break;
-               } else if (xread == 0) {
+               } else if (rd == 0) {
                        /* All done. */
                        status = 0;
                        break;
index d8ff35a0ad5e7c4da5080314b2a7cef9e9ba87f0..c3d1b5578d08fe7dfe38464b17bf0e37f1641e2c 100644 (file)
@@ -32,7 +32,7 @@ int create_icmp6_socket(void)
        }
 
        /* drop root privs if running setuid */
-       setuid(getuid());
+       xsetuid(getuid());
 
        return sock;
 }
index 26120a66d1f724c385682573d5a658fc400477e3..431c4d8a7bda978a6dbc68f72bfdda32c516cf96 100644 (file)
@@ -31,7 +31,7 @@ int create_icmp_socket(void)
        }
 
        /* drop root privs if running setuid */
-       setuid(getuid());
+       xsetuid(getuid());
 
        return sock;
 }
index 8d64bfb90944bdd72c2e7fa1a6f371be6b371b58..b5837d5bd9b96e648ccc749a1110d54afa0279a7 100644 (file)
@@ -17,7 +17,7 @@
  * Returns the amount read, or -1 on an error.
  * A short read is returned on an end of file.
  */
-ssize_t bb_full_read(int fd, void *buf, size_t len)
+ssize_t full_read(int fd, void *buf, size_t len)
 {
        ssize_t cc;
        ssize_t total;
index 3d6d40184c6663ea0d3d6a498a799a1f2ee8e2e9..d812d04b42a1f4dc99e8bd0f8d244b4f6b19327e 100644 (file)
@@ -16,7 +16,7 @@
  * This does multiple writes as necessary.
  * Returns the amount written, or -1 on an error.
  */
-ssize_t bb_full_write(int fd, const void *buf, size_t len)
+ssize_t full_write(int fd, const void *buf, size_t len)
 {
        ssize_t cc;
        ssize_t total;
index b9caa973b7636be3ffa07d58ce82019511dc1699..0b05cd75f188b1e309fab19996d67c8a3056c11d 100644 (file)
@@ -3,6 +3,7 @@
  * Utility routines.
  *
  * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
+ * Copyright (C) 2005 by Rob Landley <rob@landley.net>
  *
  * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
  */
index d843414f9b54650fdc473e94e126d92b6f376335..8562a4fcbaa2d0621508401e5127524ae1cc6ab7 100644 (file)
@@ -120,40 +120,55 @@ int bb_xopen3(const char *pathname, int flags, int mode)
 #endif
 
 #ifdef L_xread
-ssize_t bb_xread(int fd, void *buf, size_t count)
+
+// Die with an error message if we can't read the entire buffer.
+
+void xread(int fd, void *buf, size_t count)
 {
-       ssize_t size;
+       while (count) {
+               ssize_t size;
 
-       size = read(fd, buf, count);
-       if (size < 0) {
-               bb_perror_msg_and_die(bb_msg_read_error);
+               if ((size = safe_read(fd, buf, count)) < 1)
+                       bb_error_msg_and_die("Short read");
+               count -= size;
+               buf = ((char *) buf) + size;
        }
-       return(size);
 }
 #endif
 
-#ifdef L_xread_all
-void bb_xread_all(int fd, void *buf, size_t count)
-{
-       ssize_t size;
+#ifdef L_xwrite
 
+// Die with an error message if we can't write the entire buffer.
+
+void xwrite(int fd, void *buf, size_t count)
+{
        while (count) {
-               if ((size = bb_xread(fd, buf, count)) == 0) {   /* EOF */
-                       bb_error_msg_and_die("Short read");
-               }
+               ssize_t size;
+
+               if ((size = safe_write(fd, buf, count)) < 1)
+                       bb_error_msg_and_die("Short write");
                count -= size;
                buf = ((char *) buf) + size;
        }
-       return;
+}
+#endif
+
+#ifdef L_xlseek
+
+// Die if we can't lseek to the right spot.
+
+void xlseek(int fd, off_t offset, int whence)
+{
+       if (whence != lseek(fd, offset, whence)) bb_error_msg_and_die("lseek");
 }
 #endif
 
 #ifdef L_xread_char
-unsigned char bb_xread_char(int fd)
+unsigned char xread_char(int fd)
 {
        char tmp;
 
-       bb_xread_all(fd, &tmp, 1);
+       xread(fd, &tmp, 1);
 
        return(tmp);
 }
@@ -294,3 +309,41 @@ void xsetuid(uid_t uid)
        if (setuid(uid)) bb_error_msg_and_die("setuid");
 }
 #endif
+
+#ifdef L_fdlength
+off_t fdlength(int fd)
+{
+       off_t bottom = 0, top = 0, pos;
+       long size;
+
+       // If the ioctl works for this, return it.
+
+       if (ioctl(fd, BLKGETSIZE, &size) >= 0) return size*512;
+
+       // If not, do a binary search for the last location we can read.
+
+       do {
+               char temp;
+
+               pos = bottom + (top - bottom) / 2;;
+
+               // If we can read from the current location, it's bigger.
+
+               if (lseek(fd, pos, 0)>=0 && safe_read(fd, &temp, 1)==1) {
+                       if (bottom == top) bottom = top = (top+1) * 2;
+                       else bottom = pos;
+
+               // If we can't, it's smaller.
+
+               } else {
+                       if (bottom == top) {
+                               if (!top) return 0;
+                               bottom = top/2;
+                       }
+                       else top = pos;
+               }
+       } while (bottom + 1 != top);
+
+       return pos + 1;
+}
+#endif
index cff5a627bacf45b05324a9a3b5144b1a3d705d90..41673b60e2abffa105f6e142e6009c5ce09bd854 100644 (file)
@@ -212,7 +212,7 @@ static int receive(char *error_buf, size_t error_buf_size,
                wantBlockNo++;
                length += blockLength;
 
-               if (bb_full_write(filefd, blockBuf, blockLength) < 0) {
+               if (full_write(filefd, blockBuf, blockLength) < 0) {
                        note_error("write to file failed: %m");
                        goto fatal;
                }
index 4cd09448cf90305c3563cac1b96cd62f6bf02bcd..452b56d19669c39c071fec9e63d8b4d7177f31d7 100644 (file)
@@ -961,7 +961,7 @@ static int sendHeaders(HttpResponseNum responseNum)
 #if DEBUG
   fprintf(stderr, "Headers: '%s'", buf);
 #endif
-  return bb_full_write(a_c_w, buf, len);
+  return full_write(a_c_w, buf, len);
 }
 
 /****************************************************************************
@@ -1222,7 +1222,7 @@ static int sendCgi(const char *url,
          break;
        }
       } else if(post_readed_size > 0 && FD_ISSET(outFd, &writeSet)) {
-               count = bb_full_write(outFd, wbuf + post_readed_idx, post_readed_size);
+               count = full_write(outFd, wbuf + post_readed_idx, post_readed_size);
                if(count > 0) {
                        post_readed_size -= count;
                        post_readed_idx += count;
@@ -1263,14 +1263,14 @@ static int sendCgi(const char *url,
            rbuf[count] = 0;
            /* check to see if the user script added headers */
            if(strncmp(rbuf, "HTTP/1.0 200 OK\r\n", 4) != 0) {
-             bb_full_write(s, "HTTP/1.0 200 OK\r\n", 17);
+             full_write(s, "HTTP/1.0 200 OK\r\n", 17);
            }
            if (strstr(rbuf, "ontent-") == 0) {
-             bb_full_write(s, "Content-type: text/plain\r\n\r\n", 28);
+             full_write(s, "Content-type: text/plain\r\n\r\n", 28);
            }
            firstLine = 0;
          }
-         if (bb_full_write(s, rbuf, count) != count)
+         if (full_write(s, rbuf, count) != count)
              break;
 
 #if DEBUG
@@ -1337,8 +1337,8 @@ static int sendFile(const char *url)
        char *buf = config->buf;
 
        sendHeaders(HTTP_OK);
-       while ((count = bb_full_read(f, buf, MAX_MEMORY_BUFF)) > 0) {
-               if (bb_full_write(a_c_w, buf, count) != count)
+       while ((count = full_read(f, buf, MAX_MEMORY_BUFF)) > 0) {
+               if (full_write(a_c_w, buf, count) != count)
                        break;
        }
        close(f);
@@ -2000,7 +2000,7 @@ int httpd_main(int argc, char *argv[])
 # ifdef CONFIG_FEATURE_HTTPD_SETUID
   /* drop privileges */
   if(uid > 0)
-       setuid(uid);
+       xsetuid(uid);
 # endif
 #endif
 
index bda0c407bc497c4bf6ca946b6acb8b874e68b2e7..117bbe20ea283dcd476ae7da60d1c7f44b00ae0b 100644 (file)
@@ -9,8 +9,6 @@
 
 #include "busybox.h"
 
-#define xread bb_xread
-
 static void timeout(int signum)
 {
        bb_error_msg_and_die("Timed out");
@@ -151,13 +149,14 @@ repeatyness:
 
                for (fd = 0; fd < FD_SETSIZE; fd++) {
                        if (FD_ISSET(fd, &testfds)) {
-                               nread = xread(fd, bb_common_bufsiz1, sizeof(bb_common_bufsiz1));
+                               nread = safe_read(fd, bb_common_bufsiz1,
+                                                       sizeof(bb_common_bufsiz1));
 
                                if (fd == cfd) {
-                                       if (!nread) exit(0);
+                                       if (nread<1) exit(0);
                                        ofd = STDOUT_FILENO;
                                } else {
-                                       if (!nread) {
+                                       if (nread<1) {
                                                // Close outgoing half-connection so they get EOF, but
                                                // leave incoming alone so we can see response.
                                                shutdown(cfd, 1);
@@ -166,8 +165,7 @@ repeatyness:
                                        ofd = cfd;
                                }
 
-                               if (bb_full_write(ofd, bb_common_bufsiz1, nread) < 0)
-                                       bb_perror_msg_and_die(bb_msg_write_error);
+                               xwrite(ofd, bb_common_bufsiz1, nread);
                                if (delay > 0) sleep(delay);
                        }
                }
index b0572c89009c676088b4db32733a3f315eefa5da..dfa599ab50a0a74ea9e68712f4b7eca08808334c 100644 (file)
@@ -249,7 +249,7 @@ static int tftp(const int cmd, const struct hostent *host,
                        block_nr++;
 
                        if ((cmd & tftp_cmd_put) && (opcode == TFTP_DATA)) {
-                               len = bb_full_read(localfd, cp, tftp_bufsize - 4);
+                               len = full_read(localfd, cp, tftp_bufsize - 4);
 
                                if (len < 0) {
                                        bb_perror_msg(bb_msg_read_error);
@@ -420,7 +420,7 @@ static int tftp(const int cmd, const struct hostent *host,
 
                        if (tmp == block_nr) {
 
-                               len = bb_full_write(localfd, &buf[4], len - 4);
+                               len = full_write(localfd, &buf[4], len - 4);
 
                                if (len < 0) {
                                        bb_perror_msg(bb_msg_write_error);
index de8d06e9082b1c46b421454f5744a9bcbd35ccad..5031ae153ea4cea405efdf31b56433303e87c8da 100644 (file)
@@ -3322,7 +3322,7 @@ evalcommand(union node *cmd, int flags)
                        }
                        sp = arglist.list;
                }
-               bb_full_write(preverrout_fd, "\n", 1);
+               full_write(preverrout_fd, "\n", 1);
        }
 
        cmd_is_exec = 0;
@@ -4559,7 +4559,7 @@ expandhere(union node *arg, int fd)
 {
        herefd = fd;
        expandarg(arg, (struct arglist *)NULL, 0);
-       bb_full_write(fd, stackblock(), expdest - (char *)stackblock());
+       full_write(fd, stackblock(), expdest - (char *)stackblock());
 }
 
 
@@ -8378,7 +8378,7 @@ growstackstr(void)
 {
        size_t len = stackblocksize();
        if (herefd >= 0 && len >= 1024) {
-               bb_full_write(herefd, stackblock(), len);
+               full_write(herefd, stackblock(), len);
                return stackblock();
        }
        growstackblock();
@@ -10973,7 +10973,7 @@ openhere(union node *redir)
        if (redir->type == NHERE) {
                len = strlen(redir->nhere.doc->narg.text);
                if (len <= PIPESIZE) {
-                       bb_full_write(pip[1], redir->nhere.doc->narg.text, len);
+                       full_write(pip[1], redir->nhere.doc->narg.text, len);
                        goto out;
                }
        }
@@ -10987,7 +10987,7 @@ openhere(union node *redir)
 #endif
                signal(SIGPIPE, SIG_DFL);
                if (redir->type == NHERE)
-                       bb_full_write(pip[1], redir->nhere.doc->narg.text, len);
+                       full_write(pip[1], redir->nhere.doc->narg.text, len);
                else
                        expandhere(redir->nhere.doc, pip[1]);
                _exit(0);