Added dos2unix, unix2dos, and unrpm.c thanks to robotti@metconnect.com.
authorEric Andersen <andersen@codepoet.org>
Wed, 20 Sep 2000 19:22:26 +0000 (19:22 -0000)
committerEric Andersen <andersen@codepoet.org>
Wed, 20 Sep 2000 19:22:26 +0000 (19:22 -0000)
 -Erik

13 files changed:
Changelog
applets/busybox.c
applets/usage.c
busybox.c
busybox.def.h
coreutils/dos2unix.c [new file with mode: 0644]
docs/busybox.pod
docs/busybox.sgml
dos2unix.c [new file with mode: 0644]
internal.h
unix2dos.c [new file with mode: 0644]
unrpm.c [new file with mode: 0644]
usage.c

index 379b4b0..416483b 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -20,6 +20,7 @@
        * Added 'getopt' from "Alfred M. Szmidt" <ams@trillian.itslinux.org>
        * Fixed chmod option parsing so things like 'chmod -r /tmp/file'
            wouldn't work (since it thought -r was an option).  Doh!
+       * Added dos2unix, unix2dos, and unrpm.c thanks to robotti@metconnect.com.
 
 
 
index a7c5d37..43871b7 100644 (file)
@@ -64,6 +64,9 @@ const struct BB_applet applets[] = {
 #ifdef BB_DMESG
        {"dmesg", dmesg_main, _BB_DIR_BIN, dmesg_usage},
 #endif
+#ifdef BB_DOS2UNIX
+       {"dos2unix", dos2unix_main, _BB_DIR_USR_BIN, dos2unix_usage},
+#endif
 #ifdef BB_DU
        {"du", du_main, _BB_DIR_USR_BIN, du_usage},
 #endif
@@ -313,6 +316,12 @@ const struct BB_applet applets[] = {
 #ifdef BB_UNIQ
        {"uniq", uniq_main, _BB_DIR_USR_BIN, uniq_usage},
 #endif
+#ifdef BB_UNIX2DOS
+       {"unix2dos", unix2dos_main, _BB_DIR_USR_BIN, unix2dos_usage},
+#endif
+#ifdef BB_UNRPM
+       {"unrpm", unrpm_main, _BB_DIR_USR_BIN, unrpm_usage},
+#endif
 #ifdef BB_UPDATE
        {"update", update_main, _BB_DIR_SBIN, update_usage},
 #endif
index cee2702..4a3d734 100644 (file)
@@ -207,6 +207,15 @@ const char dmesg_usage[] =
        ;
 #endif
 
+#if defined BB_DOS2UNIX
+const char dos2unix_usage[] =
+       "dos2unix < dosfile > unixfile\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nConverts a text file from dos format to unix format.\n"
+#endif
+       ;
+#endif
+
 #if defined BB_DU
 const char du_usage[] =
        "du [OPTION]... [FILE]...\n"
@@ -1307,6 +1316,24 @@ const char uniq_usage[] =
        ;
 #endif
 
+#if defined BB_UNIX2DOS
+const char unix2dos_usage[] =
+       "unix2dos < unixfile > dosfile\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nConverts a text file from unix format to dos format.\n"
+#endif
+       ;
+#endif
+
+#if defined BB_UNRPM
+const char unrpm_usage[] =
+       "unrpm < package.rpm | gzip -d | cpio -idmuv\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nExtracts an rpm archive.\n"
+#endif
+       ;
+#endif
+
 #if defined BB_UPDATE
 const char update_usage[] =
        "update [options]\n"
index a7c5d37..43871b7 100644 (file)
--- a/busybox.c
+++ b/busybox.c
@@ -64,6 +64,9 @@ const struct BB_applet applets[] = {
 #ifdef BB_DMESG
        {"dmesg", dmesg_main, _BB_DIR_BIN, dmesg_usage},
 #endif
+#ifdef BB_DOS2UNIX
+       {"dos2unix", dos2unix_main, _BB_DIR_USR_BIN, dos2unix_usage},
+#endif
 #ifdef BB_DU
        {"du", du_main, _BB_DIR_USR_BIN, du_usage},
 #endif
@@ -313,6 +316,12 @@ const struct BB_applet applets[] = {
 #ifdef BB_UNIQ
        {"uniq", uniq_main, _BB_DIR_USR_BIN, uniq_usage},
 #endif
+#ifdef BB_UNIX2DOS
+       {"unix2dos", unix2dos_main, _BB_DIR_USR_BIN, unix2dos_usage},
+#endif
+#ifdef BB_UNRPM
+       {"unrpm", unrpm_main, _BB_DIR_USR_BIN, unrpm_usage},
+#endif
 #ifdef BB_UPDATE
        {"update", update_main, _BB_DIR_SBIN, update_usage},
 #endif
index c70948d..9d046ab 100644 (file)
@@ -23,6 +23,7 @@
 #define BB_DF
 #define BB_DIRNAME
 #define BB_DMESG
+#define BB_DOS2UNIX
 #define BB_DUTMP
 #define BB_DU
 #define BB_DUMPKMAP
@@ -98,6 +99,7 @@
 #define BB_TR
 #define BB_TRUE_FALSE
 #define BB_TTY
+#define BB_UNRPM
 #define BB_UPTIME
 #define BB_USLEEP
 #define BB_WC
 #define BB_UMOUNT
 #define BB_UNIQ
 #define BB_UNAME
+#define BB_UNIX2DOS
 #define BB_UPDATE
 #define BB_YES
 // End of Applications List
 #define BB_FEATURE_USE_INITTAB
 //
 //Enable init being called as /linuxrc
-//#define BB_FEATURE_LINUXRC
+#define BB_FEATURE_LINUXRC
 //
 //Have init enable core dumping for child processes (for debugging only) 
 //#define BB_FEATURE_INIT_COREDUMPS
 //#define BB_FEATURE_MOUNT_MTAB_SUPPORT
 //
 // Enable support for mounting remote NFS volumes
-//#define BB_FEATURE_NFSMOUNT
+#define BB_FEATURE_NFSMOUNT
 //
 // Enable support forced filesystem unmounting 
 // (i.e. in case of an unreachable NFS system).
diff --git a/coreutils/dos2unix.c b/coreutils/dos2unix.c
new file mode 100644 (file)
index 0000000..9634687
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    Mini dos2unix implementation for busybox
+    Copyright 1994,1995  Patrick Volkerding, Moorhead, Minnesota USA
+    All rights reserved.
+
+ Redistribution and use of this source code, with or without modification, is
+ permitted provided that the following condition is met:
+
+ 1. Redistributions of this source code must retain the above copyright
+    notice, this condition, and the following disclaimer.
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
+  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "internal.h"
+#include <stdio.h>
+
+int dos2unix_main( int argc, char **argv ) {
+       int c;
+       if (argc > 1) {
+               c = *argv[1];
+               if (c == '-') {
+                usage(dos2unix_usage);
+               } 
+       }
+       c = getchar();
+       while (c != EOF) {
+               /* Eat any \r's... they shouldn't be here */
+               while (c == '\r') c = getchar();
+               if (c == EOF) break;
+                putchar(c);
+                c = getchar();
+       } 
+       return 0;
+}
index fed8b57..5fd15ca 100644 (file)
@@ -55,16 +55,17 @@ terse runtime description of their behavior.
 
 Currently defined functions include:
 
-ar, basename, cat, chgrp, chmod, chown, chroot, chvt, clear, cp, cut, date,
-dc, dd, deallocvt, df, dirname, dmesg, du, dumpkmap, dutmp, echo, false, fbset,
-fdflush, find, free, freeramdisk, fsck.minix, getopt, grep, gunzip, gzip, halt,
-head, hostid, hostname, id, init, insmod, kill, killall, length, ln,
-loadacm, loadfont, loadkmap, logger, logname, ls, lsmod, makedevs, mkdir,
-mkfifo, mkfs.minix, mknod, mkswap, mktemp, more, mount, mt, mv, nc,
-nslookup, ping, poweroff, printf, ps, pwd, rdate, reboot, renice, reset, rm, rmdir, rmmod, sed,
-setkeycodes, sh, sleep, sort, swapoff, swapon, sync, syslogd, tail,
-tar, tee, telnet, test, touch, tr, true, tty, umount, uname, uniq, update,
-uptime, usleep, uudecode, uuencode, wc, which, whoami, yes, zcat, [
+ar, basename, cat, chgrp, chmod, chown, chroot, chvt, clear, cp, cut, date, dc,
+dd, deallocvt, df, dirname, dmesg, dos2unix, du, dumpkmap, dutmp, echo, false,
+fbset, fdflush, find, free, freeramdisk, fsck.minix, getopt, grep, gunzip,
+gzip, halt, head, hostid, hostname, id, init, insmod, kill, killall, length,
+ln, loadacm, loadfont, loadkmap, logger, logname, ls, lsmod, makedevs, mkdir,
+mkfifo, mkfs.minix, mknod, mkswap, mktemp, more, mount, mt, mv, nc, nslookup,
+ping, poweroff, printf, ps, pwd, rdate, reboot, renice, reset, rm, rmdir,
+rmmod, sed, setkeycodes, sh, sleep, sort, swapoff, swapon, sync, syslogd, tail,
+tar, tee, telnet, test, touch, tr, true, tty, umount, uname, uniq, unix2dos,
+unrpm, update, uptime, usleep, uudecode, uuencode, wc, which, whoami, yes,
+zcat, [
 
 -------------------------------
 
@@ -412,6 +413,14 @@ Print or controls the kernel ring buffer.
 
 -------------------------------
 
+=item dos2unix
+
+Usage: dos2unix < dosfile > unixfile
+
+Converts a text file from dos format to unix format.
+
+-------------------------------
+
 =item du
 
 Usage: du [OPTION]... [FILE]...
@@ -1929,6 +1938,22 @@ Example:
 
 -------------------------------
 
+=item unix2dos
+
+Usage: unix2dos < unixfile > dosfile
+
+Converts a text file from unix format to dos format.
+
+-------------------------------
+
+=item unrpm
+
+Usage: unrpm < package.rpm | gzip -d | cpio -idmuv
+
+Extracts an rpm archive.
+
+-------------------------------
+
 =item update
 
 Usage: update [options]
@@ -2157,4 +2182,4 @@ Enrique Zanardi <ezanardi@ull.es>
 
 =cut
 
-# $Id: busybox.pod,v 1.68 2000/09/15 17:24:13 proski Exp $
+# $Id: busybox.pod,v 1.69 2000/09/20 19:22:26 andersen Exp $
index f4161f5..e8a91fa 100644 (file)
@@ -1,5 +1,4 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
-]>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [ ]>
 <book id="BusyBoxDocumentation">
  <bookinfo>
   <title>BusyBox - The Swiss Army Knife of Embedded Linux</title>
                </para>
        </sect1>
 
+       <sect1 id="dos2unix">
+           <title>dos2unix</title>
+
+               <para>
+               Usage: dos2unix < dosfile > unixfile
+               </para>
+
+               <para>
+               Converts a text file from dos format to unix format.
+               </para>
+
+       </sect1>
+
        <sect1 id="du">
            <title>du</title>
 
                </screen>
                </para>
        </sect1>
+       
+       <sect1 id="unix2dos">
+           <title>unix2dos</title>
+
+               <para>
+               Usage: unix2dos < unixfile > dosfile
+               </para>
+
+               <para>
+               Converts a text file from unix format to dos format.
+               </para>
+
+       </sect1>
+
+       <sect1 id="unrpm">
+           <titleunrpmuniq</title>
+
+               <para>
+               Usage: unrpm < package.rpm | gzip -d | cpio -idmuv
+               </para>
+
+               <para>
+               Extracts an rpm archive.
+               </para>
+
+       </sect1>
 
        <sect1 id="update">
            <title>update</title>
diff --git a/dos2unix.c b/dos2unix.c
new file mode 100644 (file)
index 0000000..9634687
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    Mini dos2unix implementation for busybox
+    Copyright 1994,1995  Patrick Volkerding, Moorhead, Minnesota USA
+    All rights reserved.
+
+ Redistribution and use of this source code, with or without modification, is
+ permitted provided that the following condition is met:
+
+ 1. Redistributions of this source code must retain the above copyright
+    notice, this condition, and the following disclaimer.
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
+  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "internal.h"
+#include <stdio.h>
+
+int dos2unix_main( int argc, char **argv ) {
+       int c;
+       if (argc > 1) {
+               c = *argv[1];
+               if (c == '-') {
+                usage(dos2unix_usage);
+               } 
+       }
+       c = getchar();
+       while (c != EOF) {
+               /* Eat any \r's... they shouldn't be here */
+               while (c == '\r') c = getchar();
+               if (c == EOF) break;
+                putchar(c);
+                c = getchar();
+       } 
+       return 0;
+}
index b2034da..8d8e8ab 100644 (file)
@@ -126,6 +126,7 @@ extern int dirname_main(int argc, char** argv);
 extern int deallocvt_main(int argc, char** argv);
 extern int df_main(int argc, char** argv);
 extern int dmesg_main(int argc, char** argv);
+extern int dos2unix_main(int argc, char** argv);
 extern int du_main(int argc, char** argv);
 extern int dumpkmap_main(int argc, char** argv);
 extern int dutmp_main(int argc, char** argv);
@@ -206,14 +207,16 @@ extern int true_main(int argc, char** argv);
 extern int tput_main(int argc, char** argv);
 extern int tryopen_main(int argc, char** argv);
 extern int tty_main(int argc, char** argv);
-extern int uuencode_main(int argc, char** argv);
-extern int uudecode_main(int argc, char** argv);
 extern int umount_main(int argc, char** argv);
 extern int uname_main(int argc, char** argv);
-extern int uptime_main(int argc, char** argv);
 extern int uniq_main(int argc, char** argv);
+extern int unix2dos_main(int argc, char** argv);
+extern int unrpm_main(int argc, char** argv);
 extern int update_main(int argc, char** argv);
+extern int uptime_main(int argc, char** argv);
 extern int usleep_main(int argc, char** argv);
+extern int uuencode_main(int argc, char** argv);
+extern int uudecode_main(int argc, char** argv);
 extern int wc_main(int argc, char** argv);
 extern int wget_main(int argc, char** argv);
 extern int which_main(int argc, char** argv);
@@ -238,6 +241,7 @@ extern const char deallocvt_usage[];
 extern const char df_usage[];
 extern const char dirname_usage[];
 extern const char dmesg_usage[];
+extern const char dos2unix_usage[];
 extern const char du_usage[];
 extern const char dumpkmap_usage[];
 extern const char dutmp_usage[];
@@ -316,6 +320,8 @@ extern const char tty_usage[];
 extern const char umount_usage[];
 extern const char uname_usage[];
 extern const char uniq_usage[];
+extern const char unix2dos_usage[];
+extern const char unrpm_usage[];
 extern const char update_usage[];
 extern const char uptime_usage[];
 extern const char usleep_usage[];
diff --git a/unix2dos.c b/unix2dos.c
new file mode 100644 (file)
index 0000000..c6cf81b
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+    Mini unix2dos implementation for busybox
+
+    Copyright 1994,1995  Patrick Volkerding, Moorhead, Minnesota USA
+    All rights reserved.
+
+ Redistribution and use of this source code, with or without modification, is
+ permitted provided that the following condition is met:
+
+ 1. Redistributions of this source code must retain the above copyright
+    notice, this condition, and the following disclaimer.
+
+  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
+  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "internal.h"
+#include <stdio.h>
+
+int unix2dos_main( int argc, char **argv ) {
+       int c;
+       if (argc > 1) {
+               c = *argv[1];
+               if (c == '-') {
+                usage(unix2dos_usage);
+               } 
+       }
+       c = getchar();
+       while (c != EOF) {
+               /* Eat any \r's... they shouldn't be here */
+               while (c == '\r') c = getchar();
+               if (c == EOF) break;
+                if (c != '\n') {
+                        putchar(c);
+                } else { 
+                       printf("\r\n");
+                }
+                c = getchar();
+       } 
+       return 0;
+}
diff --git a/unrpm.c b/unrpm.c
new file mode 100644 (file)
index 0000000..cfcc0d1
--- /dev/null
+++ b/unrpm.c
@@ -0,0 +1,140 @@
+/*
+ * Mini unrpm implementation for busybox
+ *
+ * rpmunpack.c  -  Utility program to unpack an RPM archive
+ *
+ * Gero Kuhlmann <gero@gkminix.han.de> 1998
+ *
+ *  This program is public domain software; you can do whatever you like
+ *  with this source, including modifying and redistributing it.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+#include "internal.h" 
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <string.h>
+
+/*
+ * Some general definitions
+ */
+#define BUFSIZE                512
+#define RPM_MAGIC      "\355\253\356\333"
+#define GZ_MAGIC_1     '\037'
+#define GZ_MAGIC_2     '\213'
+
+/*
+ * Global variables
+ */
+static char buffer[BUFSIZE];
+static char *progname;
+static int infile, outfile;
+
+/*
+ * Read a specified number of bytes from input file
+ */
+static void myread(int num)
+{
+  int err;
+
+  if ((err = read(infile, buffer, num)) != num) {
+       if (err < 0)
+               perror(progname);
+       else
+               fprintf(stderr, "unexpected end of input file\n");
+       exit(1);
+  }
+}
+
+/*
+ * Main program
+ */
+int unrpm_main(int argc, char **argv)
+{
+  int len, status = 0;
+
+  /* Get our own program name */
+  if ((progname = strrchr(argv[0], '/')) == NULL)
+       progname = argv[0];
+  else
+       progname++;
+
+  /* Check for command line parameters */
+       if (argc>=2 && *argv[1]=='-') {
+           usage(unrpm_usage);
+       }
+
+  /* Open input file */
+  if (argc == 1)
+       infile = STDIN_FILENO;
+  else if ((infile = open(argv[1], O_RDONLY)) < 0) {
+       perror(progname);
+       exit(1);
+  }
+
+  /* Read magic ID and output filename */
+  myread(4);
+  if (strncmp(buffer, RPM_MAGIC, 4)) {
+       fprintf(stderr, "input file is not in RPM format\n");
+       exit(1);
+  }
+  myread(6);           /* Skip flags */
+  myread(64);
+  buffer[64] = '\0';
+
+  /* Open output file */
+  strcat(buffer, ".cpio.gz");
+  if (infile == STDIN_FILENO)
+       outfile = STDOUT_FILENO;
+  else if ((outfile = open(buffer, O_WRONLY | O_CREAT | O_TRUNC, 0644)) < 0) {
+       perror(progname);
+       exit(1);
+  }
+
+  /*
+   * Now search for the GZIP signature. This is rather awkward, but I don't
+   * know any other way how to find out the exact starting position of the
+   * archive within the input file. There are a couple of data structures
+   * and texts (obviously descriptions, installation shell scripts etc.)
+   * coming before the archive, but even they start at different offsets
+   * with different RPM files. However, it looks like the GZIP signature
+   * never appears before offset 0x200, so we skip these first couple of
+   * bytes to make the signature scan a little more reliable.
+   */
+  myread(0x200 - 74);
+  while (status < 2) {
+       myread(1);
+       if (status == 0 && buffer[0] == GZ_MAGIC_1)
+               status++;
+       else if (status == 1 && buffer[0] == GZ_MAGIC_2)
+               status++;
+       else
+               status = 0;
+  }
+  buffer[0] = GZ_MAGIC_1;
+  buffer[1] = GZ_MAGIC_2;
+  if (write(outfile, buffer, 2) < 0) {
+       perror(progname);
+       exit(1);
+  }
+
+  /* Now simply copy the GZIP archive into the output file */
+  while ((len = read(infile, buffer, BUFSIZE)) > 0) {
+       if (write(outfile, buffer, len) < 0) {
+               perror(progname);
+               exit(1);
+       }
+  }
+  if (len < 0) {
+       perror(progname);
+       exit(1);
+  }
+  close(outfile);
+  close(infile);
+  exit(0);
+}
diff --git a/usage.c b/usage.c
index cee2702..4a3d734 100644 (file)
--- a/usage.c
+++ b/usage.c
@@ -207,6 +207,15 @@ const char dmesg_usage[] =
        ;
 #endif
 
+#if defined BB_DOS2UNIX
+const char dos2unix_usage[] =
+       "dos2unix < dosfile > unixfile\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nConverts a text file from dos format to unix format.\n"
+#endif
+       ;
+#endif
+
 #if defined BB_DU
 const char du_usage[] =
        "du [OPTION]... [FILE]...\n"
@@ -1307,6 +1316,24 @@ const char uniq_usage[] =
        ;
 #endif
 
+#if defined BB_UNIX2DOS
+const char unix2dos_usage[] =
+       "unix2dos < unixfile > dosfile\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nConverts a text file from unix format to dos format.\n"
+#endif
+       ;
+#endif
+
+#if defined BB_UNRPM
+const char unrpm_usage[] =
+       "unrpm < package.rpm | gzip -d | cpio -idmuv\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nExtracts an rpm archive.\n"
+#endif
+       ;
+#endif
+
 #if defined BB_UPDATE
 const char update_usage[] =
        "update [options]\n"