Major coreutils update.
authormjn3 <mjn3@69ca8d6d-28ef-0310-b511-8ec308f3f277>
Wed, 19 Mar 2003 09:13:01 +0000 (09:13 +0000)
committermjn3 <mjn3@69ca8d6d-28ef-0310-b511-8ec308f3f277>
Wed, 19 Mar 2003 09:13:01 +0000 (09:13 +0000)
git-svn-id: svn://busybox.net/trunk/busybox@6751 69ca8d6d-28ef-0310-b511-8ec308f3f277

295 files changed:
Makefile
applets/applets.c
applets/busybox.c
archival/ar.c
archival/bunzip2.c
archival/cpio.c
archival/dpkg.c
archival/dpkg_deb.c
archival/gunzip.c
archival/gzip.c
archival/libunarchive/archive_copy_file.c
archival/libunarchive/archive_xread.c
archival/libunarchive/archive_xread_all.c
archival/libunarchive/archive_xread_all_eof.c
archival/libunarchive/check_header_gzip.c
archival/libunarchive/data_extract_all.c
archival/libunarchive/decompress_bunzip2.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/header_verbose_list.c
archival/libunarchive/seek_by_jump.c
archival/libunarchive/uncompress.c
archival/libunarchive/unpack_ar_archive.c
archival/libunarchive/unzip.c
archival/rpm.c
archival/rpm2cpio.c
archival/tar.c
archival/uncompress.c
archival/unzip.c
console-tools/chvt.c
console-tools/deallocvt.c
console-tools/dumpkmap.c
console-tools/loadacm.c
console-tools/loadfont.c
console-tools/loadkmap.c
console-tools/openvt.c
console-tools/setkeycodes.c
coreutils/Config.in
coreutils/basename.c
coreutils/cal.c
coreutils/cat.c
coreutils/chgrp.c
coreutils/chmod.c
coreutils/chown.c
coreutils/chroot.c
coreutils/cmp.c
coreutils/cp.c
coreutils/cut.c
coreutils/date.c
coreutils/dd.c
coreutils/df.c
coreutils/dirname.c
coreutils/dos2unix.c
coreutils/du.c
coreutils/echo.c
coreutils/env.c
coreutils/expr.c
coreutils/false.c
coreutils/head.c
coreutils/hostid.c
coreutils/id.c
coreutils/length.c
coreutils/libcoreutils/Makefile [new file with mode: 0644]
coreutils/libcoreutils/Makefile.in [new file with mode: 0644]
coreutils/libcoreutils/coreutils.h [new file with mode: 0644]
coreutils/libcoreutils/cp_mv_stat.c [new file with mode: 0644]
coreutils/libcoreutils/getopt_mk_fifo_nod.c [new file with mode: 0644]
coreutils/libcoreutils/xgetoptfile_sort_uniq.c [new file with mode: 0644]
coreutils/ln.c
coreutils/logname.c
coreutils/ls.c
coreutils/md5sum.c
coreutils/mkdir.c
coreutils/mkfifo.c
coreutils/mknod.c
coreutils/mv.c
coreutils/od.c
coreutils/printf.c
coreutils/pwd.c
coreutils/realpath.c
coreutils/rm.c
coreutils/rmdir.c
coreutils/sha1sum.c
coreutils/sleep.c
coreutils/sort.c
coreutils/stty.c
coreutils/sync.c
coreutils/tail.c
coreutils/tee.c
coreutils/test.c
coreutils/touch.c
coreutils/tr.c
coreutils/true.c
coreutils/tty.c
coreutils/uname.c
coreutils/uniq.c
coreutils/usleep.c
coreutils/uudecode.c
coreutils/uuencode.c
coreutils/watch.c
coreutils/wc.c
coreutils/who.c
coreutils/whoami.c
coreutils/yes.c
debianutils/mktemp.c
debianutils/readlink.c
debianutils/run_parts.c
debianutils/start_stop_daemon.c
debianutils/which.c
editors/awk.c
editors/sed.c
editors/vi.c
findutils/find.c
findutils/grep.c
findutils/xargs.c
include/dump.h
include/libbb.h
include/usage.h
init/halt.c
init/init.c
init/mesg.c
init/poweroff.c
init/reboot.c
init/start_stop_daemon.c
libbb/Makefile.in
libbb/ask_confirmation.c
libbb/bb_asprintf.c
libbb/change_identity.c
libbb/compare_string_array.c
libbb/concat_path_file.c
libbb/copy_file.c
libbb/copy_file_chunk.c [deleted file]
libbb/copyfd.c
libbb/correct_password.c
libbb/create_icmp6_socket.c
libbb/create_icmp_socket.c
libbb/default_error_retval.c [new file with mode: 0644]
libbb/dirname.c
libbb/dump.c
libbb/error_msg.c
libbb/error_msg_and_die.c
libbb/fclose_nonstdin.c [new file with mode: 0644]
libbb/fflush_stdout_and_exit.c [new file with mode: 0644]
libbb/find_root_device.c
libbb/full_read.c
libbb/full_write.c
libbb/get_console.c
libbb/get_last_path_component.c
libbb/get_line_from_file.c
libbb/getopt_ulflags.c [moved from libbb/time_string.c with 54% similarity]
libbb/herror_msg.c
libbb/herror_msg_and_die.c
libbb/inet_common.c
libbb/interface.c
libbb/kernel_version.c
libbb/loop.c
libbb/make_directory.c
libbb/messages.c
libbb/mode_string.c
libbb/module_syscalls.c
libbb/mtab.c
libbb/mtab_file.c
libbb/my_getgrnam.c
libbb/my_getpwnam.c
libbb/my_getpwnamegid.c
libbb/obscure.c
libbb/parse_mode.c
libbb/parse_number.c
libbb/perror_msg.c
libbb/perror_msg_and_die.c
libbb/perror_nomsg.c [new file with mode: 0644]
libbb/perror_nomsg_and_die.c [new file with mode: 0644]
libbb/print_file.c
libbb/printf.c [new file with mode: 0644]
libbb/process_escape_sequence.c
libbb/procps.c
libbb/read_package_field.c
libbb/recursive_action.c
libbb/remove_file.c
libbb/run_parts.c
libbb/run_shell.c
libbb/setup_environment.c
libbb/simplify_path.c
libbb/skip_whitespace.c [new file with mode: 0644]
libbb/speed_table.c [new file with mode: 0644]
libbb/syscalls.c
libbb/syslog_msg_with_name.c
libbb/verror_msg.c
libbb/vherror_msg.c
libbb/vperror_msg.c
libbb/warn_ignoring_args.c [new file with mode: 0644]
libbb/wfopen.c
libbb/wfopen_input.c [new file with mode: 0644]
libbb/xconnect.c
libbb/xfuncs.c
libbb/xgetcwd.c
libbb/xgethostbyname.c
libbb/xgethostbyname2.c
libbb/xgetlarg.c
libbb/xgetularg.c [new file with mode: 0644]
libbb/xreadlink.c
libbb/xregcomp.c
libpwdgrp/shadow.c
loginutils/addgroup.c
loginutils/adduser.c
loginutils/deluser.c
loginutils/getty.c
loginutils/login.c
loginutils/passwd.c
loginutils/su.c
loginutils/sulogin.c
loginutils/vlock.c
miscutils/adjtimex.c
miscutils/crond.c
miscutils/crontab.c
miscutils/dc.c
miscutils/dutmp.c
miscutils/makedevs.c
miscutils/mt.c
miscutils/strings.c
miscutils/time.c
miscutils/update.c
miscutils/watchdog.c
modutils/insmod.c
modutils/lsmod.c
modutils/modprobe.c
modutils/rmmod.c
networking/arping.c
networking/ftpgetput.c
networking/hostname.c
networking/httpd.c
networking/ifconfig.c
networking/ifupdown.c
networking/inetd.c
networking/ip.c
networking/ipcalc.c
networking/libiproute/ip_parse_common_args.c
networking/libiproute/ipaddress.c
networking/libiproute/iplink.c
networking/libiproute/iproute.c
networking/libiproute/iptunnel.c
networking/libiproute/libnetlink.c
networking/libiproute/ll_addr.c
networking/libiproute/utils.c
networking/nameif.c
networking/nc.c
networking/netstat.c
networking/nslookup.c
networking/ping.c
networking/ping6.c
networking/route.c
networking/telnet.c
networking/telnetd.c
networking/tftp.c
networking/traceroute.c
networking/udhcp/dhcpc.c
networking/vconfig.c
networking/wget.c
procps/free.c
procps/kill.c
procps/pidof.c
procps/renice.c
procps/top.c
shell/ash.c
shell/cmdedit.c
shell/hush.c
shell/lash.c
shell/msh.c
sysklogd/klogd.c
sysklogd/logger.c
sysklogd/logread.c
sysklogd/syslogd.c
util-linux/dmesg.c
util-linux/fbset.c
util-linux/fdflush.c
util-linux/fdisk.c
util-linux/freeramdisk.c
util-linux/fsck_minix.c
util-linux/getopt.c
util-linux/hexdump.c
util-linux/hwclock.c
util-linux/losetup.c
util-linux/mkfs_minix.c
util-linux/mkswap.c
util-linux/more.c
util-linux/mount.c
util-linux/nfsmount.c
util-linux/pivot_root.c
util-linux/rdate.c
util-linux/swaponoff.c
util-linux/umount.c

index 48911f7..6be57b5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -29,7 +29,7 @@ include Rules.mak
 DIRS:=applets archival archival/libunarchive coreutils console-tools \
        debianutils editors findutils init miscutils modutils networking \
        networking/libiproute networking/udhcp procps loginutils shell \
-       sysklogd util-linux libbb libpwdgrp
+       sysklogd util-linux libbb libpwdgrp coreutils/libcoreutils
 
 ifeq ($(strip $(HAVE_DOT_CONFIG)),y)
 
index 9f69da1..1b69ade 100644 (file)
@@ -78,7 +78,7 @@ static struct BB_suid_config *suid_config;
 
 
 
-extern void show_usage(void)
+extern void bb_show_usage(void)
 {
        const char *format_string;
        const char *usage_string = usage_messages;
@@ -93,7 +93,7 @@ extern void show_usage(void)
        format_string = "%s\n\nUsage: %s %s\n\n";
        if(*usage_string == '\b')
                format_string = "%s\n\nNo help available.\n\n";
-       fprintf(stderr, format_string, full_version, applet_using->name, usage_string);
+       fprintf(stderr, format_string, bb_msg_full_version, applet_using->name, usage_string);
 
        exit(EXIT_FAILURE);
 }
@@ -127,7 +127,7 @@ void run_applet_by_name(const char *name, int argc, char **argv)
        recurse_level++;
        /* Do a binary search to find the applet entry given the name. */
        if ((applet_using = find_applet_by_name(name)) != NULL) {
-               applet_name = applet_using->name;
+               bb_applet_name = applet_using->name;
                if (argv[1] && strcmp(argv[1], "--help") == 0) {
                        if (strcmp(applet_using->name, "busybox")==0) {
                                if(argv[2])
@@ -136,7 +136,7 @@ void run_applet_by_name(const char *name, int argc, char **argv)
                                  applet_using = NULL;
                        }
                        if(applet_using)
-                               show_usage();
+                               bb_show_usage();
                        been_there_done_that=1;
                        busybox_main(0, NULL);
                }
@@ -201,18 +201,18 @@ void check_suid ( struct BB_applet *applet )
                                m >>= 3;
 
                        if (!( m & S_IXOTH ))   /* is x bit not set ? */
-                               error_msg_and_die ( "You have no permission to run this 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 ))
-                                       error_msg_and_die ( "BusyBox binary has insufficient rights to set proper GID for applet!" );
+                                       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 ))
-                                       error_msg_and_die ( "BusyBox binary has insufficient rights to set proper UID for applet!" );
+                                       bb_error_msg_and_die ( "BusyBox binary has insufficient rights to set proper UID for applet!" );
                        }       
                        else
                                setuid ( ruid ); /* no suid -> drop */
@@ -237,7 +237,7 @@ void check_suid ( struct BB_applet *applet )
 
        if ( applet-> need_suid == _BB_SUID_ALWAYS ) {
                if ( geteuid ( ) != 0 ) 
-                       error_msg_and_die ( "This applet requires root priviledges!" );
+                       bb_error_msg_and_die ( "This applet requires root priviledges!" );
        } 
        else if ( applet-> need_suid == _BB_SUID_NEVER ) {
                setgid ( rgid ); /* drop all priviledges */
@@ -280,7 +280,7 @@ int parse_config_file ( void )
                                        p = strchr ( buffer, '#' );
                                        if ( p )
                                                *p = 0;
-                                       p = buffer + xstrlen ( buffer );
+                                       p = buffer + bb_strlen ( buffer );
                                        while (( p > buffer ) && isspace ( *--p ))
                                                *p = 0;         
 
index 4f1ef26..457a85a 100644 (file)
@@ -10,7 +10,7 @@
 #endif
 
 int been_there_done_that = 0; /* Also used in applets.c */
-const char *applet_name;
+const char *bb_applet_name;
 
 #ifdef CONFIG_FEATURE_INSTALLER
 /* 
@@ -60,7 +60,7 @@ static void install_links(const char *busybox, int use_symbolic_links)
                        install_dir[applets[i].location], applets[i].name);
                rc = Link(busybox, fpc);
                if (rc!=0 && errno!=EEXIST) {
-                       perror_msg("%s", fpc);
+                       bb_perror_msg("%s", fpc);
                }
                free(fpc);
        }
@@ -72,14 +72,14 @@ int main(int argc, char **argv)
 {
        const char *s;
 
-       applet_name = argv[0];
+       bb_applet_name = argv[0];
 
-       if (applet_name[0] == '-')
-               applet_name++;
+       if (bb_applet_name[0] == '-')
+               bb_applet_name++;
 
-       for (s = applet_name; *s != '\0';) {
+       for (s = bb_applet_name; *s != '\0';) {
                if (*s++ == '/')
-                       applet_name = s;
+                       bb_applet_name = s;
        }
 
 #ifdef CONFIG_LOCALE_SUPPORT 
@@ -91,8 +91,8 @@ int main(int argc, char **argv)
        }
 #endif
 
-       run_applet_by_name(applet_name, argc, argv);
-       error_msg_and_die("applet not found");
+       run_applet_by_name(bb_applet_name, argc, argv);
+       bb_error_msg_and_die("applet not found");
 }
 
 
@@ -143,7 +143,7 @@ int busybox_main(int argc, char **argv)
                                "\tutilities into a single executable.  Most people will create a\n"
                                "\tlink to busybox for each function they wish to use, and BusyBox\n"
                                "\twill act like whatever it was invoked as.\n" 
-                               "\nCurrently defined functions:\n", full_version);
+                               "\nCurrently defined functions:\n", bb_msg_full_version);
 
                while (a->name != 0) {
                        col +=
index 87968f7..57ec927 100644 (file)
@@ -40,7 +40,7 @@
 
 static void header_verbose_list_ar(const file_header_t *file_header)
 {
-       const char *mode = mode_string(file_header->mode);
+       const char *mode = bb_mode_string(file_header->mode);
        char *mtime;
 
        mtime = ctime(&file_header->mtime);
@@ -58,7 +58,7 @@ static void data_extract_regular_file(archive_handle_t *archive_handle)
        int dst_fd;
 
        file_header = archive_handle->file_header;
-       dst_fd = xopen(file_header->name, O_WRONLY | O_CREAT);
+       dst_fd = bb_xopen(file_header->name, O_WRONLY | O_CREAT);
        archive_copy_file(archive_handle, dst_fd);      
        close(dst_fd);
 
@@ -110,16 +110,16 @@ extern int ar_main(int argc, char **argv)
                        archive_handle->action_header = header_verbose_list_ar;
                        break;
                default:
-                       show_usage();
+                       bb_show_usage();
                }
        }
  
        /* check the src filename was specified */
        if (optind == argc) {
-               show_usage();
+               bb_show_usage();
        }
 
-       archive_handle->src_fd = xopen(argv[optind++], O_RDONLY);
+       archive_handle->src_fd = bb_xopen(argv[optind++], O_RDONLY);
 
        /* TODO: This is the same as in tar, seperate function ? */
        while (optind < argc) {
@@ -133,7 +133,7 @@ extern int ar_main(int argc, char **argv)
 #else
        archive_xread_all(archive_handle, magic, 7);
        if (strncmp(magic, "!<arch>", 7) != 0) {
-               error_msg_and_die("Invalid ar magic");
+               bb_error_msg_and_die("Invalid ar magic");
        }
        archive_handle->offset += 7;
 
index d5c06f4..eb5238c 100644 (file)
@@ -41,7 +41,7 @@ int bunzip2_main(int argc, char **argv)
        char *delete_name = NULL;
 
        /* if called as bzcat */
-       if (strcmp(applet_name, "bzcat") == 0)
+       if (strcmp(bb_applet_name, "bzcat") == 0)
                flags |= bunzip_to_stdout;
 
        while ((opt = getopt(argc, argv, "cfh")) != -1) {
@@ -54,7 +54,7 @@ int bunzip2_main(int argc, char **argv)
                        break;
                case 'h':
                default:
-                       show_usage(); /* exit's inside usage */
+                       bb_show_usage(); /* exit's inside usage */
                }
        }
 
@@ -64,23 +64,23 @@ int bunzip2_main(int argc, char **argv)
                src_fd = fileno(stdin);
        } else {
                /* Open input file */
-               src_fd = xopen(argv[optind], O_RDONLY);
+               src_fd = bb_xopen(argv[optind], O_RDONLY);
 
-               save_name = xstrdup(argv[optind]);
+               save_name = bb_xstrdup(argv[optind]);
                if (strcmp(save_name + strlen(save_name) - 4, ".bz2") != 0)
-                       error_msg_and_die("Invalid extension");
+                       bb_error_msg_and_die("Invalid extension");
                save_name[strlen(save_name) - 4] = '\0';
        }
 
        /* Check that the input is sane.  */
        if (isatty(src_fd) && (flags & bunzip_force) == 0) {
-               error_msg_and_die("compressed data not read from terminal.  Use -f to force it.");
+               bb_error_msg_and_die("compressed data not read from terminal.  Use -f to force it.");
        }
 
        if (flags & bunzip_to_stdout) {
                dst_fd = fileno(stdout);
        } else {
-               dst_fd = xopen(save_name, O_WRONLY | O_CREAT);
+               dst_fd = bb_xopen(save_name, O_WRONLY | O_CREAT);
        }
 
        if (uncompressStream(src_fd, dst_fd)) {
@@ -96,7 +96,7 @@ int bunzip2_main(int argc, char **argv)
        }
 
        if ((delete_name) && (unlink(delete_name) < 0)) {
-               error_msg_and_die("Couldn't remove %s", delete_name);
+               bb_error_msg_and_die("Couldn't remove %s", delete_name);
        }
 
        return status;
index 49f3f88..111807c 100644 (file)
@@ -63,11 +63,11 @@ extern int cpio_main(int argc, char **argv)
                        archive_handle->action_header = header_list;
                        break;
                case 'F':
-                       archive_handle->src_fd = xopen(optarg, O_RDONLY);
+                       archive_handle->src_fd = bb_xopen(optarg, O_RDONLY);
                        archive_handle->seek = seek_by_jump;
                        break;
                default:
-                       show_usage();
+                       bb_show_usage();
                }
        }
 
index 6925922..3288f7e 100644 (file)
@@ -177,7 +177,7 @@ int search_name_hashtable(const char *key)
                        }
                }
        }
-       name_hashtable[probe_address] = xstrdup(key);
+       name_hashtable[probe_address] = bb_xstrdup(key);
        return(probe_address);
 }
 
@@ -218,10 +218,10 @@ int version_compare_part(const char *version1, const char *version2)
        int ret;
 
        if (version1 == NULL) {
-               version1 = xstrdup("");
+               version1 = bb_xstrdup("");
        }
        if (version2 == NULL) {
-               version2 = xstrdup("");
+               version2 = bb_xstrdup("");
        }
        upstream_len1 = strlen(version1);
        upstream_len2 = strlen(version2);
@@ -229,10 +229,10 @@ int version_compare_part(const char *version1, const char *version2)
        while ((len1 < upstream_len1) || (len2 < upstream_len2)) {
                /* Compare non-digit section */
                tmp_int = strcspn(&version1[len1], "0123456789");
-               name1_char = xstrndup(&version1[len1], tmp_int);
+               name1_char = bb_xstrndup(&version1[len1], tmp_int);
                len1 += tmp_int;
                tmp_int = strcspn(&version2[len2], "0123456789");
-               name2_char = xstrndup(&version2[len2], tmp_int);
+               name2_char = bb_xstrndup(&version2[len2], tmp_int);
                len2 += tmp_int;
                tmp_int = strcmp(name1_char, name2_char);
                free(name1_char);
@@ -244,10 +244,10 @@ int version_compare_part(const char *version1, const char *version2)
 
                /* Compare digits */
                tmp_int = strspn(&version1[len1], "0123456789");
-               name1_char = xstrndup(&version1[len1], tmp_int);
+               name1_char = bb_xstrndup(&version1[len1], tmp_int);
                len1 += tmp_int;
                tmp_int = strspn(&version2[len2], "0123456789");
-               name2_char = xstrndup(&version2[len2], tmp_int);
+               name2_char = bb_xstrndup(&version2[len2], tmp_int);
                len2 += tmp_int;
                ver_num1 = atoi(name1_char);
                ver_num2 = atoi(name2_char);
@@ -306,8 +306,8 @@ int version_compare(const unsigned int ver1, const unsigned int ver2)
        }
 
        /* Compare upstream version */
-       upstream_ver1 = xstrdup(ver1_ptr);
-       upstream_ver2 = xstrdup(ver2_ptr);
+       upstream_ver1 = bb_xstrdup(ver1_ptr);
+       upstream_ver2 = bb_xstrdup(ver2_ptr);
 
        /* Chop off debian version, and store for later use */
        deb_ver1 = strrchr(upstream_ver1, '-');
@@ -397,7 +397,7 @@ int search_package_hashtable(const unsigned int name, const unsigned int version
  */
 void add_split_dependencies(common_node_t *parent_node, const char *whole_line, unsigned int edge_type)
 {
-       char *line = xstrdup(whole_line);
+       char *line = bb_xstrdup(whole_line);
        char *line2;
        char *line_ptr1 = NULL;
        char *line_ptr2 = NULL;
@@ -410,7 +410,7 @@ void add_split_dependencies(common_node_t *parent_node, const char *whole_line,
 
        field = strtok_r(line, ",", &line_ptr1);
        do {
-               line2 = xstrdup(field);
+               line2 = bb_xstrdup(field);
                field2 = strtok_r(line2, "|", &line_ptr2);
                if ((edge_type == EDGE_DEPENDS) && (strcmp(field, field2) != 0)) {
                        type = EDGE_OR_DEPENDS;
@@ -457,7 +457,7 @@ void add_split_dependencies(common_node_t *parent_node, const char *whole_line,
                                        else if (strncmp(version, ">=", offset_ch) == 0) {
                                                edge->operator = VER_MORE_EQUAL;
                                        } else {
-                                               error_msg_and_die("Illegal operator\n");
+                                               bb_error_msg_and_die("Illegal operator\n");
                                        }
                                }
                                /* skip to start of version numbers */
@@ -588,7 +588,7 @@ unsigned int get_status(const unsigned int status_node, const int num)
                status_string += strspn(status_string, " ");
        }
        len = strcspn(status_string, " \n\0");
-       state_sub_string = xstrndup(status_string, len);
+       state_sub_string = bb_xstrndup(status_string, len);
        state_sub_num = search_name_hashtable(state_sub_string);
        free(state_sub_string);
        return(state_sub_num);
@@ -620,7 +620,7 @@ void set_status(const unsigned int status_node_num, const char *new_value, const
                        status_len = new_value_len;
                        break;
                default:
-                       error_msg_and_die("DEBUG ONLY: this shouldnt happen");
+                       bb_error_msg_and_die("DEBUG ONLY: this shouldnt happen");
        }
 
        new_status = (char *) xmalloc(want_len + flag_len + status_len + 3);
@@ -638,7 +638,7 @@ void index_status_file(const char *filename)
        status_node_t *status_node = NULL;
        unsigned int status_num;
 
-       status_file = xfopen(filename, "r");
+       status_file = bb_xfopen(filename, "r");
        while ((control_buffer = fgets_str(status_file, "\n\n")) != NULL) {
                const unsigned int package_num = fill_package_struct(control_buffer);
                if (package_num != -1) {
@@ -648,7 +648,7 @@ void index_status_file(const char *filename)
                        if (status_line != NULL) {
                                status_line += 7;
                                status_line += strspn(status_line, " \n\t");
-                               status_line = xstrndup(status_line, strcspn(status_line, "\n\0"));
+                               status_line = bb_xstrndup(status_line, strcspn(status_line, "\n\0"));
                                status_node->status = search_name_hashtable(status_line);
                                free(status_line);
                        }
@@ -754,8 +754,8 @@ void write_buffer_no_status(FILE *new_status_file, const char *control_buffer)
 /* This could do with a cleanup */
 void write_status_file(deb_file_t **deb_file)
 {
-       FILE *old_status_file = xfopen("/var/lib/dpkg/status", "r");
-       FILE *new_status_file = xfopen("/var/lib/dpkg/status.udeb", "w");
+       FILE *old_status_file = bb_xfopen("/var/lib/dpkg/status", "r");
+       FILE *new_status_file = bb_xfopen("/var/lib/dpkg/status.udeb", "w");
        char *package_name;
        char *status_from_file;
        char *control_buffer = NULL;
@@ -773,14 +773,14 @@ void write_status_file(deb_file_t **deb_file)
 
                tmp_string += 8;
                tmp_string += strspn(tmp_string, " \n\t");
-               package_name = xstrndup(tmp_string, strcspn(tmp_string, "\n\0"));
+               package_name = bb_xstrndup(tmp_string, strcspn(tmp_string, "\n\0"));
                write_flag = FALSE;
                tmp_string = strstr(control_buffer, "Status:");
                if (tmp_string != NULL) {
                        /* Seperate the status value from the control buffer */
                        tmp_string += 7;
                        tmp_string += strspn(tmp_string, " \n\t");
-                       status_from_file = xstrndup(tmp_string, strcspn(tmp_string, "\n"));
+                       status_from_file = bb_xstrndup(tmp_string, strcspn(tmp_string, "\n"));
                } else {
                        status_from_file = NULL;
                }
@@ -810,7 +810,7 @@ void write_status_file(deb_file_t **deb_file)
                                        }
                                        /* This is temperary, debugging only */
                                        if (deb_file[i] == NULL) {
-                                               error_msg_and_die("ALERT: Couldnt find a control file, your status file may be broken, status may be incorrect for %s", package_name);
+                                               bb_error_msg_and_die("ALERT: Couldnt find a control file, your status file may be broken, status may be incorrect for %s", package_name);
                                        }
                                }
                                else if (strcmp("not-installed", name_hashtable[state_status]) == 0) {
@@ -881,15 +881,15 @@ void write_status_file(deb_file_t **deb_file)
        if (rename("/var/lib/dpkg/status", "/var/lib/dpkg/status.udeb.bak") == -1) {
                struct stat stat_buf;   
                if (stat("/var/lib/dpkg/status", &stat_buf) == 0) {
-                       error_msg_and_die("Couldnt create backup status file");
+                       bb_error_msg_and_die("Couldnt create backup status file");
                }
                /* Its ok if renaming the status file fails becasue status 
                 * file doesnt exist, maybe we are starting from scratch */
-               error_msg("No status file found, creating new one");
+               bb_error_msg("No status file found, creating new one");
        }
 
        if (rename("/var/lib/dpkg/status.udeb", "/var/lib/dpkg/status") == -1) {
-               error_msg_and_die("DANGER: Couldnt create status file, you need to manually repair your status file");
+               bb_error_msg_and_die("DANGER: Couldnt create status file, you need to manually repair your status file");
        }
 }
 
@@ -976,7 +976,7 @@ int check_deps(deb_file_t **deb_file, int deb_start, int dep_max_count)
                                }
 
                                if (result) {
-                                       error_msg_and_die("Package %s conflicts with %s",
+                                       bb_error_msg_and_die("Package %s conflicts with %s",
                                                name_hashtable[package_node->name],
                                                name_hashtable[package_edge->name]);
                                }
@@ -1021,7 +1021,7 @@ int check_deps(deb_file_t **deb_file, int deb_start, int dep_max_count)
                                        }
 
                                        if (result) {
-                                               error_msg_and_die("Package %s pre-depends on %s, but it is not installed",
+                                               bb_error_msg_and_die("Package %s pre-depends on %s, but it is not installed",
                                                        name_hashtable[package_node->name],
                                                        name_hashtable[package_edge->name]);
                                        }
@@ -1038,7 +1038,7 @@ int check_deps(deb_file_t **deb_file, int deb_start, int dep_max_count)
                                        }
                                        /* It must be already installed, or to be installed */
                                        if (result) {
-                                               error_msg_and_die("Package %s depends on %s, but it is not installed, or flaged to be installed",
+                                               bb_error_msg_and_die("Package %s depends on %s, but it is not installed, or flaged to be installed",
                                                        name_hashtable[package_node->name],
                                                        name_hashtable[package_edge->name]);
                                        }
@@ -1065,9 +1065,8 @@ char **create_list(const char *filename)
                return(NULL);
        }
 
-       while ((line = get_line_from_file(list_stream)) != NULL) {
+       while ((line = bb_get_chomped_line_from_file(list_stream)) != NULL) {
                file_list = xrealloc(file_list, sizeof(char *) * (count + 2));
-               chomp(line);
                file_list[count] = line;
                count++;
        }
@@ -1228,7 +1227,7 @@ void remove_package(const unsigned int package_num)
        /* run prerm script */
        return_value = run_package_script(package_name, "prerm");
        if (return_value == -1) {
-               error_msg_and_die("script failed, prerm failure");
+               bb_error_msg_and_die("script failed, prerm failure");
        }
 
        /* Create a list of files to remove, and a seperate list of those to keep */
@@ -1245,7 +1244,7 @@ void remove_package(const unsigned int package_num)
 
        /* Create a list of files in /var/lib/dpkg/info/<package>.* to keep  */
        exclude_files = xmalloc(sizeof(char*) * 3);
-       exclude_files[0] = xstrdup(conffile_name);
+       exclude_files[0] = bb_xstrdup(conffile_name);
        exclude_files[1] = xmalloc(package_name_length + 27);
        sprintf(exclude_files[1], "/var/lib/dpkg/info/%s.postrm", package_name);
        exclude_files[2] = NULL;
@@ -1275,7 +1274,7 @@ void purge_package(const unsigned int package_num)
 
        /* run prerm script */
        if (run_package_script(package_name, "prerm") != 0) {
-               error_msg_and_die("script failed, prerm failure");
+               bb_error_msg_and_die("script failed, prerm failure");
        }
 
        /* Create a list of files to remove */
@@ -1297,7 +1296,7 @@ void purge_package(const unsigned int package_num)
 
        /* run postrm script */
        if (run_package_script(package_name, "postrm") == -1) {
-               error_msg_and_die("postrm fialure.. set status to what?");
+               bb_error_msg_and_die("postrm fialure.. set status to what?");
        }
 
        /* Change package status */
@@ -1312,7 +1311,7 @@ static archive_handle_t *init_archive_deb_ar(const char *filename)
        /* Setup an ar archive handle that refers to the gzip sub archive */    
        ar_handle = init_handle();
        ar_handle->filter = filter_accept_list_reassign;
-       ar_handle->src_fd = xopen(filename, O_RDONLY);
+       ar_handle->src_fd = bb_xopen(filename, O_RDONLY);
 
        return(ar_handle);      
 }
@@ -1420,7 +1419,7 @@ static void unpack_package(deb_file_t *deb_file)
        /* Run the preinst prior to extracting */
        if (run_package_script(package_name, "preinst") != 0) {
                /* when preinst returns exit code != 0 then quit installation process */
-               error_msg_and_die("subprocess pre-installation script returned error.");
+               bb_error_msg_and_die("subprocess pre-installation script returned error.");
        }       
 
        /* Extract data.tar.gz to the root directory */
@@ -1430,7 +1429,7 @@ static void unpack_package(deb_file_t *deb_file)
 
        /* Create the list file */
        strcat(info_prefix, "list");
-       out_stream = xfopen(info_prefix, "w");                  
+       out_stream = bb_xfopen(info_prefix, "w");                       
        while (archive_handle->passed) {
                /* blindly skip over the leading '.' */
                fputs(archive_handle->passed->data + 1, out_stream);
@@ -1457,7 +1456,7 @@ void configure_package(deb_file_t *deb_file)
        /* Run the postinst script */
        if (run_package_script(package_name, "postinst") != 0) {
                /* TODO: handle failure gracefully */
-               error_msg_and_die("postrm failure.. set status to what?");
+               bb_error_msg_and_die("postrm failure.. set status to what?");
        }
        /* Change status to reflect success */
        set_status(status_num, "install", 1);
@@ -1506,12 +1505,12 @@ int dpkg_main(int argc, char **argv)
                                dpkg_opt |= dpkg_opt_filename;
                                break;
                        default:
-                               show_usage();
+                               bb_show_usage();
                }
        }
        /* check for non-otion argument if expected  */
        if ((dpkg_opt == 0) || ((argc == optind) && !(dpkg_opt && dpkg_opt_list_installed))) {
-               show_usage();
+               bb_show_usage();
        }
 
 /*     puts("(Reading database ... xxxxx files and directories installed.)"); */
@@ -1538,13 +1537,13 @@ int dpkg_main(int argc, char **argv)
                        init_archive_deb_control(archive_handle);
                        deb_file[deb_count]->control_file = deb_extract_control_file_to_buffer(archive_handle, control_list);
                        if (deb_file[deb_count]->control_file == NULL) {
-                               error_msg_and_die("Couldnt extract control file");
+                               bb_error_msg_and_die("Couldnt extract control file");
                        }
-                       deb_file[deb_count]->filename = xstrdup(argv[optind]);
+                       deb_file[deb_count]->filename = bb_xstrdup(argv[optind]);
                        package_num = fill_package_struct(deb_file[deb_count]->control_file);
 
                        if (package_num == -1) {
-                               error_msg("Invalid control file in %s", argv[optind]);
+                               bb_error_msg("Invalid control file in %s", argv[optind]);
                                continue;
                        }
                        deb_file[deb_count]->package = (unsigned int) package_num;
@@ -1574,7 +1573,7 @@ int dpkg_main(int argc, char **argv)
                                search_name_hashtable(argv[optind]),
                                search_name_hashtable("ANY"), VER_ANY);
                        if (package_hashtable[deb_file[deb_count]->package] == NULL) {
-                               error_msg_and_die("Package %s is uninstalled or unknown\n", argv[optind]);
+                               bb_error_msg_and_die("Package %s is uninstalled or unknown\n", argv[optind]);
                        }
                        state_status = get_status(search_status_hashtable(name_hashtable[package_hashtable[deb_file[deb_count]->package]->name]), 3);
 
@@ -1582,13 +1581,13 @@ int dpkg_main(int argc, char **argv)
                        if (dpkg_opt & dpkg_opt_remove) {
                                if ((strcmp(name_hashtable[state_status], "not-installed") == 0) ||
                                        (strcmp(name_hashtable[state_status], "config-files") == 0)) {
-                                       error_msg_and_die("%s is already removed.", name_hashtable[package_hashtable[deb_file[deb_count]->package]->name]);
+                                       bb_error_msg_and_die("%s is already removed.", name_hashtable[package_hashtable[deb_file[deb_count]->package]->name]);
                                }
                        }
                        else if (dpkg_opt & dpkg_opt_purge) {
                                /* if package status is "conf-files" then its ok */
                                if (strcmp(name_hashtable[state_status], "not-installed") == 0) {
-                                       error_msg_and_die("%s is already purged.", name_hashtable[package_hashtable[deb_file[deb_count]->package]->name]);
+                                       bb_error_msg_and_die("%s is already purged.", name_hashtable[package_hashtable[deb_file[deb_count]->package]->name]);
                                }
                        }
                }
@@ -1601,7 +1600,7 @@ int dpkg_main(int argc, char **argv)
        /* TODO: check dependencies before removing */
        if ((dpkg_opt & dpkg_opt_force_ignore_depends) != dpkg_opt_force_ignore_depends) {
                if (!check_deps(deb_file, 0, deb_count)) {
-                       error_msg_and_die("Dependency check failed");
+                       bb_error_msg_and_die("Dependency check failed");
                }
        }
 
index 2c33822..2d7383f 100644 (file)
@@ -82,15 +82,15 @@ extern int dpkg_deb_main(int argc, char **argv)
                                tar_archive->action_data = data_extract_all;
                                break;
                        default:
-                               show_usage();
+                               bb_show_usage();
                }
        }
 
        if (optind + 2 < argc)  {
-               show_usage();
+               bb_show_usage();
        }
 
-       tar_archive->src_fd = ar_archive->src_fd = xopen(argv[optind++], O_RDONLY);
+       tar_archive->src_fd = ar_archive->src_fd = bb_xopen(argv[optind++], O_RDONLY);
 
        /* Workout where to extract the files */
        /* 2nd argument is a dir name */
index e9963a8..3350da0 100644 (file)
@@ -82,7 +82,7 @@ extern int gunzip_main(int argc, char **argv)
        int opt;
 
        /* if called as zcat */
-       if (strcmp(applet_name, "zcat") == 0) {
+       if (strcmp(bb_applet_name, "zcat") == 0) {
                flags |= gunzip_to_stdout;
        }
 
@@ -100,7 +100,7 @@ extern int gunzip_main(int argc, char **argv)
                case 'd':               /* Used to convert gzip to gunzip. */
                        break;
                default:
-                       show_usage();   /* exit's inside usage */
+                       bb_show_usage();        /* exit's inside usage */
                }
        }
 
@@ -118,29 +118,29 @@ extern int gunzip_main(int argc, char **argv)
                        src_fd = fileno(stdin);
                        flags |= gunzip_to_stdout;
                } else {
-                       src_fd = xopen(old_path, O_RDONLY);
+                       src_fd = bb_xopen(old_path, O_RDONLY);
 
                        /* Get the time stamp on the input file. */
                        if (stat(old_path, &stat_buf) < 0) {
-                               error_msg_and_die("Couldn't stat file %s", old_path);
+                               bb_error_msg_and_die("Couldn't stat file %s", old_path);
                        }
                }
 
                /* Check that the input is sane.  */
                if (isatty(src_fd) && ((flags & gunzip_force) == 0)) {
-                       error_msg_and_die
+                       bb_error_msg_and_die
                                ("compressed data not read from terminal.  Use -f to force it.");
                }
 
                /* Set output filename and number */
                if (flags & gunzip_test) {
-                       dst_fd = xopen("/dev/null", O_WRONLY);  /* why does test use filenum 2 ? */
+                       dst_fd = bb_xopen("/dev/null", O_WRONLY);       /* why does test use filenum 2 ? */
                } else if (flags & gunzip_to_stdout) {
                        dst_fd = fileno(stdout);
                } else {
                        char *extension;
 
-                       new_path = xstrdup(old_path);
+                       new_path = bb_xstrdup(old_path);
 
                        extension = strrchr(new_path, '.');
 #ifdef CONFIG_FEATURE_GUNZIP_UNCOMPRESS
@@ -154,11 +154,11 @@ extern int gunzip_main(int argc, char **argv)
                                extension[2] = 'a';
                                extension[3] = 'r';
                        } else {
-                               error_msg_and_die("Invalid extension");
+                               bb_error_msg_and_die("Invalid extension");
                        }
 
                        /* Open output file */
-                       dst_fd = xopen(new_path, O_WRONLY | O_CREAT);
+                       dst_fd = bb_xopen(new_path, O_WRONLY | O_CREAT);
 
                        /* Set permissions on the file */
                        chmod(new_path, stat_buf.st_mode);
@@ -168,10 +168,10 @@ extern int gunzip_main(int argc, char **argv)
                }
 
                /* do the decompression, and cleanup */
-               if (xread_char(src_fd) == 0x1f) {
+               if (bb_xread_char(src_fd) == 0x1f) {
                        unsigned char magic2;
                        
-                       magic2 = xread_char(src_fd);
+                       magic2 = bb_xread_char(src_fd);
 #ifdef CONFIG_FEATURE_GUNZIP_UNCOMPRESS
                        if (magic2 == 0x9d) {
                                status = uncompress(src_fd, dst_fd);
@@ -181,14 +181,14 @@ extern int gunzip_main(int argc, char **argv)
                                        check_header_gzip(src_fd);
                                        status = inflate(src_fd, dst_fd);
                                        if (status != 0) {
-                                               error_msg_and_die("Error inflating");
+                                               bb_error_msg_and_die("Error inflating");
                                        }
                                        check_trailer_gzip(src_fd);
                                } else {
-                                       error_msg_and_die("Invalid magic");
+                                       bb_error_msg_and_die("Invalid magic");
                                }
                } else {
-                       error_msg_and_die("Invalid magic");
+                       bb_error_msg_and_die("Invalid magic");
                }
 
                if ((status != EXIT_SUCCESS) && (new_path)) {
@@ -205,7 +205,7 @@ extern int gunzip_main(int argc, char **argv)
 
                /* delete_path will be NULL if in test mode or from stdin */
                if (delete_path && (unlink(delete_path) == -1)) {
-                       error_msg_and_die("Couldn't remove %s", delete_path);
+                       bb_error_msg_and_die("Couldn't remove %s", delete_path);
                }
 
                free(new_path);
index 971724d..cabc4aa 100644 (file)
@@ -187,7 +187,7 @@ typedef int file_t;         /* Do not use stdio */
 
 /* Diagnostic functions */
 #ifdef DEBUG
-#  define Assert(cond,msg) {if(!(cond)) error_msg(msg);}
+#  define Assert(cond,msg) {if(!(cond)) bb_error_msg(msg);}
 #  define Trace(x) fprintf x
 #  define Tracev(x) {if (verbose) fprintf x ;}
 #  define Tracevv(x) {if (verbose>1) fprintf x ;}
@@ -352,10 +352,10 @@ static void clear_bufs(void)
        bytes_in = 0L;
 }
 
-static void write_error_msg(void)
+static void write_bb_error_msg(void)
 {
        fputc('\n', stderr);
-       perror_msg("");
+       bb_perror_nomsg();
        abort_gzip();
 }
 
@@ -369,7 +369,7 @@ static void write_buf(int fd, void *buf, unsigned cnt)
 
        while ((n = write(fd, buf, cnt)) != cnt) {
                if (n == (unsigned) (-1)) {
-                       write_error_msg();
+                       write_bb_error_msg();
                }
                cnt -= n;
                buf = (void *) ((char *) buf + n);
@@ -977,11 +977,11 @@ static void check_match(IPos start, IPos match, int length)
        /* check that the match is indeed a match */
        if (memcmp((char *) window + match,
                           (char *) window + start, length) != EQUAL) {
-               error_msg(" start %d, match %d, length %d", start, match, length);
-               error_msg("invalid match");
+               bb_error_msg(" start %d, match %d, length %d", start, match, length);
+               bb_error_msg("invalid match");
        }
        if (verbose > 1) {
-               error_msg("\\[%d,%d]", start - match, length);
+               bb_error_msg("\\[%d,%d]", start - match, length);
                do {
                        putc(window[start++], stderr);
                } while (--length != 0);
@@ -1232,7 +1232,7 @@ int gzip_main(int argc, char **argv)
                        return gunzip_main(argc, argv);
 #endif
                default:
-                       show_usage();
+                       bb_show_usage();
                }
        }
 
@@ -1282,7 +1282,7 @@ int gzip_main(int argc, char **argv)
                        } else {
                                inFileNum = open(argv[i], O_RDONLY);
                                if (inFileNum < 0 || fstat(inFileNum, &statBuf) < 0)
-                                       perror_msg_and_die("%s", argv[i]);
+                                       bb_perror_msg_and_die("%s", argv[i]);
                                time_stamp = statBuf.st_ctime;
                                ifile_size = statBuf.st_size;
 
@@ -1299,7 +1299,7 @@ int gzip_main(int argc, char **argv)
                                        outFileNum = open(path, O_RDWR | O_CREAT | O_EXCL);
 #endif
                                        if (outFileNum < 0) {
-                                               perror_msg("%s", path);
+                                               bb_perror_msg("%s", path);
                                                free(path);
                                                continue;
                                        }
@@ -1311,7 +1311,7 @@ int gzip_main(int argc, char **argv)
                        }
 
                        if (path == NULL && isatty(outFileNum) && force == 0) {
-                               error_msg
+                               bb_error_msg
                                        ("compressed data not written to a terminal. Use -f to force compression.");
                                free(path);
                                continue;
@@ -1330,7 +1330,7 @@ int gzip_main(int argc, char **argv)
                                        delFileName = path;
 
                                if (unlink(delFileName) < 0)
-                                       perror_msg("%s", delFileName);
+                                       bb_perror_msg("%s", delFileName);
                        }
 
                        free(path);
@@ -1655,7 +1655,7 @@ static void set_file_type(void);
 
 #else                                                  /* DEBUG */
 #  define send_code(c, tree) \
-     { if (verbose>1) error_msg("\ncd %3d ",(c)); \
+     { if (verbose>1) bb_error_msg("\ncd %3d ",(c)); \
        send_bits(tree[c].Code, tree[c].Len); }
 #endif
 
@@ -2035,7 +2035,7 @@ static void build_tree(tree_desc * desc)
                tree[n].Dad = tree[m].Dad = (ush) node;
 #ifdef DUMP_BL_TREE
                if (tree == bl_tree) {
-                       error_msg("\nnode %d(%d), sons %d(%d) %d(%d)",
+                       bb_error_msg("\nnode %d(%d), sons %d(%d) %d(%d)",
                                        node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
                }
 #endif
@@ -2273,7 +2273,7 @@ static ulg flush_block(char *buf, ulg stored_len, int eof)
        if (stored_len <= opt_lenb && eof && compressed_len == 0L && seekable()) {
                /* Since LIT_BUFSIZE <= 2*WSIZE, the input data must be there: */
                if (buf == (char *) 0)
-                       error_msg("block vanished");
+                       bb_error_msg("block vanished");
 
                copy_block(buf, (unsigned) stored_len, 0);      /* without header */
                compressed_len = stored_len << 3;
@@ -2442,7 +2442,7 @@ static void set_file_type()
                bin_freq += dyn_ltree[n++].Freq;
        *file_type = bin_freq > (ascii_freq >> 2) ? BINARY : ASCII;
        if (*file_type == BINARY && translate_eol) {
-               error_msg("-l used on binary file");
+               bb_error_msg("-l used on binary file");
        }
 }
 
index faa8059..675bc6f 100644 (file)
@@ -35,7 +35,7 @@ extern void archive_copy_file(const archive_handle_t *archive_handle, const int
                size = archive_xread(archive_handle, buffer, size);
 
                if (write(dst_fd, buffer, size) != size) {
-                       error_msg_and_die ("Short write");
+                       bb_error_msg_and_die ("Short write");
                }
                chunksize -= size;
        }
index 7fde4c0..0b29dbf 100644 (file)
@@ -26,7 +26,7 @@ extern ssize_t archive_xread(const archive_handle_t *archive_handle, unsigned ch
 
        size = archive_handle->read(archive_handle->src_fd, buf, count);
        if (size == -1) {
-               perror_msg_and_die("Read error");
+               bb_perror_msg_and_die("Read error");
        }
 
        return(size);
index ef8cc01..cfe046b 100644 (file)
@@ -26,7 +26,7 @@ extern void archive_xread_all(const archive_handle_t *archive_handle, void *buf,
 
        size = archive_xread(archive_handle, buf, count);
        if (size != count) {
-               error_msg_and_die("Short read");
+               bb_error_msg_and_die("Short read");
        }
        return;
 }
index 3cfbbd8..23719cd 100644 (file)
@@ -26,7 +26,7 @@ extern ssize_t archive_xread_all_eof(archive_handle_t *archive_handle, unsigned
 
        size = archive_xread(archive_handle, buf, count);
        if ((size != 0) && (size != count)) {
-               perror_msg_and_die("Short read, read %d of %d", size, count);
+               bb_perror_msg_and_die("Short read, read %d of %d", size, count);
        }
        return(size);
 }
index d661df7..13832c2 100644 (file)
@@ -15,11 +15,11 @@ extern void check_header_gzip(int src_fd)
                } formated;
        } header;
 
-       xread_all(src_fd, header.raw, 8);
+       bb_xread_all(src_fd, header.raw, 8);
 
        /* Check the compression method */
        if (header.formated.method != 8) {
-               error_msg_and_die("Unknown compression method %d",
+               bb_error_msg_and_die("Unknown compression method %d",
                                                  header.formated.method);
        }
 
@@ -27,10 +27,10 @@ extern void check_header_gzip(int src_fd)
                /* bit 2 set: extra field present */
                unsigned char extra_short;
 
-               extra_short = xread_char(src_fd) + (xread_char(src_fd) << 8);
+               extra_short = bb_xread_char(src_fd) + (bb_xread_char(src_fd) << 8);
                while (extra_short > 0) {
                        /* Ignore extra field */
-                       xread_char(src_fd);
+                       bb_xread_char(src_fd);
                        extra_short--;
                }
        }
@@ -38,19 +38,19 @@ extern 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(xread_char(src_fd) != 0);
+               while(bb_xread_char(src_fd) != 0);
        }
 
        /* Discard file comment if any */
        if (header.formated.flags & 0x10) {
                /* bit 4 set: file comment present */
-               while(xread_char(src_fd) != 0);
+               while(bb_xread_char(src_fd) != 0);
        }
 
        /* Read the header checksum */
        if (header.formated.flags & 0x02) {
-               xread_char(src_fd);
-               xread_char(src_fd);
+               bb_xread_char(src_fd);
+               bb_xread_char(src_fd);
        }
 
        return;
index 1eb8bb3..77b4de5 100644 (file)
@@ -34,8 +34,8 @@ extern void data_extract_all(archive_handle_t *archive_handle)
        int res;
 
        if (archive_handle->flags & ARCHIVE_CREATE_LEADING_DIRS) {
-               char *name = xstrdup(file_header->name);
-               make_directory (dirname(name), 0777, FILEUTILS_RECUR);
+               char *name = bb_xstrdup(file_header->name);
+               bb_make_directory (dirname(name), 0777, FILEUTILS_RECUR);
                free(name);
        }                  
 
@@ -47,13 +47,13 @@ extern void data_extract_all(archive_handle_t *archive_handle)
                                /* hard link */
                                res = link(file_header->link_name, file_header->name);
                                if ((res == -1) && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) {
-                                       perror_msg("Couldnt create hard link");
+                                       bb_perror_msg("Couldnt create hard link");
                                }
                        } else
 #endif
                        {
                                /* Regular file */
-                               dst_fd = xopen(file_header->name, O_WRONLY | O_CREAT);
+                               dst_fd = bb_xopen(file_header->name, O_WRONLY | O_CREAT);
                                archive_copy_file(archive_handle, dst_fd);
                                close(dst_fd);
                        }
@@ -63,7 +63,7 @@ extern void data_extract_all(archive_handle_t *archive_handle)
                        unlink(file_header->name);
                        res = mkdir(file_header->name, file_header->mode);
                        if ((res == -1) && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) {
-                               perror_msg("extract_archive: %s", file_header->name);
+                               bb_perror_msg("extract_archive: %s", file_header->name);
                        }
                        break;
                case S_IFLNK:
@@ -71,7 +71,7 @@ extern void data_extract_all(archive_handle_t *archive_handle)
                        unlink(file_header->name);
                        res = symlink(file_header->link_name, file_header->name);
                        if ((res == -1) && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) {
-                               perror_msg("Cannot create symlink from %s to '%s'", file_header->name, file_header->link_name);
+                               bb_perror_msg("Cannot create symlink from %s to '%s'", file_header->name, file_header->link_name);
                        }
                        break;
                case S_IFSOCK:
@@ -81,11 +81,11 @@ extern void data_extract_all(archive_handle_t *archive_handle)
                        unlink(file_header->name);
                        res = mknod(file_header->name, file_header->mode, file_header->device);
                        if ((res == -1) && !(archive_handle->flags & ARCHIVE_EXTRACT_QUIET)) {
-                               perror_msg("Cannot create node %s", file_header->name);
+                               bb_perror_msg("Cannot create node %s", file_header->name);
                        }
                        break;
                default:
-                       error_msg_and_die("Unrecognised file type");
+                       bb_error_msg_and_die("Unrecognised file type");
        }
 
        chmod(file_header->name, file_header->mode);
index 4b611b8..0164b77 100644 (file)
@@ -1548,7 +1548,7 @@ extern ssize_t read_bz2(int fd, void *buf, size_t count)
 
        while (1) {
                if (bzf->strm.avail_in == 0) {
-                       n = xread(bzf->fd, bzf->buf, BZ_MAX_UNUSED);
+                       n = bb_xread(bzf->fd, bzf->buf, BZ_MAX_UNUSED);
                        if (n == 0) {
                                break;
                        }
@@ -1560,7 +1560,7 @@ extern ssize_t read_bz2(int fd, void *buf, size_t count)
                ret = BZ2_bzDecompress(&(bzf->strm));
 
                if ((ret != BZ_OK) && (ret != BZ_STREAM_END)) {
-                       error_msg_and_die("Error decompressing");
+                       bb_error_msg_and_die("Error decompressing");
                }
 
                if (ret == BZ_STREAM_END) {
@@ -1628,12 +1628,12 @@ extern unsigned char uncompressStream(int src_fd, int dst_fd)
                while (bzerr == BZ_OK) {
                        nread = read_bz2(src_fd, obuf, 5000);
                        if (bzerr == BZ_DATA_ERROR_MAGIC) {
-                               error_msg_and_die("invalid magic");
+                               bb_error_msg_and_die("invalid magic");
                        }
                        if (((bzerr == BZ_OK) || (bzerr == BZ_STREAM_END)) && (nread > 0)) {
                                if (write(dst_fd, obuf, nread) != nread) {
                                        BZ2_bzReadClose();
-                                       perror_msg_and_die("Couldnt write to file");
+                                       bb_perror_msg_and_die("Couldnt write to file");
                                }
                        }
                }
index 192e981..9851ca3 100644 (file)
@@ -121,14 +121,14 @@ extern int uncompress(int fd_in, int fd_out)
 
        insize = 0;
 
-       inbuf[0] = xread_char(fd_in);
+       inbuf[0] = bb_xread_char(fd_in);
 
        maxbits = inbuf[0] & BIT_MASK;
        block_mode = inbuf[0] & BLOCK_MODE;
        maxmaxcode = MAXCODE(maxbits);
 
        if (maxbits > BITS) {
-               error_msg("compressed with %d bits, can only handle %d bits", maxbits,
+               bb_error_msg("compressed with %d bits, can only handle %d bits", maxbits,
                                  BITS);
                return -1;
        }
@@ -227,11 +227,11 @@ extern int uncompress(int fd_in, int fd_out)
                                        posbits -= n_bits;
                                        p = &inbuf[posbits >> 3];
 
-                                       error_msg
+                                       bb_error_msg
                                                ("insize:%d posbits:%d inbuf:%02X %02X %02X %02X %02X (%d)",
                                                 insize, posbits, p[-1], p[0], p[1], p[2], p[3],
                                                 (posbits & 07));
-                                       error_msg("uncompress: corrupt input");
+                                       bb_error_msg("uncompress: corrupt input");
                                        return -1;
                                }
 
index 3a7334c..2401cf8 100644 (file)
@@ -150,7 +150,7 @@ static void fill_bytebuffer(void)
                /* 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() */
-               bytebuffer_size = 4 + xread(gunzip_src_fd, &bytebuffer[4], BYTEBUFFER_MAX - 8);
+               bytebuffer_size = 4 + bb_xread(gunzip_src_fd, &bytebuffer[4], BYTEBUFFER_MAX - 8);
                bytebuffer_offset = 4;
        }
 }
@@ -448,7 +448,7 @@ static int inflate_codes(huft_t * my_tl, huft_t * my_td, const unsigned int my_b
                if ((e = (t = tl + ((unsigned) b & ml))->e) > 16)
                        do {
                                if (e == 99) {
-                                       error_msg_and_die("inflate_codes error 1");;
+                                       bb_error_msg_and_die("inflate_codes error 1");;
                                }
                                b >>= t->b;
                                k -= t->b;
@@ -484,7 +484,7 @@ static int inflate_codes(huft_t * my_tl, huft_t * my_td, const unsigned int my_b
                        if ((e = (t = td + ((unsigned) b & md))->e) > 16)
                                do {
                                        if (e == 99)
-                                               error_msg_and_die("inflate_codes error 2");;
+                                               bb_error_msg_and_die("inflate_codes error 2");;
                                        b >>= t->b;
                                        k -= t->b;
                                        e -= 16;
@@ -821,7 +821,7 @@ static int inflate_block(int *e)
 
                if ((i = huft_build(ll, nl, 257, cplens, cplext, &tl, &bl)) != 0) {
                        if (i == 1) {
-                               error_msg_and_die("Incomplete literal tree");
+                               bb_error_msg_and_die("Incomplete literal tree");
                                huft_free(tl);
                        }
                        return i;       /* incomplete code set */
@@ -830,7 +830,7 @@ static int inflate_block(int *e)
                bd = dbits;
                if ((i = huft_build(ll + nl, nd, 0, cpdist, cpdext, &td, &bd)) != 0) {
                        if (i == 1) {
-                               error_msg_and_die("incomplete distance tree");
+                               bb_error_msg_and_die("incomplete distance tree");
                                huft_free(td);
                        }
                        huft_free(tl);
@@ -846,7 +846,7 @@ static int inflate_block(int *e)
        }
        default:
                /* bad block type */
-               error_msg_and_die("bad block type %d\n", t);
+               bb_error_msg_and_die("bad block type %d\n", t);
        }
 }
 
@@ -884,7 +884,7 @@ static int inflate_get_next_window(void)
                                        break;
                        case -2:        ret = inflate_codes(0,0,0,0,0);
                                        break;
-                       default:        error_msg_and_die("inflate error %d", method);
+                       default:        bb_error_msg_and_die("inflate error %d", method);
                }
 
                if (ret == 1) {
@@ -975,16 +975,16 @@ extern void GZ_gzReadClose(void)
        ssize_t nread, nwrote;
 
        GZ_gzReadOpen(in, 0, 0);
-       while(1) { // Robbed from copyfd.c
+       while(1) { // Robbed from bb_copyfd.c
                nread = read_gz(in, buf, sizeof(buf));
                if (nread == 0) break; // no data to write
                else if (nread == -1) {
-                       perror_msg("read");
+                       bb_perror_msg("read");
                        return -1;
                }
-               nwrote = full_write(out, buf, nread);
+               nwrote = bb_full_write(out, buf, nread);
                if (nwrote == -1) {
-                       perror_msg("write");
+                       bb_perror_msg("write");
                        return -1;
                }
        }
@@ -998,9 +998,9 @@ extern int inflate(int in, int out)
        GZ_gzReadOpen(in, 0, 0);
        while(1) {
                int ret = inflate_get_next_window();
-               nwrote = full_write(out, gunzip_window, gunzip_outbuf_count);
+               nwrote = bb_full_write(out, gunzip_window, gunzip_outbuf_count);
                if (nwrote == -1) {
-                       perror_msg("write");
+                       bb_perror_msg("write");
                        return -1;
                }
                if (ret == 0) break;
@@ -1017,7 +1017,7 @@ extern void check_trailer_gzip(int src_fd)
        /* top up the input buffer with the rest of the trailer */
        count = bytebuffer_size - bytebuffer_offset;
        if (count < 8) {
-               xread_all(src_fd, &bytebuffer[bytebuffer_size], 8 - count);
+               bb_xread_all(src_fd, &bytebuffer[bytebuffer_size], 8 - count);
                bytebuffer_size += 8 - count;
        }
        for (count = 0; count != 4; count++) {
@@ -1027,14 +1027,14 @@ extern void check_trailer_gzip(int src_fd)
 
        /* Validate decompression - crc */
        if (stored_crc != (gunzip_crc ^ 0xffffffffL)) {
-               error_msg_and_die("crc error");
+               bb_error_msg_and_die("crc error");
        }
 
        /* Validate decompression - size */
        if (gunzip_bytes_out !=
                (bytebuffer[bytebuffer_offset] | (bytebuffer[bytebuffer_offset+1] << 8) |
                (bytebuffer[bytebuffer_offset+2] << 16) | (bytebuffer[bytebuffer_offset+3] << 24))) {
-               error_msg_and_die("Incorrect length, but crc is correct");
+               bb_error_msg_and_die("Incorrect length, but crc is correct");
        }
 
 }
index 1e0e6c1..6c576a8 100644 (file)
@@ -41,7 +41,7 @@ extern char get_header_ar(archive_handle_t *archive_handle)
        static unsigned int ar_long_name_size;
 #endif
 
-       /* dont use xread as we want to handle the error ourself */
+       /* dont use bb_xread as we want to handle the error ourself */
        if (read(archive_handle->src_fd, ar.raw, 60) != 60) {
                /* End Of File */
                return(EXIT_FAILURE);
@@ -51,14 +51,14 @@ extern 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] = xread_char(archive_handle->src_fd);
+               ar.raw[59] = bb_xread_char(archive_handle->src_fd);
                archive_handle->offset++;
        }
        archive_handle->offset += 60;
                
        /* align the headers based on the header magic */
        if ((ar.formated.magic[0] != '`') || (ar.formated.magic[1] != '\n')) {
-               error_msg_and_die("Invalid ar header");
+               bb_error_msg_and_die("Invalid ar header");
        }
 
        typed->mode = strtol(ar.formated.mode, NULL, 8);
@@ -76,7 +76,7 @@ extern 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);
-                       xread_all(archive_handle->src_fd, ar_long_names, ar_long_name_size);
+                       bb_xread_all(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 */
@@ -90,16 +90,16 @@ extern char get_header_ar(archive_handle_t *archive_handle)
                        (saved in variable long_name) that conatains the real filename */
                        const unsigned int long_offset = atoi(&ar.formated.name[1]);
                        if (long_offset >= ar_long_name_size) {
-                               error_msg_and_die("Cant resolve long filename");
+                               bb_error_msg_and_die("Cant resolve long filename");
                        }
-                       typed->name = xstrdup(ar_long_names + long_offset);
+                       typed->name = bb_xstrdup(ar_long_names + long_offset);
                }
 #else
-               error_msg_and_die("long filenames not supported");
+               bb_error_msg_and_die("long filenames not supported");
 #endif
        } else {
                /* short filenames */
-               typed->name = xstrndup(ar.formated.name, 16);
+               typed->name = bb_xstrndup(ar.formated.name, 16);
        }
 
        typed->name[strcspn(typed->name, " /")] = '\0';
index ea08578..975e2a4 100644 (file)
@@ -46,7 +46,7 @@ extern char get_header_cpio(archive_handle_t *archive_handle)
                oldtmp = NULL;
 
                while (tmp) {
-                       error_msg_and_die("need to fix this\n");
+                       bb_error_msg_and_die("need to fix this\n");
                        if (tmp->entry->link_name) { /* Found a hardlink ready to be extracted */
                                file_header = tmp->entry;
                                if (oldtmp) {
@@ -78,11 +78,11 @@ extern char get_header_cpio(archive_handle_t *archive_handle)
                        cpio_header[2],
                        cpio_header[3],
                        cpio_header[4]);
-               error_msg_and_die("Unsupported cpio format");
+               bb_error_msg_and_die("Unsupported cpio format");
        }
                
        if ((cpio_header[5] != '1') && (cpio_header[5] != '2')) {
-               error_msg_and_die("Unsupported cpio format, use newc or crc");
+               bb_error_msg_and_die("Unsupported cpio format, use newc or crc");
        }
 
        {
@@ -109,7 +109,7 @@ extern char get_header_cpio(archive_handle_t *archive_handle)
                        hardlinks_t *tmp = saved_hardlinks;
                        hardlinks_t *oldtmp = NULL;
                        while (tmp) {
-                               error_msg("%s not created: cannot resolve hardlink", tmp->entry->name);
+                               bb_error_msg("%s not created: cannot resolve hardlink", tmp->entry->name);
                                oldtmp = tmp;
                                tmp = tmp->next;
                                free (oldtmp->entry->name);
@@ -142,13 +142,13 @@ extern char get_header_cpio(archive_handle_t *archive_handle)
                        pending_hardlinks = 1;
                        while (tmp) {
                                if (tmp->inode == inode) {
-                                       tmp->entry->link_name = xstrdup(file_header->name);
+                                       tmp->entry->link_name = bb_xstrdup(file_header->name);
                                        nlink--;
                                }
                                tmp = tmp->next;
                        }
                        if (nlink > 1) {
-                               error_msg("error resolving hardlink: did you create the archive with GNU cpio 2.0-2.2?");
+                               bb_error_msg("error resolving hardlink: did you create the archive with GNU cpio 2.0-2.2?");
                        }
                }
        }
@@ -165,11 +165,11 @@ extern char get_header_cpio(archive_handle_t *archive_handle)
                        if ((archive_handle->flags & ARCHIVE_EXTRACT_UNCONDITIONAL) || (statbuf.st_mtime < file_header->mtime)) {
                                /* Remove file if flag set or its older than the file to be extracted */
                                if (unlink(file_header->name) == -1) {
-                                       perror_msg_and_die("Couldnt remove old file");
+                                       bb_perror_msg_and_die("Couldnt remove old file");
                                }
                        } else {
                                if (! archive_handle->flags & ARCHIVE_EXTRACT_QUIET) {
-                                       error_msg("%s not created: newer or same age file exists", file_header->name);
+                                       bb_error_msg("%s not created: newer or same age file exists", file_header->name);
                                }
                                extract_flag = FALSE;
                        }
index 2cb141e..365f464 100644 (file)
@@ -75,7 +75,7 @@ extern char get_header_tar(archive_handle_t *archive_handle)
 #ifdef CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY
                if (strncmp(tar.formated.magic, "\0\0\0\0\0", 5) != 0)
 #endif
-                       error_msg_and_die("Invalid tar magic");
+                       bb_error_msg_and_die("Invalid tar magic");
        }
        /* Do checksum on headers */
        for (i =  0; i < 148 ; i++) {
@@ -86,7 +86,7 @@ extern char get_header_tar(archive_handle_t *archive_handle)
                sum += tar.raw[i];
        }
        if (sum != strtol(tar.formated.chksum, NULL, 8)) {
-               error_msg("Invalid tar header checksum");
+               bb_error_msg("Invalid tar header checksum");
                return(EXIT_FAILURE);
        }
 
@@ -116,7 +116,7 @@ extern char get_header_tar(archive_handle_t *archive_handle)
        file_header->size = strtol(tar.formated.size, NULL, 8);
        file_header->mtime = strtol(tar.formated.mtime, NULL, 8);
        file_header->link_name = (tar.formated.linkname[0] != '\0') ? 
-           xstrdup(tar.formated.linkname) : NULL;
+           bb_xstrdup(tar.formated.linkname) : NULL;
        file_header->device = (dev_t) ((strtol(tar.formated.devmajor, NULL, 8) << 8) +
                                 strtol(tar.formated.devminor, NULL, 8));
 
@@ -129,7 +129,7 @@ extern char get_header_tar(archive_handle_t *archive_handle)
                file_header->mode |= S_IFREG;
                break;
        case '1':
-               error_msg("Internal hard link not supported");
+               bb_error_msg("Internal hard link not supported");
                break;
        case '2':
                file_header->mode |= S_IFLNK;
@@ -170,7 +170,7 @@ extern char get_header_tar(archive_handle_t *archive_handle)
        case 'N':
        case 'S':
        case 'V':
-               error_msg("Ignoring GNU extension type %c", tar.formated.typeflag);
+               bb_error_msg("Ignoring GNU extension type %c", tar.formated.typeflag);
 # endif
        }
 #endif
index a4355d2..7792432 100644 (file)
@@ -25,7 +25,7 @@ extern char get_header_tar_gz(archive_handle_t *archive_handle)
 
        archive_xread_all(archive_handle, &magic, 2);
        if ((magic[0] != 0x1f) || (magic[1] != 0x8b)) {
-               error_msg_and_die("Invalid gzip magic");
+               bb_error_msg_and_die("Invalid gzip magic");
        }
 
        check_header_gzip(archive_handle->src_fd);
index ff7b3bc..6739dd3 100644 (file)
@@ -9,7 +9,7 @@ extern void header_verbose_list(const file_header_t *file_header)
        struct tm *mtime = localtime(&file_header->mtime);
 
        printf("%s %d/%d%10u %4u-%02u-%02u %02u:%02u:%02u %s",
-               mode_string(file_header->mode),
+               bb_mode_string(file_header->mode),
                file_header->uid,
                file_header->gid,
                (unsigned int) file_header->size,
index 2823976..578870d 100644 (file)
@@ -30,6 +30,6 @@ extern void seek_by_jump(const archive_handle_t *archive_handle, const unsigned
                        seek_by_char(archive_handle, amount);
                } else
 #endif
-                       perror_msg_and_die("Seek failure");
+                       bb_perror_msg_and_die("Seek failure");
        }
 }
index 192e981..9851ca3 100644 (file)
@@ -121,14 +121,14 @@ extern int uncompress(int fd_in, int fd_out)
 
        insize = 0;
 
-       inbuf[0] = xread_char(fd_in);
+       inbuf[0] = bb_xread_char(fd_in);
 
        maxbits = inbuf[0] & BIT_MASK;
        block_mode = inbuf[0] & BLOCK_MODE;
        maxmaxcode = MAXCODE(maxbits);
 
        if (maxbits > BITS) {
-               error_msg("compressed with %d bits, can only handle %d bits", maxbits,
+               bb_error_msg("compressed with %d bits, can only handle %d bits", maxbits,
                                  BITS);
                return -1;
        }
@@ -227,11 +227,11 @@ extern int uncompress(int fd_in, int fd_out)
                                        posbits -= n_bits;
                                        p = &inbuf[posbits >> 3];
 
-                                       error_msg
+                                       bb_error_msg
                                                ("insize:%d posbits:%d inbuf:%02X %02X %02X %02X %02X (%d)",
                                                 insize, posbits, p[-1], p[0], p[1], p[2], p[3],
                                                 (posbits & 07));
-                                       error_msg("uncompress: corrupt input");
+                                       bb_error_msg("uncompress: corrupt input");
                                        return -1;
                                }
 
index afa3672..e8f113b 100644 (file)
@@ -26,7 +26,7 @@ extern void unpack_ar_archive(archive_handle_t *ar_archive)
 
        archive_xread_all(ar_archive, magic, 7);
        if (strncmp(magic, "!<arch>", 7) != 0) {
-               error_msg_and_die("Invalid ar magic");
+               bb_error_msg_and_die("Invalid ar magic");
        }
        ar_archive->offset += 7;
 
index 3a7334c..2401cf8 100644 (file)
@@ -150,7 +150,7 @@ static void fill_bytebuffer(void)
                /* 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() */
-               bytebuffer_size = 4 + xread(gunzip_src_fd, &bytebuffer[4], BYTEBUFFER_MAX - 8);
+               bytebuffer_size = 4 + bb_xread(gunzip_src_fd, &bytebuffer[4], BYTEBUFFER_MAX - 8);
                bytebuffer_offset = 4;
        }
 }
@@ -448,7 +448,7 @@ static int inflate_codes(huft_t * my_tl, huft_t * my_td, const unsigned int my_b
                if ((e = (t = tl + ((unsigned) b & ml))->e) > 16)
                        do {
                                if (e == 99) {
-                                       error_msg_and_die("inflate_codes error 1");;
+                                       bb_error_msg_and_die("inflate_codes error 1");;
                                }
                                b >>= t->b;
                                k -= t->b;
@@ -484,7 +484,7 @@ static int inflate_codes(huft_t * my_tl, huft_t * my_td, const unsigned int my_b
                        if ((e = (t = td + ((unsigned) b & md))->e) > 16)
                                do {
                                        if (e == 99)
-                                               error_msg_and_die("inflate_codes error 2");;
+                                               bb_error_msg_and_die("inflate_codes error 2");;
                                        b >>= t->b;
                                        k -= t->b;
                                        e -= 16;
@@ -821,7 +821,7 @@ static int inflate_block(int *e)
 
                if ((i = huft_build(ll, nl, 257, cplens, cplext, &tl, &bl)) != 0) {
                        if (i == 1) {
-                               error_msg_and_die("Incomplete literal tree");
+                               bb_error_msg_and_die("Incomplete literal tree");
                                huft_free(tl);
                        }
                        return i;       /* incomplete code set */
@@ -830,7 +830,7 @@ static int inflate_block(int *e)
                bd = dbits;
                if ((i = huft_build(ll + nl, nd, 0, cpdist, cpdext, &td, &bd)) != 0) {
                        if (i == 1) {
-                               error_msg_and_die("incomplete distance tree");
+                               bb_error_msg_and_die("incomplete distance tree");
                                huft_free(td);
                        }
                        huft_free(tl);
@@ -846,7 +846,7 @@ static int inflate_block(int *e)
        }
        default:
                /* bad block type */
-               error_msg_and_die("bad block type %d\n", t);
+               bb_error_msg_and_die("bad block type %d\n", t);
        }
 }
 
@@ -884,7 +884,7 @@ static int inflate_get_next_window(void)
                                        break;
                        case -2:        ret = inflate_codes(0,0,0,0,0);
                                        break;
-                       default:        error_msg_and_die("inflate error %d", method);
+                       default:        bb_error_msg_and_die("inflate error %d", method);
                }
 
                if (ret == 1) {
@@ -975,16 +975,16 @@ extern void GZ_gzReadClose(void)
        ssize_t nread, nwrote;
 
        GZ_gzReadOpen(in, 0, 0);
-       while(1) { // Robbed from copyfd.c
+       while(1) { // Robbed from bb_copyfd.c
                nread = read_gz(in, buf, sizeof(buf));
                if (nread == 0) break; // no data to write
                else if (nread == -1) {
-                       perror_msg("read");
+                       bb_perror_msg("read");
                        return -1;
                }
-               nwrote = full_write(out, buf, nread);
+               nwrote = bb_full_write(out, buf, nread);
                if (nwrote == -1) {
-                       perror_msg("write");
+                       bb_perror_msg("write");
                        return -1;
                }
        }
@@ -998,9 +998,9 @@ extern int inflate(int in, int out)
        GZ_gzReadOpen(in, 0, 0);
        while(1) {
                int ret = inflate_get_next_window();
-               nwrote = full_write(out, gunzip_window, gunzip_outbuf_count);
+               nwrote = bb_full_write(out, gunzip_window, gunzip_outbuf_count);
                if (nwrote == -1) {
-                       perror_msg("write");
+                       bb_perror_msg("write");
                        return -1;
                }
                if (ret == 0) break;
@@ -1017,7 +1017,7 @@ extern void check_trailer_gzip(int src_fd)
        /* top up the input buffer with the rest of the trailer */
        count = bytebuffer_size - bytebuffer_offset;
        if (count < 8) {
-               xread_all(src_fd, &bytebuffer[bytebuffer_size], 8 - count);
+               bb_xread_all(src_fd, &bytebuffer[bytebuffer_size], 8 - count);
                bytebuffer_size += 8 - count;
        }
        for (count = 0; count != 4; count++) {
@@ -1027,14 +1027,14 @@ extern void check_trailer_gzip(int src_fd)
 
        /* Validate decompression - crc */
        if (stored_crc != (gunzip_crc ^ 0xffffffffL)) {
-               error_msg_and_die("crc error");
+               bb_error_msg_and_die("crc error");
        }
 
        /* Validate decompression - size */
        if (gunzip_bytes_out !=
                (bytebuffer[bytebuffer_offset] | (bytebuffer[bytebuffer_offset+1] << 8) |
                (bytebuffer[bytebuffer_offset+2] << 16) | (bytebuffer[bytebuffer_offset+3] << 24))) {
-               error_msg_and_die("Incorrect length, but crc is correct");
+               bb_error_msg_and_die("Incorrect length, but crc is correct");
        }
 
 }
index 61486cb..5bde532 100644 (file)
@@ -116,7 +116,7 @@ int rpm_main(int argc, char **argv)
                        break;
                case 'q': // First arg: Query mode
                        if (!func) func |= rpm_query;
-                       else show_usage();
+                       else bb_show_usage();
                        break;
                case 'p': // Query a package
                        func |= rpm_query_package;
@@ -133,13 +133,13 @@ int rpm_main(int argc, char **argv)
                        func |= rpm_query_list_config;
                        break;
                default:
-                       show_usage();
+                       bb_show_usage();
                }
        }
 
-       if (optind == argc) show_usage();
+       if (optind == argc) bb_show_usage();
        while (optind < argc) {
-               rpm_fd = xopen(argv[optind], O_RDONLY);
+               rpm_fd = bb_xopen(argv[optind], O_RDONLY);
                mytags = rpm_gettags(rpm_fd, (int *) &tagcount);
                offset = lseek(rpm_fd, 0, SEEK_CUR);
                if (!mytags) { printf("Error reading rpm header\n"); exit(-1); }
@@ -206,9 +206,9 @@ void extract_cpio_gz(int fd) {
        archive_handle->src_fd = fd;
        archive_handle->offset = 0;
        
-       xread_all(archive_handle->src_fd, &magic, 2);
+       bb_xread_all(archive_handle->src_fd, &magic, 2);
        if ((magic[0] != 0x1f) || (magic[1] != 0x8b)) {
-               error_msg_and_die("Invalid gzip magic");
+               bb_error_msg_and_die("Invalid gzip magic");
        }
        check_header_gzip(archive_handle->src_fd);      
        chdir("/"); // Install RPM's to root
@@ -314,7 +314,7 @@ void fileaction_dobackup(char *filename, int fileref)
        if (rpm_getint(RPMTAG_FILEFLAGS, fileref) & RPMFILE_CONFIG) { /* Only need to backup config files */
                stat_res = lstat (filename, &oldfile);
                if (stat_res == 0 && S_ISREG(oldfile.st_mode)) { /* File already exists  - really should check MD5's etc to see if different */
-                       newname = xstrdup(filename);
+                       newname = bb_xstrdup(filename);
                        newname = strcat(newname, ".rpmorig");
                        copy_file(filename, newname, FILEUTILS_RECUR | FILEUTILS_PRESERVE_STATUS);
                        remove_file(filename, FILEUTILS_RECUR | FILEUTILS_FORCE);
index 66f6808..bb9f695 100644 (file)
@@ -52,12 +52,12 @@ void skip_header(int rpm_fd)
 {
        struct rpm_header header;
 
-       xread_all(rpm_fd, &header, sizeof(struct rpm_header));
+       bb_xread_all(rpm_fd, &header, sizeof(struct rpm_header));
        if (strncmp((char *) &header.magic, RPM_HEADER_MAGIC, 3) != 0) {
-               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) {
-               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);
@@ -75,12 +75,12 @@ extern int rpm2cpio_main(int argc, char **argv)
        if (argc == 1) {
                rpm_fd = fileno(stdin);
        } else {
-               rpm_fd = xopen(argv[1], O_RDONLY);
+               rpm_fd = bb_xopen(argv[1], O_RDONLY);
        }
 
-       xread_all(rpm_fd, &lead, sizeof(struct rpm_lead));
+       bb_xread_all(rpm_fd, &lead, sizeof(struct rpm_lead));
        if (strncmp((char *) &lead.magic, RPM_MAGIC, 4) != 0) {
-               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 */
@@ -90,14 +90,14 @@ extern int rpm2cpio_main(int argc, char **argv)
        /* Skip the main header */
        skip_header(rpm_fd);
        
-       xread_all(rpm_fd, &magic, 2);
+       bb_xread_all(rpm_fd, &magic, 2);
        if ((magic[0] != 0x1f) || (magic[1] != 0x8b)) {
-               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) {
-               error_msg("Error inflating");
+               bb_error_msg("Error inflating");
        }
        check_trailer_gzip(rpm_fd);
 
index fa1c575..c39d578 100644 (file)
@@ -278,7 +278,7 @@ static inline int writeTarHeader(struct TarBallInfo *tbInfo,
                header.typeflag = REGTYPE;
                putOctal(header.size, sizeof(header.size), statbuf->st_size);
        } else {
-               error_msg("%s: Unknown file type", real_name);
+               bb_error_msg("%s: Unknown file type", real_name);
                return (FALSE);
        }
 
@@ -295,9 +295,9 @@ static inline int writeTarHeader(struct TarBallInfo *tbInfo,
 
        /* Now write the header out to disk */
        if ((size =
-                full_write(tbInfo->tarFd, (char *) &header,
+                bb_full_write(tbInfo->tarFd, (char *) &header,
                                        sizeof(struct TarHeader))) < 0) {
-               error_msg(io_error, real_name);
+               bb_error_msg(bb_msg_io_error, real_name);
                return (FALSE);
        }
        /* Pad the header up to the tar block size */
@@ -368,7 +368,7 @@ static int writeFileToTarball(const char *fileName, struct stat *statbuf,
 
        /* It is against the rules to archive a socket */
        if (S_ISSOCK(statbuf->st_mode)) {
-               error_msg("%s: socket ignored", fileName);
+               bb_error_msg("%s: socket ignored", fileName);
                return (TRUE);
        }
 
@@ -377,7 +377,7 @@ static int writeFileToTarball(const char *fileName, struct stat *statbuf,
         * the new tarball */
        if (tbInfo->statBuf.st_dev == statbuf->st_dev &&
                tbInfo->statBuf.st_ino == statbuf->st_ino) {
-               error_msg("%s: file is the archive; skipping", fileName);
+               bb_error_msg("%s: file is the archive; skipping", fileName);
                return (TRUE);
        }
 
@@ -386,14 +386,14 @@ static int writeFileToTarball(const char *fileName, struct stat *statbuf,
                static int alreadyWarned = FALSE;
 
                if (alreadyWarned == FALSE) {
-                       error_msg("Removing leading '/' from member names");
+                       bb_error_msg("Removing leading '/' from member names");
                        alreadyWarned = TRUE;
                }
                header_name++;
        }
 
        if (strlen(fileName) >= NAME_SIZE) {
-               error_msg(name_longer_than_foo, NAME_SIZE);
+               bb_error_msg(bb_msg_name_longer_than_foo, NAME_SIZE);
                return (TRUE);
        }
 
@@ -419,21 +419,21 @@ static int writeFileToTarball(const char *fileName, struct stat *statbuf,
 
                /* open the file we want to archive, and make sure all is well */
                if ((inputFileFd = open(fileName, O_RDONLY)) < 0) {
-                       perror_msg("%s: Cannot open", fileName);
+                       bb_perror_msg("%s: Cannot open", fileName);
                        return (FALSE);
                }
 
                /* write the file to the archive */
-               while ((size = full_read(inputFileFd, buffer, sizeof(buffer))) > 0) {
-                       if (full_write(tbInfo->tarFd, buffer, size) != size) {
+               while ((size = bb_full_read(inputFileFd, buffer, sizeof(buffer))) > 0) {
+                       if (bb_full_write(tbInfo->tarFd, buffer, size) != size) {
                                /* Output file seems to have a problem */
-                               error_msg(io_error, fileName);
+                               bb_error_msg(bb_msg_io_error, fileName);
                                return (FALSE);
                        }
                        readSize += size;
                }
                if (size == -1) {
-                       error_msg(io_error, fileName);
+                       bb_error_msg(bb_msg_io_error, fileName);
                        return (FALSE);
                }
                /* Pad the file up to the tar block size */
@@ -464,7 +464,7 @@ static inline int writeTarFile(const char *tarName, const int verboseFlag,
 
        /* Make sure there is at least one file to tar up.  */
        if (include == NULL) {
-               error_msg_and_die("Cowardly refusing to create an empty archive");
+               bb_error_msg_and_die("Cowardly refusing to create an empty archive");
        }
 
        /* Open the tar file for writing.  */
@@ -477,7 +477,7 @@ static inline int writeTarFile(const char *tarName, const int verboseFlag,
        }
 
        if (tbInfo.tarFd < 0) {
-               perror_msg("%s: Cannot open", tarName);
+               bb_perror_msg("%s: Cannot open", tarName);
                freeHardLinkInfo(&tbInfo.hlInfoHead);
                return (FALSE);
        }
@@ -485,12 +485,12 @@ static inline int writeTarFile(const char *tarName, const int verboseFlag,
        /* Store the stat info for the tarball's file, so
         * can avoid including the tarball into itself....  */
        if (fstat(tbInfo.tarFd, &tbInfo.statBuf) < 0)
-               error_msg_and_die(io_error, tarName);
+               bb_error_msg_and_die(bb_msg_io_error, tarName);
 
 #ifdef CONFIG_FEATURE_TAR_GZIP
        if (gzip) {
                if (pipe(gzipDataPipe) < 0 || pipe(gzipStatusPipe) < 0) {
-                       perror_msg_and_die("Failed to create gzip pipe");
+                       bb_perror_msg_and_die("Failed to create gzip pipe");
                }
 
                signal(SIGPIPE, SIG_IGN);       /* we only want EPIPE on errors */
@@ -529,7 +529,7 @@ static inline int writeTarFile(const char *tarName, const int verboseFlag,
 
                                if (n == 0 && vfork_exec_errno != 0) {
                                        errno = vfork_exec_errno;
-                                       perror_msg_and_die("Could not exec gzip process");
+                                       bb_perror_msg_and_die("Could not exec gzip process");
                                } else if ((n < 0) && (errno == EAGAIN || errno == EINTR))
                                        continue;       /* try it again */
                                break;
@@ -538,7 +538,7 @@ static inline int writeTarFile(const char *tarName, const int verboseFlag,
 
                        tbInfo.tarFd = gzipDataPipe[1];
                } else {
-                       perror_msg_and_die("Failed to vfork gzip process");
+                       bb_perror_msg_and_die("Failed to vfork gzip process");
                }
        }
 #endif
@@ -567,7 +567,7 @@ static inline int writeTarFile(const char *tarName, const int verboseFlag,
        /* Hang up the tools, close up shop, head home */
        close(tbInfo.tarFd);
        if (errorFlag)
-               error_msg("Error exit delayed from previous errors");
+               bb_error_msg("Error exit delayed from previous errors");
 
        freeHardLinkInfo(&tbInfo.hlInfoHead);
 
@@ -585,10 +585,9 @@ static inline int writeTarFile(const char *tarName, const int verboseFlag,
 #ifdef CONFIG_FEATURE_TAR_EXCLUDE
 static llist_t *append_file_list_to_list(const char *filename, llist_t *list)
 {
-       FILE *src_stream = xfopen(filename, "r");
+       FILE *src_stream = bb_xfopen(filename, "r");
        char *line;
-       while((line = get_line_from_file(src_stream)) != NULL) {
-               chomp(line);
+       while((line = bb_get_chomped_line_from_file(src_stream)) != NULL) {
                list = llist_add_to(list, line);
        }
        fclose(src_stream);
@@ -611,7 +610,7 @@ int tar_main(int argc, char **argv)
        unsigned char ctx_flag = 0;
 
        if (argc < 2) {
-               show_usage();
+               bb_show_usage();
        }
 
        /* Prepend '-' to the first argument if required */
@@ -690,13 +689,13 @@ int tar_main(int argc, char **argv)
                        break;
 #endif
                default:
-                       show_usage();
+                       bb_show_usage();
                }
        }
 
        /* Check one and only one context option was given */
        if ((ctx_flag != CTX_CREATE) && (ctx_flag != CTX_TEST) && (ctx_flag != CTX_EXTRACT)) {
-               show_usage();
+               bb_show_usage();
        }
 
        /* Check if we are reading from stdin */
@@ -740,11 +739,11 @@ int tar_main(int argc, char **argv)
                        tar_handle->src_fd = fileno(stdin);
                        tar_handle->seek = seek_by_char;
                } else {
-                       tar_handle->src_fd = xopen(tar_filename, O_RDONLY);
+                       tar_handle->src_fd = bb_xopen(tar_filename, O_RDONLY);
                }
 
                if ((base_dir) && (chdir(base_dir))) {
-                       perror_msg_and_die("Couldnt chdir");
+                       bb_perror_msg_and_die("Couldnt chdir");
                }
 
                while (get_header_ptr(tar_handle) == EXIT_SUCCESS);
@@ -753,7 +752,7 @@ int tar_main(int argc, char **argv)
                while (tar_handle->accept) {
                        if (find_list_entry(tar_handle->reject, tar_handle->accept->data) == NULL) {
                                if (find_list_entry(tar_handle->passed, tar_handle->accept->data) == NULL) {
-                                       error_msg_and_die("%s: Not found in archive\n", tar_handle->accept->data);
+                                       bb_error_msg_and_die("%s: Not found in archive\n", tar_handle->accept->data);
                                }
                        }
                        tar_handle->accept = tar_handle->accept->link;
index 877bcc7..2d2145d 100644 (file)
@@ -45,7 +45,7 @@ int uncompress_main(int argc, char **argv)
                        flags |= gunzip_force;
                        break;
                default:
-                       show_usage();   /* exit's inside usage */
+                       bb_show_usage();        /* exit's inside usage */
                }
        }
 
@@ -63,17 +63,17 @@ int uncompress_main(int argc, char **argv)
                        src_fd = fileno(stdin);
                        flags |= gunzip_to_stdout;
                } else {
-                       src_fd = xopen(old_path, O_RDONLY);
+                       src_fd = bb_xopen(old_path, O_RDONLY);
 
                        /* Get the time stamp on the input file. */
                        if (stat(old_path, &stat_buf) < 0) {
-                               error_msg_and_die("Couldn't stat file %s", old_path);
+                               bb_error_msg_and_die("Couldn't stat file %s", old_path);
                        }
                }
 
                /* Check that the input is sane.  */
                if (isatty(src_fd) && ((flags & gunzip_force) == 0)) {
-                       error_msg_and_die
+                       bb_error_msg_and_die
                                ("compressed data not read from terminal.  Use -f to force it.");
                }
 
@@ -83,16 +83,16 @@ int uncompress_main(int argc, char **argv)
                } else {
                        char *extension;
 
-                       new_path = xstrdup(old_path);
+                       new_path = bb_xstrdup(old_path);
 
                        extension = strrchr(new_path, '.');
                        if (!extension || (strcmp(extension, ".Z") != 0)) {
-                               error_msg_and_die("Invalid extension");
+                               bb_error_msg_and_die("Invalid extension");
                        }
                        *extension = '\0';
 
                        /* Open output file */
-                       dst_fd = xopen(new_path, O_WRONLY | O_CREAT);
+                       dst_fd = bb_xopen(new_path, O_WRONLY | O_CREAT);
 
                        /* Set permissions on the file */
                        chmod(new_path, stat_buf.st_mode);
@@ -102,10 +102,10 @@ int uncompress_main(int argc, char **argv)
                }
 
                /* do the decompression, and cleanup */
-               if ((xread_char(src_fd) == 0x1f) && (xread_char(src_fd) == 0x9d)) {
+               if ((bb_xread_char(src_fd) == 0x1f) && (bb_xread_char(src_fd) == 0x9d)) {
                        status = uncompress(src_fd, dst_fd);
                } else {
-                       error_msg_and_die("Invalid magic");
+                       bb_error_msg_and_die("Invalid magic");
                }
 
                if ((status != EXIT_SUCCESS) && (new_path)) {
@@ -122,7 +122,7 @@ int uncompress_main(int argc, char **argv)
 
                /* delete_path will be NULL if in test mode or from stdin */
                if (delete_path && (unlink(delete_path) == -1)) {
-                       error_msg_and_die("Couldn't remove %s", delete_path);
+                       bb_error_msg_and_die("Couldn't remove %s", delete_path);
                }
 
                free(new_path);
index 86416d3..f2d7f49 100644 (file)
@@ -120,12 +120,12 @@ extern int unzip_main(int argc, char **argv)
                                break;
 #endif
                        default:
-                               show_usage();
+                               bb_show_usage();
                }
        }
 
        if (argc == optind) {
-               show_usage();
+               bb_show_usage();
        }
 
        printf("Archive:  %s\n", argv[optind]);
@@ -138,11 +138,11 @@ extern int unzip_main(int argc, char **argv)
                archive_handle->src_fd = fileno(stdin);
                archive_handle->seek = seek_by_char;
        } else {
-               archive_handle->src_fd = xopen(argv[optind++], O_RDONLY);
+               archive_handle->src_fd = bb_xopen(argv[optind++], O_RDONLY);
        }
 
        if ((base_dir) && (chdir(base_dir))) {
-               perror_msg_and_die("Couldnt chdir");
+               bb_perror_msg_and_die("Couldnt chdir");
        }
 
        while (optind < argc) {
@@ -163,7 +163,7 @@ extern int unzip_main(int argc, char **argv)
                        break;
                }
                else if (magic != ZIP_FILEHEADER_MAGIC) {
-                       error_msg_and_die("Invlaide zip magic");
+                       bb_error_msg_and_die("Invlaide zip magic");
                }
 
                /* Read the file header */
@@ -172,7 +172,7 @@ extern int unzip_main(int argc, char **argv)
                archive_handle->file_header->mode = S_IFREG | 0777;
 
                if (zip_header.formated.method != 8) {
-                       error_msg_and_die("Unsupported compression method %d\n", zip_header.formated.method);
+                       bb_error_msg_and_die("Unsupported compression method %d\n", zip_header.formated.method);
                }
 
                /* Read filename */
@@ -198,19 +198,19 @@ extern int unzip_main(int argc, char **argv)
                if (archive_handle->action_data) {
                        archive_handle->action_data(archive_handle);
                } else {
-                       dst_fd = xopen(archive_handle->file_header->name, O_WRONLY | O_CREAT);
+                       dst_fd = bb_xopen(archive_handle->file_header->name, O_WRONLY | O_CREAT);
                        inflate(archive_handle->src_fd, dst_fd);
                        close(dst_fd);
                        chmod(archive_handle->file_header->name, archive_handle->file_header->mode);
 
                        /* Validate decompression - crc */
                        if (zip_header.formated.crc32 != (gunzip_crc ^ 0xffffffffL)) {
-                               error_msg("Invalid compressed data--crc error");
+                               bb_error_msg("Invalid compressed data--crc error");
                        }
 
                        /* Validate decompression - size */
                        if (gunzip_bytes_out != zip_header.formated.ucmpsize) {
-                               error_msg("Invalid compressed data--length error");
+                               bb_error_msg("Invalid compressed data--length error");
                        }
                }
 
index 8136f1c..11e1078 100644 (file)
@@ -23,13 +23,13 @@ int chvt_main(int argc, char **argv)
        int fd, num;
 
        if ((argc != 2) || (**(argv + 1) == '-'))
-               show_usage();
+               bb_show_usage();
        fd = get_console_fd();
        num = atoi(argv[1]);
        if (ioctl(fd, VT_ACTIVATE, num))
-               perror_msg_and_die("VT_ACTIVATE");
+               bb_perror_msg_and_die("VT_ACTIVATE");
        if (ioctl(fd, VT_WAITACTIVE, num))
-               perror_msg_and_die("VT_WAITACTIVE");
+               bb_perror_msg_and_die("VT_WAITACTIVE");
        return EXIT_SUCCESS;
 }
 
index b7dcc9e..a4ba851 100644 (file)
@@ -19,23 +19,23 @@ int deallocvt_main(int argc, char *argv[])
 
        //if ((argc > 2) || ((argv == 2) && (**(argv + 1) == '-')))
        if (argc > 2)
-               show_usage();
+               bb_show_usage();
 
        fd = get_console_fd();
 
        if (argc == 1) {
                /* deallocate all unused consoles */
                if (ioctl(fd, VT_DISALLOCATE, 0))
-                       perror_msg_and_die("VT_DISALLOCATE");
+                       bb_perror_msg_and_die("VT_DISALLOCATE");
        } else {
                for (i = 1; i < argc; i++) {
                        num = atoi(argv[i]);
                        if (num == 0)
-                               error_msg("0: illegal VT number");
+                               bb_error_msg("0: illegal VT number");
                        else if (num == 1)
-                               error_msg("VT 1 cannot be deallocated");
+                               bb_error_msg("VT 1 cannot be deallocated");
                        else if (ioctl(fd, VT_DISALLOCATE, num))
-                               perror_msg_and_die("VT_DISALLOCATE");
+                               bb_perror_msg_and_die("VT_DISALLOCATE");
                }
        }
 
index d2bb6dc..8592655 100644 (file)
@@ -48,12 +48,12 @@ int dumpkmap_main(int argc, char **argv)
        char flags[MAX_NR_KEYMAPS], magic[] = "bkeymap";
 
        if (argc>=2 && *argv[1]=='-') {
-               show_usage();
+               bb_show_usage();
        }
 
        fd = open(CURRENT_VC, O_RDWR);
        if (fd < 0) {
-               perror_msg("Error opening " CURRENT_VC);
+               bb_perror_msg("Error opening " CURRENT_VC);
                return EXIT_FAILURE;
        }
 
@@ -81,7 +81,7 @@ int dumpkmap_main(int argc, char **argv)
                                ke.kb_table = i;
                                if (ioctl(fd, KDGKBENT, &ke) < 0) {
                                
-                                       error_msg("ioctl returned: %m, %s, %s, %xqq", (char *)&ke.kb_index,(char *)&ke.kb_table,(int)&ke.kb_value);
+                                       bb_error_msg("ioctl returned: %m, %s, %s, %xqq", (char *)&ke.kb_index,(char *)&ke.kb_table,(int)&ke.kb_value);
                                        }
                                else {
                                        write(1,(void*)&ke.kb_value,2); 
index 3fb4e76..640aa44 100644 (file)
@@ -34,16 +34,16 @@ int loadacm_main(int argc, char **argv)
        int fd;
 
        if (argc>=2 && *argv[1]=='-') {
-               show_usage();
+               bb_show_usage();
        }
 
        fd = open(CURRENT_VC, O_RDWR);
        if (fd < 0) {
-               perror_msg_and_die("Error opening " CURRENT_VC);
+               bb_perror_msg_and_die("Error opening " CURRENT_VC);
        }
 
        if (screen_map_load(fd, stdin)) {
-               perror_msg_and_die("Error loading acm");
+               bb_perror_msg_and_die("Error loading acm");
        }
 
        write(fd, "\033(K", 3);
@@ -60,7 +60,7 @@ static int screen_map_load(int fd, FILE * fp)
        int is_unicode;
 
        if (fstat(fileno(fp), &stbuf))
-               perror_msg_and_die("Cannot stat map file");
+               bb_perror_msg_and_die("Cannot stat map file");
 
        /* first try a UTF screen-map: either ASCII (no restriction) or binary (regular file) */
        if (!
@@ -70,16 +70,16 @@ static int screen_map_load(int fd, FILE * fp)
                if (parse_failed) {
                        if (-1 == fseek(fp, 0, SEEK_SET)) {
                                if (errno == ESPIPE)
-                                       error_msg_and_die("16bit screen-map MUST be a regular file.");
+                                       bb_error_msg_and_die("16bit screen-map MUST be a regular file.");
                                else
-                                       perror_msg_and_die("fseek failed reading binary 16bit screen-map");
+                                       bb_perror_msg_and_die("fseek failed reading binary 16bit screen-map");
                        }
 
                        if (fread(wbuf, sizeof(unicode) * E_TABSZ, 1, fp) != 1)
-                               perror_msg_and_die("Cannot read [new] map from file");
+                               bb_perror_msg_and_die("Cannot read [new] map from file");
 #if 0
                        else
-                               error_msg("Input screen-map is binary.");
+                               bb_error_msg("Input screen-map is binary.");
 #endif
                }
 
@@ -87,7 +87,7 @@ static int screen_map_load(int fd, FILE * fp)
                /* same if it was binary, ie. if parse_failed */
                if (parse_failed || is_unicode) {
                        if (ioctl(fd, PIO_UNISCRNMAP, wbuf))
-                               perror_msg_and_die("PIO_UNISCRNMAP ioctl");
+                               bb_perror_msg_and_die("PIO_UNISCRNMAP ioctl");
                        else
                                return 0;
                }
@@ -96,10 +96,10 @@ static int screen_map_load(int fd, FILE * fp)
        /* rewind... */
        if (-1 == fseek(fp, 0, SEEK_SET)) {
                if (errno == ESPIPE)
-                       error_msg("Assuming 8bit screen-map - MUST be a regular file."),
+                       bb_error_msg("Assuming 8bit screen-map - MUST be a regular file."),
                                exit(1);
                else
-                       perror_msg_and_die("fseek failed assuming 8bit screen-map");
+                       bb_perror_msg_and_die("fseek failed assuming 8bit screen-map");
        }
 
        /* ... and try an old 8-bit screen-map */
@@ -109,25 +109,25 @@ static int screen_map_load(int fd, FILE * fp)
                        if (-1 == fseek(fp, 0, SEEK_SET)) {
                                if (errno == ESPIPE)
                                        /* should not - it succedeed above */
-                                       error_msg_and_die("fseek() returned ESPIPE !");
+                                       bb_error_msg_and_die("fseek() returned ESPIPE !");
                                else
-                                       perror_msg_and_die("fseek for binary 8bit screen-map");
+                                       bb_perror_msg_and_die("fseek for binary 8bit screen-map");
                        }
 
                        if (fread(buf, E_TABSZ, 1, fp) != 1)
-                               perror_msg_and_die("Cannot read [old] map from file");
+                               bb_perror_msg_and_die("Cannot read [old] map from file");
 #if 0
                        else
-                               error_msg("Input screen-map is binary.");
+                               bb_error_msg("Input screen-map is binary.");
 #endif
                }
 
                if (ioctl(fd, PIO_SCRNMAP, buf))
-                       perror_msg_and_die("PIO_SCRNMAP ioctl");
+                       bb_perror_msg_and_die("PIO_SCRNMAP ioctl");
                else
                        return 0;
        }
-       error_msg("Error parsing symbolic map");
+       bb_error_msg("Error parsing symbolic map");
        return(1);
 }
 
@@ -172,7 +172,7 @@ static int uni_screen_map_read_ascii(FILE * fp, unicode buf[], int *is_unicode)
                        if (feof(fp))
                                break;
                        else
-                               perror_msg_and_die("uni_screen_map_read_ascii() can't read line");
+                               bb_perror_msg_and_die("uni_screen_map_read_ascii() can't read line");
                }
 
                /* get "charset-relative charcode", stripping leading spaces */
index d665001..6108151 100644 (file)
@@ -44,11 +44,11 @@ extern int loadfont_main(int argc, char **argv)
        int fd;
 
        if (argc != 1)
-               show_usage();
+               bb_show_usage();
 
        fd = open(CURRENT_VC, O_RDWR);
        if (fd < 0)
-               perror_msg_and_die("Error opening " CURRENT_VC);
+               bb_perror_msg_and_die("Error opening " CURRENT_VC);
        loadnewfont(fd);
 
        return EXIT_SUCCESS;
@@ -62,7 +62,7 @@ static void do_loadfont(int fd, char *inbuf, int unit, int fontsize)
        memset(buf, 0, sizeof(buf));
 
        if (unit < 1 || unit > 32)
-               error_msg_and_die("Bad character size %d", unit);
+               bb_error_msg_and_die("Bad character size %d", unit);
 
        for (i = 0; i < fontsize; i++)
                memcpy(buf + (32 * i), inbuf + (unit * i), unit);
@@ -77,11 +77,11 @@ static void do_loadfont(int fd, char *inbuf, int unit, int fontsize)
 
                if (ioctl(fd, PIO_FONTX, &cfd) == 0)
                        return;                         /* success */
-               perror_msg("PIO_FONTX ioctl error (trying PIO_FONT)");
+               bb_perror_msg("PIO_FONTX ioctl error (trying PIO_FONT)");
        }
 #endif
        if (ioctl(fd, PIO_FONT, buf))
-               perror_msg_and_die("PIO_FONT ioctl error");
+               bb_perror_msg_and_die("PIO_FONT ioctl error");
 }
 
 static void
@@ -119,11 +119,11 @@ do_loadtable(int fd, unsigned char *inbuf, int tailsz, int fontsize)
        if (ioctl(fd, PIO_UNIMAPCLR, &advice)) {
 #ifdef ENOIOCTLCMD
                if (errno == ENOIOCTLCMD) {
-                       error_msg("It seems this kernel is older than 1.1.92");
-                       error_msg_and_die("No Unicode mapping table loaded.");
+                       bb_error_msg("It seems this kernel is older than 1.1.92");
+                       bb_error_msg_and_die("No Unicode mapping table loaded.");
                } else
 #endif
-                       perror_msg_and_die("PIO_UNIMAPCLR");
+                       bb_perror_msg_and_die("PIO_UNIMAPCLR");
        }
        ud.entry_ct = ct;
        ud.entries = up;
@@ -133,7 +133,7 @@ do_loadtable(int fd, unsigned char *inbuf, int tailsz, int fontsize)
                        /* change advice parameters */
                }
 #endif
-               perror_msg_and_die("PIO_UNIMAP");
+               bb_perror_msg_and_die("PIO_UNIMAP");
        }
 }
 
@@ -150,13 +150,13 @@ static void loadnewfont(int fd)
         */
        inputlth = fread(inbuf, 1, sizeof(inbuf), stdin);
        if (ferror(stdin))
-               perror_msg_and_die("Error reading input font");
+               bb_perror_msg_and_die("Error reading input font");
        /* use malloc/realloc in case of giant files;
           maybe these do not occur: 16kB for the font,
           and 16kB for the map leaves 32 unicode values
           for each font position */
        if (!feof(stdin))
-               perror_msg_and_die("Font too large");
+               bb_perror_msg_and_die("Font too large");
 
        /* test for psf first */
        {
@@ -174,11 +174,11 @@ static void loadnewfont(int fd)
                        goto no_psf;
 
                if (psfhdr.mode > PSF_MAXMODE)
-                       error_msg_and_die("Unsupported psf file mode");
+                       bb_error_msg_and_die("Unsupported psf file mode");
                fontsize = ((psfhdr.mode & PSF_MODE512) ? 512 : 256);
 #if !defined( PIO_FONTX ) || defined( __sparc__ )
                if (fontsize != 256)
-                       error_msg_and_die("Only fontsize 256 supported");
+                       bb_error_msg_and_die("Only fontsize 256 supported");
 #endif
                hastable = (psfhdr.mode & PSF_MODEHASTAB);
                unit = psfhdr.charsize;
@@ -186,7 +186,7 @@ static void loadnewfont(int fd)
 
                head = head0 + fontsize * unit;
                if (head > inputlth || (!hastable && head != inputlth))
-                       error_msg_and_die("Input file: bad length");
+                       bb_error_msg_and_die("Input file: bad length");
                do_loadfont(fd, inbuf + head0, unit, fontsize);
                if (hastable)
                        do_loadtable(fd, inbuf + head, inputlth - head, fontsize);
@@ -201,7 +201,7 @@ static void loadnewfont(int fd)
        } else {
                /* bare font */
                if (inputlth & 0377)
-                       error_msg_and_die("Bad input file size");
+                       bb_error_msg_and_die("Bad input file size");
                offset = 0;
                unit = inputlth / 256;
        }
index 4f217d6..f4208df 100644 (file)
@@ -51,18 +51,18 @@ int loadkmap_main(int argc, char **argv)
        char flags[MAX_NR_KEYMAPS], buff[7];
 
        if (argc != 1)
-               show_usage();
+               bb_show_usage();
 
        fd = open(CURRENT_VC, O_RDWR);
        if (fd < 0)
-               perror_msg_and_die("Error opening " CURRENT_VC);
+               bb_perror_msg_and_die("Error opening " CURRENT_VC);
 
        read(0, buff, 7);
        if (0 != strncmp(buff, BINARY_KEYMAP_MAGIC, 7))
-               error_msg_and_die("This is not a valid binary keymap.");
+               bb_error_msg_and_die("This is not a valid binary keymap.");
 
        if (MAX_NR_KEYMAPS != read(0, flags, MAX_NR_KEYMAPS))
-               perror_msg_and_die("Error reading keymap flags");
+               bb_perror_msg_and_die("Error reading keymap flags");
 
        ibuff = (u_short *) xmalloc(ibuffsz);
 
@@ -71,7 +71,7 @@ int loadkmap_main(int argc, char **argv)
                        pos = 0;
                        while (pos < ibuffsz) {
                                if ((readsz = read(0, (char *) ibuff + pos, ibuffsz - pos)) < 0)
-                                       perror_msg_and_die("Error reading keymap");
+                                       bb_perror_msg_and_die("Error reading keymap");
                                pos += readsz;
                        }
                        for (j = 0; j < NR_KEYS; j++) {
index 77c8975..5195136 100644 (file)
@@ -43,16 +43,16 @@ int openvt_main(int argc, char **argv)
        char * cmd_args = NULL;
 
        if (argc < 3)
-        show_usage();
+        bb_show_usage();
 
        if (!isdigit(argv[1][0]))
-               show_usage();
+               bb_show_usage();
 
        vtno = (int) atol(argv[1]);
 
        /* if (vtno <= 0 || vtno > 63) */
        if (vtno <= 0 || vtno > 12)
-               error_msg_and_die("Illegal vt number (%d)", vtno);        
+               bb_error_msg_and_die("Illegal vt number (%d)", vtno);     
 
        sprintf(vtname, VTNAME, vtno);
 
@@ -69,13 +69,13 @@ int openvt_main(int argc, char **argv)
                if (setsid() < 0) {
 #endif
 
-                       perror_msg_and_die("Unable to set new session");          
+                       bb_perror_msg_and_die("Unable to set new session");       
                }
                close(0);                       /* so that new vt becomes stdin */
 
                /* and grab new one */
                if ((fd = open(vtname, O_RDWR)) == -1)
-                       perror_msg_and_die("could not open %s", vtname);          
+                       bb_perror_msg_and_die("could not open %s", vtname);       
 
                /* Reassign stdout and sterr */
                close(1);
index 85612c8..796bab2 100644 (file)
@@ -43,7 +43,7 @@ setkeycodes_main(int argc, char** argv)
     struct kbkeycode a;
 
     if (argc % 2 != 1 || argc < 2) {
-      show_usage();
+      bb_show_usage();
        }
         
        fd = get_console_fd();
@@ -52,18 +52,18 @@ setkeycodes_main(int argc, char** argv)
        a.keycode = atoi(argv[2]);
        a.scancode = sc = strtol(argv[1], &ep, 16);
        if (*ep) {
-      error_msg_and_die("error reading SCANCODE: '%s'", argv[1]);
+      bb_error_msg_and_die("error reading SCANCODE: '%s'", argv[1]);
        }
        if (a.scancode > 127) {
            a.scancode -= 0xe000;
            a.scancode += 128;
        }
        if (a.scancode > 255 || a.keycode > 127) {
-      error_msg_and_die("SCANCODE or KEYCODE outside bounds");
+      bb_error_msg_and_die("SCANCODE or KEYCODE outside bounds");
        }
        if (ioctl(fd,KDSETKEYCODE,&a)) {
            perror("KDSETKEYCODE");
-               error_msg_and_die("failed to set SCANCODE %x to KEYCODE %d", sc, a.keycode);
+               bb_error_msg_and_die("failed to set SCANCODE %x to KEYCODE %d", sc, a.keycode);
        }
        argc -= 2;
        argv += 2;
index 5b9996d..9f5c379 100644 (file)
@@ -111,17 +111,31 @@ config CONFIG_DOS2UNIX
          Please submit a patch to add help text for this item.
 
 config CONFIG_DU
-       bool "du"
+       bool "du (default blocksize of 512 bytes)"
        default n
        help
          Please submit a patch to add help text for this item.
 
+config CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K
+       bool "  Use a default blocksize of 1024 bytes (1K)"
+       default y
+       depends on CONFIG_DU
+       help
+         Please submit a patch to add help text for this item.
+
 config CONFIG_ECHO
-       bool "echo"
+       bool "echo (basic SUSv3 version taking no options"
        default n
        help
          Please submit a patch to add help text for this item.
 
+config CONFIG_FEATURE_FANCY_ECHO
+       bool "  Enable echo options (-n and -e)"
+       default y
+       depends on CONFIG_ECHO
+       help
+         Please submit a patch to add help text for this item.
+
 config CONFIG_ENV
        bool "env"
        default n
@@ -154,6 +168,13 @@ config CONFIG_HEAD
        help
          Please submit a patch to add help text for this item.
 
+config CONFIG_FEATURE_FANCY_HEAD
+       bool "  Enable head options (-c, -q, and -v)"
+       default n
+       depends on CONFIG_HEAD
+       help
+         Please submit a patch to add help text for this item.
+
 config CONFIG_HOSTID
        bool "hostid"
        default n
@@ -313,8 +334,15 @@ config CONFIG_SHA1SUM
          Compute and check SHA1 message digest
 
 config CONFIG_SLEEP
-       bool "sleep"
+       bool "sleep (single integer arg with no suffix)"
+       default n
+       help
+         Please submit a patch to add help text for this item.
+
+config CONFIG_FEATURE_FANCY_SLEEP
+       bool "  Enable multiple integer args and optional time suffixes"
        default n
+       depends on CONFIG_SLEEP
        help
          Please submit a patch to add help text for this item.
 
@@ -369,6 +397,13 @@ config CONFIG_TEE
        help
          Please submit a patch to add help text for this item.
 
+config CONFIG_FEATURE_TEE_USE_BLOCK_IO
+       bool "  Enable block i/o (larger/faster) instead of byte i/o."
+       default n
+       depends on CONFIG_TEE
+       help
+         Please submit a patch to add help text for this item.
+
 if CONFIG_ASH || CONFIG_HUSH || CONFIG_LASH || CONFIG_MSH
        config CONFIG_TEST
                default y
index bdbcec1..71bb9b3 100644 (file)
  *
  */
 
-/* getopt not needed */
+/* BB_AUDIT SUSv3 compliant */
+/* http://www.opengroup.org/onlinepubs/007904975/utilities/basename.html */
+
+
+/* Mar 16, 2003      Manuel Novoa III   (mjn3@codepoet.org)
+ *
+ * Changes:
+ * 1) Now checks for too many args.  Need at least one and at most two.
+ * 2) Don't check for options, as per SUSv3.
+ * 3) Save some space by using strcmp().  Calling strncmp() here was silly.
+ */
 
 #include <stdlib.h>
-#include "busybox.h"
+#include <stdio.h>
 #include <string.h>
+#include "busybox.h"
 
 extern int basename_main(int argc, char **argv)
 {
-       int m, n;
+       size_t m, n;
        char *s;
 
-       if ((argc < 2) || (**(argv + 1) == '-')) {
-               show_usage();
+       if (((unsigned int)(argc-2)) >= 2) {
+               bb_show_usage();
        }
 
-       argv++;
-
-       s = get_last_path_component(*argv);
+       s = bb_get_last_path_component(*++argv);
 
-       if (argc>2) {
-               argv++;
+       if (*++argv) {
                n = strlen(*argv);
                m = strlen(s);
-               if (m>n && strncmp(s+m-n, *argv, n)==0)
+               if ((m > n) && ((strcmp)(s+m-n, *argv) == 0)) {
                        s[m-n] = '\0';
+               }
        }
+
        puts(s);
-       return EXIT_SUCCESS;
+
+       bb_fflush_stdout_and_exit(EXIT_SUCCESS);
 }
index ab63157..ed480dd 100644 (file)
@@ -1,3 +1,14 @@
+/* NOTE:
+ *
+ * Apparently, all "Steven J. Merrifield" did was grab the util-linux cal applet,
+ * spend maybe 5 minutes integrating it into busybox, slapped a copyright on it,
+ * and submitted it.  I certainly saw no evidence of any attempt at size reduction.
+ * Not only do I consider his copyright below meaningless, I also consider his
+ * actions shameful.
+ *
+ * Manuel Novoa III   (mjn3@codepoet.org)
+ */
+
 /*
  * Calendar implementation for busybox
  *
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  *
 */
-       
+
+/* BB_AUDIT SUSv3 compliant with -j and -y extensions (from util-linux). */
+/* BB_AUDIT BUG: The output of 'cal -j 1752' is incorrect.  The upstream
+ * BB_AUDIT BUG: version in util-linux seems to be broken as well. */
+/* http://www.opengroup.org/onlinepubs/007904975/utilities/cal.html */
+
+/* Mar 16, 2003      Manuel Novoa III   (mjn3@codepoet.org)
+ *
+ * Major size reduction... over 50% (>1.5k) on i386.
+ */
 
 #include <sys/types.h>
 #include <ctype.h>
 #define        MAXDAYS                 42              /* max slots in a month array */
 #define        SPACE                   -1              /* used in day array */
 
-static int days_in_month[2][13] = {
-       {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
-       {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
+static const char days_in_month[] = {
+       0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
 };
 
-int sep1752[MAXDAYS] = {
-       SPACE,  SPACE,  1,      2,      14,     15,     16,
+static const char sep1752[] = {
+                1,     2,      14,     15,     16,
        17,     18,     19,     20,     21,     22,     23,
-       24,     25,     26,     27,     28,     29,     30,
-       SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,
-       SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,
-       SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,
-}, j_sep1752[MAXDAYS] = {
-       SPACE,  SPACE,  245,    246,    258,    259,    260,
-       261,    262,    263,    264,    265,    266,    267,
-       268,    269,    270,    271,    272,    273,    274,
-       SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,
-       SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,
-       SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,
-}, empty[MAXDAYS] = {
-       SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,
-       SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,
-       SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,
-       SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,
-       SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,
-       SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,  SPACE,
+       24,     25,     26,     27,     28,     29,     30
 };
 
-char *month_names[12];
-
-char day_headings[] = "                    ";
-char j_day_headings[] = "                           ";
+static int julian;
 
 /* leap year -- account for gregorian reformation in 1752 */
 #define        leap_year(yr) \
        ((yr) <= 1752 ? !((yr) % 4) : \
        (!((yr) % 4) && ((yr) % 100)) || !((yr) % 400))
 
+static int is_leap_year(int year)
+{
+       return leap_year(year);
+}
+#undef leap_year
+#define leap_year(yr) is_leap_year(yr)
+
 /* number of centuries since 1700, not inclusive */
 #define        centuries_since_1700(yr) \
        ((yr) > 1700 ? (yr) / 100 - 17 : 0)
@@ -96,178 +102,129 @@ char j_day_headings[] = "                           ";
 #define        leap_years_since_year_1(yr) \
        ((yr) / 4 - centuries_since_1700(yr) + quad_centuries_since_1700(yr))
 
-int julian;
-void ascii_day __P((char *, int));
-void center __P((char *, int, int));
-void day_array __P((int, int, int *));
-int day_in_week __P((int, int, int));
-int day_in_year __P((int, int, int));
-void j_yearly __P((int));
-void monthly __P((int, int));
-void trim_trailing_spaces __P((char *));
-void yearly __P((int));
+static void center __P((char *, int, int));
+static void day_array __P((int, int, int *));
+static void trim_trailing_spaces_and_print __P((char *));
+
+static void blank_string(char *buf, size_t buflen);
+static char *build_row(char *p, int *dp);
+
+#define        DAY_LEN         3               /* 3 spaces per day */
+#define        J_DAY_LEN       (DAY_LEN + 1)
+#define        WEEK_LEN        20              /* 7 * 3 - one space at the end */
+#define        J_WEEK_LEN      (WEEK_LEN + 7)
+#define        HEAD_SEP        2               /* spaces between day headings */
 
 int cal_main(int argc, char **argv)
 {
        struct tm *local_time;
-       static struct tm zero_tm;
+       struct tm zero_tm;
        time_t now;
-       int ch, month, year, yflag, i;
+       int month, year, flags, i;
+       char *month_names[12];
+       char day_headings[28];  /* 28 for julian, 21 for nonjulian */
        char buf[40];
 
 #ifdef CONFIG_LOCALE_SUPPORT
        setlocale(LC_TIME, "");
 #endif
 
-       yflag = 0;
-       while ((ch = getopt(argc, argv, "jy")) != -1)
-               switch(ch) {
-               case 'j':
-                       julian = 1;
-                       break;
-               case 'y':
-                       yflag = 1;
-                       break;
-               default:
-                       show_usage();
-               }
-       argc -= optind;
+       flags = bb_getopt_ulflags(argc, argv, "jy");
+
+       julian = flags & 1;
+
        argv += optind;
 
        month = 0;
-       switch(argc) {
-       case 2:
-               if ((month = atoi(*argv++)) < 1 || month > 12)
-                       error_msg_and_die("Illegal month value: use 1-12");
-               /* FALLTHROUGH */
-       case 1:
-               if ((year = atoi(*argv)) < 1 || year > 9999)
-                       error_msg_and_die("Illegal year value: use 1-9999");
-               break;
-       case 0:
+
+       if ((argc -= optind) > 2) {
+               bb_show_usage();
+       }
+
+       if (!argc) {
                time(&now);
                local_time = localtime(&now);
                year = local_time->tm_year + 1900;
-               if (!yflag)
+               if (!(flags & 2)) {
                        month = local_time->tm_mon + 1;
-               break;
-       default:
-               show_usage();
+               }
+       } else {
+               if (argc == 2) {
+                       month = bb_xgetularg10_bnd(*argv++, 1, 12);
+               }
+               year = bb_xgetularg10_bnd(*argv, 1, 9999);
        }
 
-       for (i = 0; i < 12; i++) {
+       blank_string(day_headings, sizeof(day_headings) - 7 +  7*julian);
+
+       i = 0;
+       do {
                zero_tm.tm_mon = i;
                strftime(buf, sizeof(buf), "%B", &zero_tm);
-               month_names[i] = xstrdup(buf);
-       }
-       for (i = 0; i < 7; i++) {
-               zero_tm.tm_wday = i;
-               strftime(buf, sizeof(buf), "%a", &zero_tm);
-               strncpy(day_headings + i * 3, buf, 2);
-               strncpy(j_day_headings + i * 4 + 1, buf, 2);
-       }
-
-       if (month)
-               monthly(month, year);
-       else if (julian)
-               j_yearly(year);
-       else
-               yearly(year);
-       exit(0);
-}
+               month_names[i] = bb_xstrdup(buf);
 
-#define        DAY_LEN         3               /* 3 spaces per day */
-#define        J_DAY_LEN       4               /* 4 spaces per day */
-#define        WEEK_LEN        20              /* 7 * 3 - one space at the end */
-#define        J_WEEK_LEN      27              /* 7 * 4 - one space at the end */
-#define        HEAD_SEP        2               /* spaces between day headings */
-#define        J_HEAD_SEP      2
-
-void monthly(int month, int year)
-{
-       int col, row, len, days[MAXDAYS];
-       char *p, lineout[30];
-
-       day_array(month, year, days);
-       len = sprintf(lineout, "%s %d", month_names[month - 1], year);
-       printf("%*s%s\n%s\n",
-           ((julian ? J_WEEK_LEN : WEEK_LEN) - len) / 2, "",
-           lineout, julian ? j_day_headings : day_headings);
-       for (row = 0; row < 6; row++) {
-               for (col = 0, p = lineout; col < 7; col++,
-                   p += julian ? J_DAY_LEN : DAY_LEN)
-                       ascii_day(p, days[row * 7 + col]);
-               *p = '\0';
-               trim_trailing_spaces(lineout);
-               printf("%s\n", lineout);
-       }
-}
-
-void j_yearly(int year)
-{
-       int col, *dp, i, month, row, which_cal;
-       int days[12][MAXDAYS];
-       char *p, lineout[80];
-
-       sprintf(lineout, "%d", year);
-       center(lineout, J_WEEK_LEN * 2 + J_HEAD_SEP, 0);
-       printf("\n\n");
-       for (i = 0; i < 12; i++)
-               day_array(i + 1, year, days[i]);
-       memset(lineout, ' ', sizeof(lineout) - 1);
-       lineout[sizeof(lineout) - 1] = '\0';
-       for (month = 0; month < 12; month += 2) {
-               center(month_names[month], J_WEEK_LEN, J_HEAD_SEP);
-               center(month_names[month + 1], J_WEEK_LEN, 0);
-               printf("\n%s%*s%s\n", j_day_headings, J_HEAD_SEP, "",
-                   j_day_headings);
-               for (row = 0; row < 6; row++) {
-                       for (which_cal = 0; which_cal < 2; which_cal++) {
-                               p = lineout + which_cal * (J_WEEK_LEN + 2);
-                               dp = &days[month + which_cal][row * 7];
-                               for (col = 0; col < 7; col++, p += J_DAY_LEN)
-                                       ascii_day(p, *dp++);
-                       }
-                       *p = '\0';
-                       trim_trailing_spaces(lineout);
-                       printf("%s\n", lineout);
+               if (i < 7) {
+                       zero_tm.tm_wday = i;
+                       strftime(buf, sizeof(buf), "%a", &zero_tm);
+                       strncpy(day_headings + i * (3+julian) + julian, buf, 2);
                }
-       }
-       printf("\n");
-}
-
-void yearly(int year)
-{
-       int col, *dp, i, month, row, which_cal;
-       int days[12][MAXDAYS];
-       char *p, lineout[80];
-
-       sprintf(lineout, "%d", year);
-       center(lineout, WEEK_LEN * 3 + HEAD_SEP * 2, 0);
-       printf("\n\n");
-       for (i = 0; i < 12; i++)
-               day_array(i + 1, year, days[i]);
-       memset(lineout, ' ', sizeof(lineout) - 1);
-       lineout[sizeof(lineout) - 1] = '\0';
-       for (month = 0; month < 12; month += 3) {
-               center(month_names[month], WEEK_LEN, HEAD_SEP);
-               center(month_names[month + 1], WEEK_LEN, HEAD_SEP);
-               center(month_names[month + 2], WEEK_LEN, 0);
-               printf("\n%s%*s%s%*s%s\n", day_headings, HEAD_SEP,
-                   "", day_headings, HEAD_SEP, "", day_headings);
+       } while (++i < 12);
+
+       if (month) {
+               int row, len, days[MAXDAYS];
+               int *dp = days;
+               char lineout[30];
+               
+               day_array(month, year, dp);
+               len = sprintf(lineout, "%s %d", month_names[month - 1], year);
+               bb_printf("%*s%s\n%s\n",
+                          ((7*julian + WEEK_LEN) - len) / 2, "",
+                          lineout, day_headings);
                for (row = 0; row < 6; row++) {
-                       for (which_cal = 0; which_cal < 3; which_cal++) {
-                               p = lineout + which_cal * (WEEK_LEN + 2);
-                               dp = &days[month + which_cal][row * 7];
-                               for (col = 0; col < 7; col++, p += DAY_LEN)
-                                       ascii_day(p, *dp++);
+                       build_row(lineout, dp)[0] = '\0';
+                       dp += 7;
+                       trim_trailing_spaces_and_print(lineout);
+               }
+       } else {
+               int row, which_cal, week_len, days[12][MAXDAYS];
+               int *dp;
+               char lineout[80];
+               
+               sprintf(lineout, "%d", year);
+               center(lineout,
+                          (WEEK_LEN * 3 + HEAD_SEP * 2)
+                          + julian * (J_WEEK_LEN * 2 + HEAD_SEP
+                                                  - (WEEK_LEN * 3 + HEAD_SEP * 2)),
+                          0);
+               puts("\n");             /* two \n's */
+               for (i = 0; i < 12; i++) {
+                       day_array(i + 1, year, days[i]);
+               }
+               blank_string(lineout, sizeof(lineout));
+               week_len = WEEK_LEN + julian * (J_WEEK_LEN - WEEK_LEN);
+               for (month = 0; month < 12; month += 3-julian) {
+                       center(month_names[month], week_len, HEAD_SEP);
+                       if (!julian) {
+                               center(month_names[month + 1], week_len, HEAD_SEP);
+                       }
+                       center(month_names[month + 2 - julian], week_len, 0);
+                       bb_printf("\n%s%*s%s", day_headings, HEAD_SEP, "", day_headings);
+                       if (!julian) {
+                               bb_printf("%*s%s", HEAD_SEP, "", day_headings);
+                       }
+                       putchar('\n');
+                       for (row = 0; row < (6*7); row += 7) {
+                               for (which_cal = 0; which_cal < 3-julian; which_cal++) {
+                                       dp = days[month + which_cal] + row;
+                                       build_row(lineout + which_cal * (week_len + 2), dp);
+                               }
+                               /* blank_string took care of nul termination. */
+                               trim_trailing_spaces_and_print(lineout);
                        }
-                       *p = '\0';
-                       trim_trailing_spaces(lineout);
-                       printf("%s\n", lineout);
                }
        }
-       printf("\n");
+
+       bb_fflush_stdout_and_exit(0);
 }
 
 /*
@@ -277,118 +234,129 @@ void yearly(int year)
  *     out end to end.  You would have 42 numbers or spaces.  This routine
  *     builds that array for any month from Jan. 1 through Dec. 9999.
  */
-void day_array(int month, int year, int *days)
+static void day_array(int month, int year, int *days)
 {
+       long temp;
+       int i;
+       int j_offset;
        int day, dw, dm;
 
+       memset(days, SPACE, MAXDAYS * sizeof(int));
+
        if ((month == 9) && (year == 1752)) {
-               memmove(days,
-                       julian ? j_sep1752 : sep1752, MAXDAYS * sizeof(int));
+               j_offset = julian * 244;
+               i = 0;
+               do {
+                       days[i+2] = sep1752[i] + j_offset;
+               } while (++i < sizeof(sep1752));
+
                return;
        }
-       memmove(days, empty, MAXDAYS * sizeof(int));
-       dm = days_in_month[leap_year(year)][month];
-       dw = day_in_week(1, month, year);
-       day = julian ? day_in_year(1, month, year) : 1;
-       while (dm--)
-               days[dw++] = day++;
-}
 
-/*
- * day_in_year --
- *     return the 1 based day number within the year
- */
-int day_in_year(int day, int month, int year)
-{
-       int i, leap;
-
-       leap = leap_year(year);
-       for (i = 1; i < month; i++)
-               day += days_in_month[leap][i];
-       return (day);
-}
+       /* day_in_year
+        *      return the 1 based day number within the year
+        */
+       day = 1;
+       if ((month > 2) && leap_year(year)) {
+               ++day;
+       }
 
-/*
- * day_in_week
- *     return the 0 based day number for any date from 1 Jan. 1 to
- *     31 Dec. 9999.  Assumes the Gregorian reformation eliminates
- *     3 Sep. 1752 through 13 Sep. 1752.  Returns Thursday for all
- *     missing days.
- */
-int day_in_week(int day, int month, int year)
-{
-       long temp;
+       i = month;
+       while (i) {
+               day += days_in_month[--i];
+       }
 
+       /* day_in_week
+        *      return the 0 based day number for any date from 1 Jan. 1 to
+        *      31 Dec. 9999.  Assumes the Gregorian reformation eliminates
+        *      3 Sep. 1752 through 13 Sep. 1752.  Returns Thursday for all
+        *      missing days.
+        */
+       dw = THURSDAY;
        temp = (long)(year - 1) * 365 + leap_years_since_year_1(year - 1)
-           + day_in_year(day, month, year);
-       if (temp < FIRST_MISSING_DAY)
-               return ((temp - 1 + SATURDAY) % 7);
-       if (temp >= (FIRST_MISSING_DAY + NUMBER_MISSING_DAYS))
-               return (((temp - 1 + SATURDAY) - NUMBER_MISSING_DAYS) % 7);
-       return (THURSDAY);
+               + day;
+       if (temp < FIRST_MISSING_DAY) {
+               dw = ((temp - 1 + SATURDAY) % 7);
+       } else if (temp >= (FIRST_MISSING_DAY + NUMBER_MISSING_DAYS)) {
+               dw = (((temp - 1 + SATURDAY) - NUMBER_MISSING_DAYS) % 7);
+       }
+
+       if (!julian) {
+               day = 1;
+       }
+
+       dm = days_in_month[month];
+       if ((month == 2) && leap_year(year)) {
+               ++dm;
+       }
+
+       while (dm) {
+               days[dw++] = day++;
+               --dm;
+       }
 }
 
-void ascii_day(char *p, int day)
+static void trim_trailing_spaces_and_print(char *s)
 {
-       int display, val;
-       static char *aday[] = {
-               "",
-               " 1", " 2", " 3", " 4", " 5", " 6", " 7",
-               " 8", " 9", "10", "11", "12", "13", "14",
-               "15", "16", "17", "18", "19", "20", "21",
-               "22", "23", "24", "25", "26", "27", "28",
-               "29", "30", "31",
-       };
-
-       if (day == SPACE) {
-               memset(p, ' ', julian ? J_DAY_LEN : DAY_LEN);
-               return;
+       char *p = s;
+
+       while (*p) {
+               ++p;
        }
-       if (julian) {
-               if ((val = day / 100) != 0) {
-                       day %= 100;
-                       *p++ = val + '0';
-                       display = 1;
-               } else {
-                       *p++ = ' ';
-                       display = 0;
+       while (p > s) {
+               --p;
+               if (!(isspace)(*p)) {   /* We want the function... not the inline. */
+                       p[1] = '\0';
+                       break;
                }
-               val = day / 10;
-               if (val || display)
-                       *p++ = val + '0';
-               else
-                       *p++ = ' ';
-               *p++ = day % 10 + '0';
-       } else {
-               *p++ = aday[day][0];
-               *p++ = aday[day][1];
        }
-       *p = ' ';
+
+       puts(s);
 }
 
-void trim_trailing_spaces(char *s)
+static void center(char *str, int len, int separate)
 {
-       char *p;
+       int n = strlen(str);
+       len -= n;
+       bb_printf("%*s%*s", (len/2) + n, str, (len/2) + (len % 2) + separate, "");
+}
 
-       for (p = s; *p; ++p)
-               continue;
-       while (p > s && (--p, isspace(*p)))
-               continue;
-       if (p > s)
-               ++p;
-       *p = '\0';
+static void blank_string(char *buf, size_t buflen)
+{
+       memset(buf, ' ', buflen);
+       buf[buflen-1] = '\0';
 }
 
-void center(char *str, int len, int separate)
+static char *build_row(char *p, int *dp)
 {
+       int col, val, day;
+               
+       memset(p, ' ', (julian + DAY_LEN) * 7);
+
+       col = 0;
+       do {
+               if ((day = *dp++) != SPACE) {
+                       if (julian) {
+                               *++p;
+                               if (day >= 100) {
+                                       *p = '0';
+                                       p[-1] = (day / 100) + '0';
+                                       day %= 100;
+                               }
+                       }
+                       if ((val = day / 10) > 0) {
+                               *p = val + '0';
+                       }
+                       *++p = day % 10 + '0';
+                       p += 2;
+               } else {
+                       p += DAY_LEN + julian;
+               }
+       } while (++col < 7);
 
-       len -= strlen(str);
-       printf("%*s%s%*s", len / 2, "", str, len / 2 + len % 2, "");
-       if (separate)
-               printf("%*s", separate, "");
+       return p;
 }
 
-
 /*
  * Copyright (c) 1989, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
index 33f15da..8652757 100644 (file)
@@ -1,9 +1,8 @@
 /* vi: set sw=4 ts=4: */
 /*
- * Mini Cat implementation for busybox
+ * cat implementation for busybox
  *
- * Copyright (C) 1999,2000 by Lineo, inc. and Erik Andersen
- * Copyright (C) 1999,2000,2001 by Erik Andersen <andersee@debian.org>
+ * Copyright (C) 2003  Manuel Novoa III  <mjn3@codepoet.org>
  *
  * 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
  *
  */
 
+/* BB_AUDIT SUSv3 compliant */
+/* http://www.opengroup.org/onlinepubs/007904975/utilities/cat.html */
+
+/* Mar 16, 2003      Manuel Novoa III   (mjn3@codepoet.org)
+ *
+ * This is a new implementation of 'cat' which aims to be SUSv3 compliant.
+ *
+ * Changes from the previous implementation include:
+ * 1) Multiple '-' args are accepted as required by SUSv3.  The previous
+ *    implementation would close stdin and segfault on a subsequent '-'.
+ * 2) The '-u' options is required by SUSv3.  Note that the specified
+ *    behavior for '-u' is done by default, so all we need do is accept
+ *    the option.
+ */
+
 #include <stdlib.h>
-#include <string.h>
+#include <stdio.h>
+#include <unistd.h>
 #include "busybox.h"
 
 extern int cat_main(int argc, char **argv)
 {
-       int status = EXIT_SUCCESS;
+       FILE *f;
+       int retval = EXIT_SUCCESS;
 
-       if (argc == 1) {
-               print_file(stdin);
-               return status;
+       bb_getopt_ulflags(argc, argv, "u");
+
+       argv += optind;
+       if (!*argv) {
+               *--argv = "-";
        }
 
-       while (--argc > 0) {
-               if(!(strcmp(*++argv, "-"))) {
-                       print_file(stdin);
-               } else if (! print_file_by_name(*argv)) {
-                       status = EXIT_FAILURE;
+       do {
+               if ((f = bb_wfopen_input(*argv)) != NULL) {
+                       int r = bb_copyfd(fileno(f), STDOUT_FILENO, 0);
+                       bb_fclose_nonstdin(f);
+                       if (r >= 0) {
+                               continue;
+                       }
                }
-       }
-       return status;
-}
+               retval = EXIT_FAILURE;
+       } while (*++argv);
 
-/*
-Local Variables:
-c-file-style: "linux"
-c-basic-offset: 4
-tab-width: 4
-End:
-*/
+       return retval;
+}
index 968b448..f5e5d29 100644 (file)
  *
  */
 
-#include <stdio.h>
+/* BB_AUDIT SUSv3 defects - unsupported options -h, -H, -L, and -P. */
+/* BB_AUDIT GNU defects - unsupported options -h, -c, -f, -v, and long options. */
+/* BB_AUDIT Note: gnu chgrp does not support -H, -L, or -P. */
+/* http://www.opengroup.org/onlinepubs/007904975/utilities/chgrp.html */
+
 #include <stdlib.h>
-#include <string.h>
 #include <unistd.h>
 #include "busybox.h"
 
 #define lchown chown
 #endif
 
-
-static long gid;
-
 static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
 {
-       if (lchown(fileName, statbuf->st_uid, (gid == -1) ? statbuf->st_gid : gid) == 0) {
+       if (lchown(fileName, statbuf->st_uid, *((long *) junk)) == 0) {
                return (TRUE);
        }
-       perror(fileName);
+       bb_perror_msg("%s", fileName);  /* Avoid multibyte problems. */
        return (FALSE);
 }
 
 int chgrp_main(int argc, char **argv)
 {
-       int opt;
-       int recursiveFlag = FALSE;
-       char *p=NULL;
+       long gid;
+       int recursiveFlag;;
+       int retval = EXIT_SUCCESS;
+       char *p;
 
-       /* do normal option parsing */
-       while ((opt = getopt(argc, argv, "R")) > 0) {
-               switch (opt) {
-                       case 'R':
-                               recursiveFlag = TRUE;
-                               break;
-                       default:
-                               show_usage();
-               }
+       recursiveFlag = bb_getopt_ulflags(argc, argv, "R");
+
+       if (argc - optind < 2) {
+               bb_show_usage();
        }
 
-       if (argc > optind && argc > 2 && argv[optind]) {
-               /* Find the selected group */
-               gid = strtoul(argv[optind], &p, 10);    /* maybe it's already numeric */
-               if (argv[optind] == p)
-                       gid = my_getgrnam(argv[optind]);
-       } else {
-               error_msg_and_die(too_few_args);
+       argv += optind;
+
+       /* Find the selected group */
+       gid = strtoul(*argv, &p, 10);   /* maybe it's already numeric */
+       if (*p || (p == *argv)) {               /* trailing chars or nonnumeric */
+               gid = my_getgrnam(*argv);
        }
+       ++argv;
 
        /* Ok, ready to do the deed now */
-       while (++optind < argc) {
-               if (! recursive_action (argv[optind], recursiveFlag, FALSE, FALSE, 
-                                       fileAction, fileAction, NULL)) {
-                       return EXIT_FAILURE;
+       do {
+               if (! recursive_action (*argv, recursiveFlag, FALSE, FALSE, 
+                                                               fileAction, fileAction, &gid)) {
+                       retval = EXIT_FAILURE;
                }
-       }
-       return EXIT_SUCCESS;
+       } while (*++argv);
 
+       return retval;
 }
 
 /*
index ba80e02..28c9855 100644 (file)
  *
  */
 
+/* BB_AUDIT SUSv3 compliant */
+/* BB_AUDIT GNU defects - unsupported options -c, -f, -v, and long options. */
+/* http://www.opengroup.org/onlinepubs/007904975/utilities/chmod.html */
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <getopt.h>
+#include <sys/stat.h>
 #include "busybox.h"
 
 static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
 {
-       if (!parse_mode((char *)junk, &(statbuf->st_mode)))
-               error_msg_and_die( "unknown mode: %s", (char *)junk);
+       if (!bb_parse_mode((char *)junk, &(statbuf->st_mode)))
+               bb_error_msg_and_die( "unknown mode: %s", (char *)junk);
        if (chmod(fileName, statbuf->st_mode) == 0)
                return (TRUE);
-       perror(fileName);
+       bb_perror_msg("%s", fileName);  /* Avoid multibyte problems. */
        return (FALSE);
 }
 
 int chmod_main(int argc, char **argv)
 {
-       int opt;
+       int retval = EXIT_SUCCESS;
        int recursiveFlag = FALSE;
-       int modeind = 0;   /* Index of the mode argument in `argv'. */
+       int count;
        char *smode;
-       static const char chmod_modes[] = "Rrwxstugoa,+-=";
+       char **p;
+       char *p0;
+       char opt = '-';
 
-       /* do normal option parsing */
-       while (1) {
-               int thisind = optind ? optind : 1;
+       ++argv;
+       count = 0;
 
-               opt = getopt(argc, argv, chmod_modes);
-               if (opt == EOF)
-                               break;
-               smode = strchr(chmod_modes, opt);
-               if(smode == NULL)
-                               show_usage();
-               if(smode == chmod_modes) {      /* 'R' */
-                       recursiveFlag = TRUE;
-               } else {
-                     if (modeind != 0 && modeind != thisind)
-                       show_usage();
-                     modeind = thisind;
+       for (p = argv  ; *p ; p++) {
+               p0 = p[0];
+               if (p0[0] == opt) {
+                       if ((p0[1] == '-') && !p0[2]) {
+                               opt = 0;        /* Disable further option processing. */
+                               continue;
+                       }
+                       if (p0[1] == 'R') {
+                               char *s = p0 + 2;
+                               while (*s == 'R') {
+                                       ++s;
+                               }
+                               if (*s) {
+                                       bb_show_usage();
+                               }
+                               recursiveFlag = TRUE;
+                               continue;
+                       }
+                       if (count) {
+                               bb_show_usage();
+                       }
                }
+               argv[count] = p0;
+               ++count;
        }
 
-       if (modeind == 0)
-               modeind = optind++;
+       argv[count] = NULL;
 
-       opt = optind;
-       if (opt >= argc) {
-               error_msg_and_die(too_few_args);
+       if (count < 2) {
+               bb_show_usage();
        }
 
-       smode = argv[modeind];
+       smode = *argv;
+       ++argv;
+
        /* Ok, ready to do the deed now */
-       for (; opt < argc; opt++) {
-               if (! recursive_action (argv[opt], recursiveFlag, FALSE, FALSE, fileAction,
-                                       fileAction, smode)) {
-                       return EXIT_FAILURE;
+       do {
+               if (! recursive_action (*argv, recursiveFlag, FALSE, FALSE,
+                                                               fileAction,     fileAction, smode)) {
+                       retval = EXIT_FAILURE;
                }
-       }
-       return EXIT_SUCCESS;
+       } while (*++argv);
+
+       return retval;
 }
 
 /*
index 4e766a9..3e983cf 100644 (file)
  *
  */
 
-#include <stdio.h>
+/* BB_AUDIT SUSv3 defects - unsupported options -h, -H, -L, and -P. */
+/* BB_AUDIT GNU defects - unsupported options -h, -c, -f, -v, and long options. */
+/* BB_AUDIT Note: gnu chown does not support -H, -L, or -P. */
+/* http://www.opengroup.org/onlinepubs/007904975/utilities/chown.html */
+
 #include <stdlib.h>
-#include <string.h>
 #include <unistd.h>
+#include <string.h>
 #include "busybox.h"
 
 /* Don't use lchown for libc5 or glibc older then 2.1.x */
@@ -42,65 +46,67 @@ static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
        if (chown_func(fileName, uid, (gid == -1) ? statbuf->st_gid : gid) == 0) {
                return (TRUE);
        }
-       perror(fileName);
+       bb_perror_msg("%s", fileName);  /* Avoid multibyte problems. */
        return (FALSE);
 }
 
+#define FLAG_R 1
+#define FLAG_h 2
+
+static unsigned long get_ug_id(const char *s, long (*my_getxxnam)(const char *))
+{
+       unsigned long r;
+       char *p;
+
+       r = strtoul(s, &p, 10);
+       if (*p || (s == p)) {
+               r = my_getxxnam(s);
+       }
+
+       return r;
+}
+
 int chown_main(int argc, char **argv)
 {
-       int opt;
-       int recursiveFlag = FALSE,
-               noderefFlag = FALSE;
-       char *groupName=NULL;
-       char *p=NULL;
-
-       /* do normal option parsing */
-       while ((opt = getopt(argc, argv, "Rh")) > 0) {
-               switch (opt) {
-                       case 'R':
-                               recursiveFlag = TRUE;
-                               break;
-                       case 'h':
-                               noderefFlag = TRUE;
-                               break;
-                       default:
-                               show_usage();
-               }
+       int flags;
+       int retval = EXIT_SUCCESS;
+       char *groupName;
+
+       flags = bb_getopt_ulflags(argc, argv, "Rh");
+
+       if (flags & FLAG_h) chown_func = lchown;
+
+       if (argc - optind < 2) {
+               bb_show_usage();
        }
 
-       if (noderefFlag) chown_func = lchown;
-
-       if (argc > optind && argc > 2 && argv[optind]) {
-               /* First, check if there is a group name here */
-               groupName = strchr(argv[optind], '.');
-               if (groupName == NULL)
-                       groupName = strchr(argv[optind], ':');
-               if (groupName) {
-                       *groupName++ = '\0';
-                       gid = strtoul(groupName, &p, 10);
-                       if (groupName == p)
-                               gid = my_getgrnam(groupName);
-               } else {
-                       gid = -1;
-               }
-               /* Now check for the username */
-               uid = strtoul(argv[optind], &p, 10);    /* Is is numeric? */
-               if (argv[optind] == p) {
-                       uid = my_getpwnam(argv[optind]);
-               }
-       } else {
-               error_msg_and_die(too_few_args);
+       argv += optind;
+
+       /* First, check if there is a group name here */
+       if ((groupName = strchr(*argv, '.')) == NULL) {
+               groupName = strchr(*argv, ':');
+       }
+
+       gid = -1;
+       if (groupName) {
+               *groupName++ = '\0';
+               gid = get_ug_id(groupName, my_getgrnam);
        }
 
+       /* Now check for the username */
+       uid = get_ug_id(*argv, my_getpwnam);
+
+       ++argv;
+       
        /* Ok, ready to do the deed now */
-       while (++optind < argc) {
-               if (! recursive_action (argv[optind], recursiveFlag, FALSE, FALSE, 
-                                       fileAction, fileAction, NULL)) {
-                       return EXIT_FAILURE;
+       do {
+               if (! recursive_action (*argv, (flags & FLAG_R), FALSE, FALSE, 
+                                                               fileAction, fileAction, NULL)) {
+                       retval = EXIT_FAILURE;
                }
-       }
-       return EXIT_SUCCESS;
+       } while (*++argv);
 
+       return retval;
 }
 
 /*
index ba3e5f8..01e4d56 100644 (file)
@@ -21,6 +21,8 @@
  *
  */
 
+/* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <unistd.h>
 
 int chroot_main(int argc, char **argv)
 {
-       char *prog;
-
-       if ((argc < 2) || (**(argv + 1) == '-')) {
-               show_usage();
+       if (argc < 2) {
+               bb_show_usage();
        }
-       argc--;
-       argv++;
 
+       ++argv;
        if (chroot(*argv) || (chdir("/"))) {
-               perror_msg_and_die("cannot change root directory to %s", *argv);
+               bb_perror_msg_and_die("cannot change root directory to %s", *argv);
        }
 
-       argc--;
-       argv++;
-       if (argc >= 1) {
-               prog = *argv;
-               execvp(*argv, argv);
-       } else {
-#if defined shell_main && defined CONFIG_FEATURE_SH_STANDALONE_SHELL
-               char shell[] = "/bin/sh";
-               char *shell_argv[2] = { shell, NULL };
-               applet_name = shell;
-               shell_main(1, shell_argv);
-               return EXIT_SUCCESS;
-#else
-               prog = getenv("SHELL");
-               if (!prog)
-                       prog = "/bin/sh";
-               execlp(prog, prog, NULL);
-#endif
+       ++argv;
+       if (argc == 2) {
+               argv -= 2;
+               if (!(*argv = getenv("SHELL"))) {
+                       *argv = (char *) "/bin/sh";
+               }
+               argv[1] = (char *) "-i";
        }
-       perror_msg_and_die("cannot execute %s", prog);
 
+       execvp(*argv, argv);
+       bb_perror_msg_and_die("cannot execute %s", *argv);
 }
-
-
-/*
-Local Variables:
-c-file-style: "linux"
-c-basic-offset: 4
-tab-width: 4
-End:
-*/
index 07bf3be..43dbc84 100644 (file)
  *
  */
 
+/* BB_AUDIT SUSv3 (virtually) compliant -- uses nicer GNU format for -l. */
+/* http://www.opengroup.org/onlinepubs/007904975/utilities/cmp.html */
+
+/* Mar 16, 2003      Manuel Novoa III   (mjn3@codepoet.org)
+ *
+ * Original version majorly reworked for SUSv3 compliance, bug fixes, and
+ * size optimizations.  Changes include:
+ * 1) Now correctly distingusishes between errors and actual file differences.
+ * 2) Proper handling of '-' args.
+ * 3) Actual error checking of i/o.
+ * 4) Accept SUSv3 -l option.  Note that we use the slightly nicer gnu format
+ *    in the '-l' case.
+ */
+
 #include <stdio.h>
-#include <string.h>
-#include <errno.h>
 #include <stdlib.h>
-#include <getopt.h>
+#include <unistd.h>
 #include "busybox.h"
 
+static FILE *cmp_xfopen_input(const char *filename)
+{
+       FILE *fp;
+
+       if ((fp = bb_wfopen_input(filename)) != NULL) {
+               return fp;
+       }
+
+       exit(bb_default_error_retval);  /* We already output an error message. */
+}
+
+static const char fmt_eof[] = "cmp: EOF on %s\n";
+static const char fmt_differ[] = "%s %s differ: char %d, line %d\n";
+#if 0
+static const char fmt_l_opt[] = "%.0s%.0s%d %o %o\n";  /* SUSv3 format */
+#else
+static const char fmt_l_opt[] = "%.0s%.0s%d %3o %3o\n";        /* nicer gnu format */
+#endif
+
+static const char opt_chars[] = "sl";
+
+enum {
+       OPT_s = 1,
+       OPT_l = 2
+};
+
 int cmp_main(int argc, char **argv)
 {
-       FILE *fp1 = NULL, *fp2 = stdin;
-       char *filename1, *filename2 = "-";
-       int c, c1, c2, char_pos = 1, line_pos = 1, silent = FALSE;
-
-       while ((c = getopt(argc, argv, "s")) != EOF) {
-               switch (c) {
-                       case 's':
-                               silent = TRUE;
-                               break;
-                       default:
-                               show_usage();
-               }
+       FILE *fp1, *fp2, *outfile = stdout;
+       const char *filename1, *filename2;
+       const char *fmt;
+       int c1, c2, char_pos, line_pos;
+       int opt_flags;
+       int exit_val = 0;
+
+       bb_default_error_retval = 2;    /* 1 is returned if files are different. */
+
+       opt_flags = bb_getopt_ulflags(argc, argv, opt_chars);
+
+       if ((opt_flags == 3) || (((unsigned int)(--argc - optind)) > 1)) {
+               bb_show_usage();
        }
 
-       filename1 = argv[optind];
-       switch (argc - optind) {
-               case 2:
-                       fp2 = xfopen(filename2 = argv[optind + 1], "r");
-               case 1:
-                       fp1 = xfopen(filename1, "r");
-                       break;
-               default:
-                       show_usage();
+       fp1 = cmp_xfopen_input(filename1 = *(argv += optind));
+
+       filename2 = "-";
+       if (*++argv) {
+               filename2 = *argv;
        }
+       fp2 = cmp_xfopen_input(filename2);
 
+       if (fp1 == fp2) {                       /* Paranioa check... stdin == stdin? */
+               /* Note that we don't bother reading stdin.  Neither does gnu wc.
+                * But perhaps we should, so that other apps down the chain don't
+                * get the input.  Consider 'echo hello | (cmp - - && cat -)'.
+                */
+               return 0;
+       }
+
+       fmt = fmt_differ;
+       if (opt_flags == OPT_l) {
+               fmt = fmt_l_opt;
+       }
+
+       char_pos = 0;
+       line_pos = 1;
        do {
-               c1 = fgetc(fp1);
-               c2 = fgetc(fp2);
-               if (c1 != c2) {
-                       if (silent)
-                               return EXIT_FAILURE;
-                       if (c1 == EOF)
-                               printf("EOF on %s\n", filename1);
-                       else if (c2 == EOF)
-                               printf("EOF on %s\n", filename2);
-                       else
-                               printf("%s %s differ: char %d, line %d\n", filename1, filename2,
-                                               char_pos, line_pos);
-                       return EXIT_FAILURE;
+               c1 = getc(fp1);
+               c2 = getc(fp2);
+               ++char_pos;
+               if (c1 != c2) {                 /* Remember -- a read error may have occurred. */
+                       exit_val = 1;           /* But assume the files are different for now. */
+                       if (c2 == EOF) {
+                               /* We know that fp1 isn't at EOF or in an error state.  But to
+                                * save space below, things are setup to expect an EOF in fp1
+                                * if an EOF occurred.  So, swap things around.
+                                */
+                               fp1 = fp2;
+                               filename1 = filename2;
+                               c1 = c2;
+                       }
+                       if (c1 == EOF) {
+                               bb_xferror(fp1, filename1);
+                               fmt = fmt_eof;  /* Well, no error, so it must really be EOF. */
+                               outfile = stderr;
+                               /* There may have been output to stdout (option -l), so
+                                * make sure we fflush before writing to stderr. */
+                               bb_xfflush_stdout();
+                       }
+                       if (opt_flags != OPT_s) {
+                               if (opt_flags == OPT_l) {
+                                       line_pos = c1;  /* line_pos is unused in the -l case. */
+                               }
+                               bb_fprintf(outfile, fmt, filename1, filename2, char_pos, line_pos, c2);
+                               if (opt_flags) {        /* This must be -l since not -s. */
+                                       /* If we encountered and EOF, the while check will catch it. */
+                                       continue;
+                               }
+                       }
+                       break;
+               }
+               if (c1 == '\n') {
+                       ++line_pos;
                }
-               char_pos++;
-               if (c1 == '\n')
-                       line_pos++;
        } while (c1 != EOF);
 
-       return EXIT_SUCCESS;
+       bb_xferror(fp1, filename1);
+       bb_xferror(fp2, filename2);
+
+       bb_fflush_stdout_and_exit(exit_val);
 }
index 8f8fe5e..c5dd31e 100644 (file)
@@ -2,7 +2,6 @@
 /*
  * Mini cp implementation for busybox
  *
- *
  * Copyright (C) 2000 by Matt Kraai <kraai@alumni.carnegiemellon.edu>
  *
  * This program is free software; you can redistribute it and/or modify
  *
  */
 
+/* BB_AUDIT SUSv3 defects - unsupported options -H, -L, and -P. */
+/* BB_AUDIT GNU defects - only extension options supported are -a and -d.  */
+/* http://www.opengroup.org/onlinepubs/007904975/utilities/cp.html */
+
+/* Mar 16, 2003      Manuel Novoa III   (mjn3@codepoet.org)
+ *
+ * Size reduction.
+ */
+
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
 #include <errno.h>
 #include <dirent.h>
 #include <stdlib.h>
-
+#include <assert.h>
 #include "busybox.h"
+#include "libcoreutils/coreutils.h"
+
+static const char cp_opts[] = "pdRfia";        /* WARNING!! ORDER IS IMPORTANT!! */
 
 extern int cp_main(int argc, char **argv)
 {
+       struct stat source_stat;
+       struct stat dest_stat;
+       const char *last;
+       const char *dest;
+       int s_flags;
+       int d_flags;
+       int flags;
        int status = 0;
-       int opt;
-       int flags = FILEUTILS_DEREFERENCE;
-       int i;
 
-       while ((opt = getopt(argc, argv, "adfipR")) != -1)
-               switch (opt) {
-               case 'a':
-                       flags |= FILEUTILS_PRESERVE_STATUS | FILEUTILS_RECUR;
-                       /* fallthrough */
-               case 'd':
-                       flags &= ~FILEUTILS_DEREFERENCE;
-                       break;
-               case 'f':
-                       flags |= FILEUTILS_FORCE;
-                       break;
-               case 'i':
-                       flags |= FILEUTILS_INTERACTIVE;
-                       break;
-               case 'p':
-                       flags |= FILEUTILS_PRESERVE_STATUS;
-                       break;
-               case 'R':
-                       flags |= FILEUTILS_RECUR;
-                       break;
-               default:
-                       show_usage();
-               }
-       
-       if (optind + 2 > argc)
-               show_usage();
+       /* Since these are enums, #if tests will not work.  So use assert()s. */
+       assert(FILEUTILS_PRESERVE_STATUS == 1);
+       assert(FILEUTILS_DEREFERENCE == 2);
+       assert(FILEUTILS_RECUR == 4);
+       assert(FILEUTILS_FORCE == 8);
+       assert(FILEUTILS_INTERACTIVE == 16);
 
-       /* If there are only two arguments and...  */
-       if (optind + 2 == argc) {
-               struct stat source_stat;
-               struct stat dest_stat;
-               int source_exists = 1;
-               int dest_exists = 1;
+       flags = bb_getopt_ulflags(argc, argv, cp_opts);
 
-               if ((!(flags & FILEUTILS_DEREFERENCE) &&
-                               lstat(argv[optind], &source_stat) < 0) ||
-                               ((flags & FILEUTILS_DEREFERENCE) &&
-                                stat(argv[optind], &source_stat))) {
-                       if (errno != ENOENT)
-                               perror_msg_and_die("unable to stat `%s'", argv[optind]);
-                       source_exists = 0;
-               }
+       if (flags & 32) {
+               flags |= (FILEUTILS_PRESERVE_STATUS | FILEUTILS_RECUR | FILEUTILS_DEREFERENCE);
+       }
+
+       flags ^= FILEUTILS_DEREFERENCE;         /* The sense of this flag was reversed. */
+
+       if (optind + 2 > argc) {
+               bb_show_usage();
+       }
+
+       last = argv[argc - 1];
+       argv += optind;
 
-               if (stat(argv[optind + 1], &dest_stat) < 0) {
-                       if (errno != ENOENT)
-                               perror_msg_and_die("unable to stat `%s'", argv[optind + 1]);
-                       dest_exists = 0;
+       /* If there are only two arguments and...  */
+       if (optind + 2 == argc) {
+               s_flags = cp_mv_stat2(*argv, &source_stat,
+                                                                (flags & FILEUTILS_DEREFERENCE) ? stat : lstat);
+               if ((s_flags < 0) || ((d_flags = cp_mv_stat(last, &dest_stat)) < 0)) {
+                       exit(EXIT_FAILURE);
                }
-               
                /* ...if neither is a directory or...  */
-               if (((!source_exists || !S_ISDIR(source_stat.st_mode)) &&
-                               (!dest_exists || !S_ISDIR(dest_stat.st_mode))) ||
-                               /* ...recursing, the first is a directory, and the
-                                * second doesn't exist, then... */
-                               ((flags & FILEUTILS_RECUR) && S_ISDIR(source_stat.st_mode) &&
-                                !dest_exists)) {
+               if ( !((s_flags | d_flags) & 2) ||
+                       /* ...recursing, the 1st is a directory, and the 2nd doesn't exist... */
+                       /* ((flags & FILEUTILS_RECUR) && (s_flags & 2) && !d_flags) */
+                       /* Simplify the above since FILEUTILS_RECUR >> 1 == 2. */
+                       ((((flags & FILEUTILS_RECUR) >> 1) & s_flags) && !d_flags)
+               ) {
                        /* ...do a simple copy.  */
-                       if (copy_file(argv[optind], argv[optind + 1], flags) < 0)
-                               status = 1;
-                       return status;
+                               dest = last;
+                               goto DO_COPY; /* Note: optind+2==argc implies argv[1]==last below. */
                }
        }
 
-       for (i = optind; i < argc - 1; i++) {
-               char *dest = concat_path_file(argv[argc - 1],
-                               get_last_path_component(argv[i]));
-               if (copy_file(argv[i], dest, flags) < 0)
+       do {
+               dest = concat_path_file(last, bb_get_last_path_component(*argv));
+       DO_COPY:
+               if (copy_file(*argv, dest, flags) < 0) {
                        status = 1;
-               free(dest);
-       }
+               }
+               if (*++argv == last) {
+                       break;
+               }
+               free((void *) dest);
+       } while (1);
 
-       return status;
+       exit(status);
 }
index 3ed2648..c24cf66 100644 (file)
@@ -92,7 +92,7 @@ static void parse_lists(char *lists)
                } else {
                        s = strtoul(ntok, &junk, 10);
                        if(*junk != '\0' || s < 0)
-                               error_msg_and_die("invalid byte or field list");
+                               bb_error_msg_and_die("invalid byte or field list");
                        
                        /* account for the fact that arrays are zero based, while the user
                         * expects the first char on the line to be char # 1 */
@@ -109,7 +109,7 @@ static void parse_lists(char *lists)
                } else {
                        e = strtoul(ntok, &junk, 10);
                        if(*junk != '\0' || e < 0)
-                               error_msg_and_die("invalid byte or field list");
+                               bb_error_msg_and_die("invalid byte or field list");
                        /* if the user specified and end position of 0, that means "til the
                         * end of the line */
                        if (e == 0)
@@ -121,7 +121,7 @@ static void parse_lists(char *lists)
 
                /* if there's something left to tokenize, the user past an invalid list */
                if (ltok)
-                       error_msg_and_die("invalid byte or field list");
+                       bb_error_msg_and_die("invalid byte or field list");
                
                /* add the new list */
                cut_lists = xrealloc(cut_lists, sizeof(struct cut_list) * (++nlists));
@@ -131,7 +131,7 @@ static void parse_lists(char *lists)
 
        /* make sure we got some cut positions out of all that */
        if (nlists == 0)
-               error_msg_and_die("missing list of positions");
+               bb_error_msg_and_die("missing list of positions");
 
        /* now that the lists are parsed, we need to sort them to make life easier
         * on us when it comes time to print the chars / fields / lines */
@@ -267,8 +267,7 @@ static void cut_file(FILE *file)
        unsigned int linenum = 0; /* keep these zero-based to be consistent */
 
        /* go through every line in the file */
-       while ((line = get_line_from_file(file)) != NULL) {
-               chomp(line);
+       while ((line = bb_get_chomped_line_from_file(file)) != NULL) {
 
                /* cut based on chars/bytes XXX: only works when sizeof(char) == byte */
                if (part == 'c' || part == 'b')
@@ -299,14 +298,14 @@ extern int cut_main(int argc, char **argv)
                        case 'f':
                                /* make sure they didn't ask for two types of lists */
                                if (part != 0) {
-                                       error_msg_and_die("only one type of list may be specified");
+                                       bb_error_msg_and_die("only one type of list may be specified");
                                }
                                part = (char)opt;
                                parse_lists(optarg);
                                break;
                        case 'd':
                                if (strlen(optarg) > 1) {
-                                       error_msg_and_die("the delimiter must be a single character");
+                                       bb_error_msg_and_die("the delimiter must be a single character");
                                }
                                delim = optarg[0];
                                break;
@@ -320,17 +319,17 @@ extern int cut_main(int argc, char **argv)
        }
 
        if (part == 0) {
-               error_msg_and_die("you must specify a list of bytes, characters, or fields");
+               bb_error_msg_and_die("you must specify a list of bytes, characters, or fields");
        }
 
        /*  non-field (char or byte) cutting has some special handling */
        if (part != 'f') {
                if (supress_non_delimited_lines) {
-                       error_msg_and_die("suppressing non-delimited lines makes sense"
+                       bb_error_msg_and_die("suppressing non-delimited lines makes sense"
                                        " only when operating on fields");
                }
                if (delim != '\t' && part != 'f') {
-                       error_msg_and_die("a delimiter may be specified only when operating on fields");
+                       bb_error_msg_and_die("a delimiter may be specified only when operating on fields");
                }
        }
 
@@ -344,7 +343,7 @@ extern int cut_main(int argc, char **argv)
                int i;
                FILE *file;
                for (i = optind; i < argc; i++) {
-                       file = wfopen(argv[i], "r");
+                       file = bb_wfopen(argv[i], "r");
                        if(file) {
                                cut_file(file);
                                fclose(file);
index d68c04a..afbedb9 100644 (file)
@@ -53,7 +53,7 @@ static struct tm *date_conv_time(struct tm *tm_time, const char *t_string)
                                &(tm_time->tm_year));
 
        if (nr < 4 || nr > 5) {
-               error_msg_and_die(invalid_date, t_string);
+               bb_error_msg_and_die(bb_msg_invalid_date, t_string);
        }
 
        /* correct for century  - minor Y2K problem here? */
@@ -108,7 +108,7 @@ static struct tm *date_conv_ftime(struct tm *tm_time, const char *t_string)
                t.tm_year -= 1900;      /* Adjust years */
                t.tm_mon -= 1;  /* Adjust dates from 1-12 to 0-11 */
        } else {
-               error_msg_and_die(invalid_date, t_string);
+               bb_error_msg_and_die(bb_msg_invalid_date, t_string);
        }
        *tm_time = t;
        return (tm_time);
@@ -145,25 +145,25 @@ int date_main(int argc, char **argv)
                case 's':
                        set_time = 1;
                        if ((date_str != NULL) || ((date_str = optarg) == NULL)) {
-                               show_usage();
+                               bb_show_usage();
                        }
                        break;
                case 'u':
                        utc = 1;
                        if (putenv("TZ=UTC0") != 0)
-                               error_msg_and_die(memory_exhausted);
+                               bb_error_msg_and_die(bb_msg_memory_exhausted);
                        break;
                case 'd':
                        use_arg = 1;
                        if ((date_str != NULL) || ((date_str = optarg) == NULL))
-                               show_usage();
+                               bb_show_usage();
                        break;
 #ifdef CONFIG_FEATURE_DATE_ISOFMT
                case 'I':
                        if (!optarg)
                                ifmt = 1;
                        else {
-                               int ifmt_len = xstrlen(optarg);
+                               int ifmt_len = bb_strlen(optarg);
 
                                if ((ifmt_len <= 4)
                                        && (strncmp(optarg, "date", ifmt_len) == 0)) {
@@ -180,11 +180,11 @@ int date_main(int argc, char **argv)
                                }
                        }
                        if (ifmt) {
-                               break;  /* else show_usage(); */
+                               break;  /* else bb_show_usage(); */
                        }
 #endif
                default:
-                       show_usage();
+                       bb_show_usage();
                }
        }
 
@@ -220,15 +220,15 @@ int date_main(int argc, char **argv)
                /* Correct any day of week and day of year etc. fields */
                tm = mktime(&tm_time);
                if (tm < 0) {
-                       error_msg_and_die(invalid_date, date_str);
+                       bb_error_msg_and_die(bb_msg_invalid_date, date_str);
                }
                if (utc && (putenv("TZ=UTC0") != 0)) {
-                       error_msg_and_die(memory_exhausted);
+                       bb_error_msg_and_die(bb_msg_memory_exhausted);
                }
 
                /* if setting time, set it */
                if (set_time && (stime(&tm) < 0)) {
-                       perror_msg("cannot set date");
+                       bb_perror_msg("cannot set date");
                }
        }
 
index 8c7272b..1150861 100644 (file)
@@ -62,19 +62,19 @@ int dd_main(int argc, char **argv)
        int ifd;
        int ofd;
        int i;
-       char *infile = NULL;
-       char *outfile = NULL;
+       const char *infile = NULL;
+       const char *outfile = NULL;
        char *buf;
 
        for (i = 1; i < argc; i++) {
                if (strncmp("bs=", argv[i], 3) == 0)
-                       bs = parse_number(argv[i]+3, dd_suffixes);
+                       bs = bb_xparse_number(argv[i]+3, dd_suffixes);
                else if (strncmp("count=", argv[i], 6) == 0)
-                       count = parse_number(argv[i]+6, dd_suffixes);
+                       count = bb_xparse_number(argv[i]+6, dd_suffixes);
                else if (strncmp("seek=", argv[i], 5) == 0)
-                       seek = parse_number(argv[i]+5, dd_suffixes);
+                       seek = bb_xparse_number(argv[i]+5, dd_suffixes);
                else if (strncmp("skip=", argv[i], 5) == 0)
-                       skip = parse_number(argv[i]+5, dd_suffixes);
+                       skip = bb_xparse_number(argv[i]+5, dd_suffixes);
                else if (strncmp("if=", argv[i], 3) == 0)
                        infile = argv[i]+3;
                else if (strncmp("of=", argv[i], 3) == 0)
@@ -92,7 +92,7 @@ int dd_main(int argc, char **argv)
                                        noerror = TRUE;
                                        buf += 7;
                                } else {
-                                       error_msg_and_die("invalid conversion `%s'", argv[i]+5);
+                                       bb_error_msg_and_die("invalid conversion `%s'", argv[i]+5);
                                }
                                if (buf[0] == '\0')
                                        break;
@@ -100,18 +100,18 @@ int dd_main(int argc, char **argv)
                                        buf++;
                        }
                } else
-                       show_usage();
+                       bb_show_usage();
        }
 
        buf = xmalloc(bs);
 
        if (infile != NULL) {
                if ((ifd = open(infile, O_RDONLY)) < 0) {
-                       perror_msg_and_die("%s", infile);
+                       bb_perror_msg_and_die("%s", infile);
                }
        } else {
                ifd = STDIN_FILENO;
-               infile = "standard input";
+               infile = bb_msg_standard_input;
        }
 
        if (outfile != NULL) {
@@ -122,7 +122,7 @@ int dd_main(int argc, char **argv)
                }
 
                if ((ofd = open(outfile, oflag, 0666)) < 0) {
-                       perror_msg_and_die("%s", outfile);
+                       bb_perror_msg_and_die("%s", outfile);
                }
 
                if (seek && trunc) {
@@ -131,24 +131,24 @@ int dd_main(int argc, char **argv)
 
                                if (fstat (ofd, &st) < 0 || S_ISREG (st.st_mode) ||
                                                S_ISDIR (st.st_mode)) {
-                                       perror_msg_and_die("%s", outfile);
+                                       bb_perror_msg_and_die("%s", outfile);
                                }
                        }
                }
        } else {
                ofd = STDOUT_FILENO;
-               outfile = "standard output";
+               outfile = bb_msg_standard_output;
        }
 
        if (skip) {
                if (lseek(ifd, skip * bs, SEEK_CUR) < 0) {
-                       perror_msg_and_die("%s", infile);
+                       bb_perror_msg_and_die("%s", infile);
                }
        }
 
        if (seek) {
                if (lseek(ofd, seek * bs, SEEK_CUR) < 0) {
-                       perror_msg_and_die("%s", outfile);
+                       bb_perror_msg_and_die("%s", outfile);
                }
        }
 
@@ -161,9 +161,9 @@ int dd_main(int argc, char **argv)
                if (n < 0) {
                        if (noerror) {
                                n = bs;
-                               perror_msg("%s", infile);
+                               bb_perror_msg("%s", infile);
                        } else {
-                               perror_msg_and_die("%s", infile);
+                               bb_perror_msg_and_die("%s", infile);
                        }
                }
                if (n == 0) {
@@ -178,9 +178,9 @@ int dd_main(int argc, char **argv)
                        memset(buf + n, '\0', bs - n);
                        n = bs;
                }
-               n = full_write(ofd, buf, n);
+               n = bb_full_write(ofd, buf, n);
                if (n < 0) {
-                       perror_msg_and_die("%s", outfile);
+                       bb_perror_msg_and_die("%s", outfile);
                }
                if (n == bs) {
                        out_full++;
@@ -190,15 +190,16 @@ int dd_main(int argc, char **argv)
        }
 
        if (close (ifd) < 0) {
-               perror_msg_and_die("%s", infile);
+               bb_perror_msg_and_die("%s", infile);
        }
 
        if (close (ofd) < 0) {
-               perror_msg_and_die("%s", outfile);
+               bb_perror_msg_and_die("%s", outfile);
        }
 
-       fprintf(stderr, "%ld+%ld records in\n", (long)in_full, (long)in_part);
-       fprintf(stderr, "%ld+%ld records out\n", (long)out_full, (long)out_part);
+       fprintf(stderr, "%ld+%ld records in\n%ld+%ld records out\n",
+                       (long)in_full, (long)in_part,
+                       (long)out_full, (long)out_part);
 
        return EXIT_SUCCESS;
 }
index 0e9e5d6..7d007a0 100644 (file)
  *
  */
 
+/* BB_AUDIT SUSv3 _NOT_ compliant -- options -P and -t missing.  Also blocksize. */
+/* http://www.opengroup.org/onlinepubs/007904975/utilities/df.html */
+
+/* Mar 16, 2003      Manuel Novoa III   (mjn3@codepoet.org)
+ *
+ * Size reduction.  Removed floating point dependency.  Added error checking
+ * on output.  Output stats on 0-sized filesystems if specificly listed on
+ * the command line.  Properly round *-blocks, Used, and Available quantities.
+ */
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
 #include <mntent.h>
 #include <sys/vfs.h>
-#include <getopt.h>
 #include "busybox.h"
 
-extern const char mtab_file[]; /* Defined in utility.c */
-#ifdef CONFIG_FEATURE_HUMAN_READABLE
-static unsigned long df_disp_hr = KILOBYTE; 
+#ifndef CONFIG_FEATURE_HUMAN_READABLE
+static long kscale(long b, long bs)
+{
+       return ( b * (long long) bs + KILOBYTE/2 ) / KILOBYTE;
+}
 #endif
 
-static int do_df(char *device, const char *mount_point)
+extern int df_main(int argc, char **argv)
 {
-       struct statfs s;
        long blocks_used;
        long blocks_percent_used;
-
-       if (statfs(mount_point, &s) != 0) {
-               perror_msg("%s", mount_point);
-               return FALSE;
-       }
-
-       if (s.f_blocks > 0) {
-               blocks_used = s.f_blocks - s.f_bfree;
-               if(blocks_used == 0)
-                       blocks_percent_used = 0;
-               else {
-                       blocks_percent_used = (long)
-                         (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5);
-               }
-               if (strcmp(device, "/dev/root") == 0) {
-                       /* Adjusts device to be the real root device,
-                        * or leaves device alone if it can't find it */
-                       device = find_real_root_device_name(device);
-                       if(device==NULL)
-                               return FALSE;
-               }
 #ifdef CONFIG_FEATURE_HUMAN_READABLE
-               printf("%-20s %9s ", device,
-                               make_human_readable_str(s.f_blocks, s.f_bsize, df_disp_hr));
-
-               printf("%9s ",
-                               make_human_readable_str( (s.f_blocks - s.f_bfree), s.f_bsize, df_disp_hr));
-
-               printf("%9s %3ld%% %s\n",
-                               make_human_readable_str(s.f_bavail, s.f_bsize, df_disp_hr),
-                               blocks_percent_used, mount_point);
-#else
-               printf("%-20s %9ld %9ld %9ld %3ld%% %s\n",
-                               device,
-                               (long) (s.f_blocks * (s.f_bsize / (double)KILOBYTE)),
-                               (long) ((s.f_blocks - s.f_bfree)*(s.f_bsize/(double)KILOBYTE)),
-                               (long) (s.f_bavail * (s.f_bsize / (double)KILOBYTE)),
-                               blocks_percent_used, mount_point);
+       unsigned long df_disp_hr = KILOBYTE; 
 #endif
-       }
-
-       return TRUE;
-}
-
-extern int df_main(int argc, char **argv)
-{
        int status = EXIT_SUCCESS;
-       int opt = 0;
-       int i = 0;
-       char disp_units_hdr[80] = "1k-blocks"; /* default display is kilobytes */
+       int opt;
+       FILE *mount_table;
+       struct mntent *mount_entry;
+       struct statfs s;
+       static const char hdr_1k[] = "1k-blocks"; /* default display is kilobytes */;
+       const char *disp_units_hdr = hdr_1k;
 
        while ((opt = getopt(argc, argv, "k"
 #ifdef CONFIG_FEATURE_HUMAN_READABLE
@@ -101,52 +72,106 @@ extern int df_main(int argc, char **argv)
 #ifdef CONFIG_FEATURE_HUMAN_READABLE
                        case 'h':
                                df_disp_hr = 0;
-                               strcpy(disp_units_hdr, "     Size");
+                               disp_units_hdr = "     Size";
                                break;
                        case 'm':
                                df_disp_hr = MEGABYTE;
-                               strcpy(disp_units_hdr, "1M-blocks");
+                               disp_units_hdr = "1M-blocks";
                                break;
 #endif
                        case 'k':
                                /* default display is kilobytes */
+#ifdef CONFIG_FEATURE_HUMAN_READABLE
+                               df_disp_hr = KILOBYTE;
+                               disp_units_hdr =  hdr_1k;
+#endif
                                break;
                        default:
-                                         show_usage();
+                                         bb_show_usage();
                }
        }
 
-       printf("%-20s %-14s %s %s %s %s\n", "Filesystem", disp_units_hdr,
-              "Used", "Available", "Use%", "Mounted on");
+       bb_printf("Filesystem%11s%-15sUsed Available Use%% Mounted on\n",
+                         "", disp_units_hdr);
 
-       if(optind < argc) {
-               struct mntent *mount_entry;
-               for(i = optind; i < argc; i++)
-               {
-                       if ((mount_entry = find_mount_point(argv[i], mtab_file)) == 0) {
-                               error_msg("%s: can't find mount point.", argv[i]);
-                               status = EXIT_FAILURE;
-                       } else if (!do_df(mount_entry->mnt_fsname, mount_entry->mnt_dir))
-                               status = EXIT_FAILURE;
+       mount_table = NULL;
+       argv += optind;
+       if (optind >= argc) {
+               if (!(mount_table = setmntent(bb_path_mtab_file, "r"))) {
+                       bb_perror_msg_and_die(bb_path_mtab_file);
                }
-       } else {
-               FILE *mount_table;
-               struct mntent *mount_entry;
+       }
 
-               mount_table = setmntent(mtab_file, "r");
-               if (mount_table == 0) {
-                       perror_msg("%s", mtab_file);
-                       return EXIT_FAILURE;
-               }
+       do {
+               const char *device;
+               const char *mount_point;
 
-               while ((mount_entry = getmntent(mount_table))) {
-                       if (!do_df(mount_entry->mnt_fsname, mount_entry->mnt_dir))
+               if (mount_table) {
+                       if (!(mount_entry = getmntent(mount_table))) {
+                               endmntent(mount_table);
+                               break;
+                       }
+               } else {
+                       if (!(mount_point = *argv++)) {
+                               break;
+                       }
+                       if (!(mount_entry = find_mount_point(mount_point, bb_path_mtab_file))) {
+                               bb_error_msg("%s: can't find mount point.", mount_point);
+                       SET_ERROR:
                                status = EXIT_FAILURE;
+                               continue;
+                       }
                }
-               endmntent(mount_table);
-       }
 
-       return status;
+               device = mount_entry->mnt_fsname;
+               mount_point = mount_entry->mnt_dir;
+
+               if (statfs(mount_point, &s) != 0) {
+                       bb_perror_msg("%s", mount_point);
+                       goto SET_ERROR;
+               }
+               
+               if ((s.f_blocks > 0) || !mount_table){
+                       blocks_used = s.f_blocks - s.f_bfree;
+                       blocks_percent_used = 0;
+                       if (blocks_used + s.f_bavail) {
+                               blocks_percent_used = (((long long) blocks_used) * 100
+                                                                          + (blocks_used + s.f_bavail)/2
+                                                                          ) / (blocks_used + s.f_bavail);
+                       }
+                       
+                       if (strcmp(device, "/dev/root") == 0) {
+                               /* Adjusts device to be the real root device,
+                               * or leaves device alone if it can't find it */
+                               if ((device = find_real_root_device_name(device)) != NULL) {
+                                       goto SET_ERROR;
+                               }
+                       }