[PATCH] shell: Add an md5 hash command for files.

Chris Johns chrisj at rtems.org
Sun Sep 14 23:11:35 UTC 2014


This command lets you get an MD5 hash for a file in an RTEMS file system.
---
 cpukit/libmisc/Makefile.am         |   6 +-
 cpukit/libmisc/shell/main_md5.c    | 110 ++++++++++++++++++++
 cpukit/libmisc/shell/shellconfig.h |   6 ++
 doc/shell/file.t                   | 206 +++++++++++++++++++++++++------------
 4 files changed, 258 insertions(+), 70 deletions(-)
 create mode 100644 cpukit/libmisc/shell/main_md5.c

diff --git a/cpukit/libmisc/Makefile.am b/cpukit/libmisc/Makefile.am
index 1091109..eaf1ffe 100644
--- a/cpukit/libmisc/Makefile.am
+++ b/cpukit/libmisc/Makefile.am
@@ -85,9 +85,9 @@ libshell_a_SOURCES = shell/cat_file.c shell/cmds.c shell/internal.h \
     shell/main_cp.c shell/main_cpuuse.c shell/main_date.c shell/main_dir.c \
     shell/main_echo.c shell/main_exit.c shell/main_halt.c shell/main_help.c \
     shell/main_id.c shell/main_logoff.c shell/main_ln.c shell/main_ls.c \
-    shell/main_mallocinfo.c shell/main_mdump.c shell/main_medit.c \
-    shell/main_mfill.c shell/main_mkdir.c shell/main_mount.c \
-    shell/main_mmove.c shell/main_msdosfmt.c \
+    shell/main_mallocinfo.c shell/main_md5.c shell/main_mdump.c \
+    shell/main_medit.c shell/main_mfill.c shell/main_mkdir.c \
+    shell/main_mount.c shell/main_mmove.c shell/main_msdosfmt.c \
     shell/main_mv.c shell/main_perioduse.c shell/main_ping.c \
     shell/main_pwd.c shell/main_rm.c shell/main_rmdir.c shell/main_sleep.c \
     shell/main_stackuse.c shell/main_tty.c shell/main_umask.c \
diff --git a/cpukit/libmisc/shell/main_md5.c b/cpukit/libmisc/shell/main_md5.c
new file mode 100644
index 0000000..b0d1833
--- /dev/null
+++ b/cpukit/libmisc/shell/main_md5.c
@@ -0,0 +1,110 @@
+/*
+ *  MD5 Shell Command Implmentation
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.com/license/LICENSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <rtems.h>
+#include <rtems/shell.h>
+
+#include <md5.h>
+
+#define BUFFER_SIZE (4 * 1024)
+
+static int rtems_shell_main_md5(
+  int   argc,
+  char *argv[])
+{
+  uint8_t* buffer;
+  uint8_t  hash[16];
+  size_t   h;
+
+  buffer = malloc(BUFFER_SIZE);
+  if (!buffer)
+  {
+    printf("error: no memory\n");
+    return 1;
+  }
+
+  --argc;
+  ++argv;
+
+  while (argc)
+  {
+    struct stat sb;
+    MD5_CTX     md5;
+    int         in;
+
+    if (stat(*argv, &sb) < 0)
+    {
+        free(buffer);
+        printf("error: stat of %s: %s\n", *argv, strerror(errno));
+        return 1;
+    }
+
+    in = open(*argv, O_RDONLY);
+    if (in < 0)
+    {
+        free(buffer);
+        printf("error: opening %s: %s\n", *argv, strerror(errno));
+        return 1;
+    }
+
+    MD5Init(&md5);
+
+    while (sb.st_size)
+    {
+      ssize_t size = sb.st_size > BUFFER_SIZE ? BUFFER_SIZE : sb.st_size;
+
+      if (read(in, buffer, size) != size)
+      {
+        close(in);
+        free(buffer);
+        printf("error: reading %s: %s\n", *argv, strerror(errno));
+        return 1;
+      }
+
+      MD5Update(&md5, buffer, size);
+
+      sb.st_size -= size;
+    }
+
+    MD5Final(hash, &md5);
+
+    close(in);
+
+    printf("MD5 (%s) = ", *argv);
+    for (h = 0; h < sizeof(hash); ++h)
+      printf("%02x", (int) hash[h]);
+    printf("\n");
+
+    --argc;
+    ++argv;
+  }
+
+  free(buffer);
+
+  return 0;
+}
+
+rtems_shell_cmd_t rtems_shell_MD5_Command = {
+  "md5",                 /* name */
+  "md5 [file ...]",      /* usage */
+  "files",               /* topic */
+  rtems_shell_main_md5,  /* command */
+  NULL,                  /* alias */
+  NULL                   /* next */
+};
diff --git a/cpukit/libmisc/shell/shellconfig.h b/cpukit/libmisc/shell/shellconfig.h
index 988bf88..eacfac2 100644
--- a/cpukit/libmisc/shell/shellconfig.h
+++ b/cpukit/libmisc/shell/shellconfig.h
@@ -71,6 +71,7 @@ extern rtems_shell_cmd_t rtems_shell_DD_Command;
 extern rtems_shell_cmd_t rtems_shell_HEXDUMP_Command;
 extern rtems_shell_cmd_t rtems_shell_DEBUGRFS_Command;
 extern rtems_shell_cmd_t rtems_shell_DF_Command;
+extern rtems_shell_cmd_t rtems_shell_MD5_Command;
 
 extern rtems_shell_cmd_t rtems_shell_RTC_Command;
 
@@ -382,6 +383,11 @@ extern rtems_shell_alias_t *rtems_shell_Initial_aliases[];
         defined(CONFIGURE_SHELL_COMMAND_DF)
       &rtems_shell_DF_Command,
     #endif
+    #if (defined(CONFIGURE_SHELL_COMMANDS_ALL) && \
+         !defined(CONFIGURE_SHELL_NO_COMMAND_MD5)) || \
+        defined(CONFIGURE_SHELL_COMMAND_MD5)
+      &rtems_shell_MD5_Command,
+    #endif
 
     /*
      *  RTEMS Related commands
diff --git a/doc/shell/file.t b/doc/shell/file.t
index eb38fe3..2db057d 100644
--- a/doc/shell/file.t
+++ b/doc/shell/file.t
@@ -36,6 +36,7 @@ The RTEMS shell has the following file and directory commands:
 @item @code{mkrfs} - format RFS file system
 @item @code{cd} - alias for chdir
 @item @code{df} - display file system disk space usage
+ at item @code{md5} - display file system disk space usage
 
 @end itemize
 
@@ -91,7 +92,7 @@ SHLL [/] $ umask
 @findex CONFIGURE_SHELL_NO_COMMAND_UMASK
 @findex CONFIGURE_SHELL_COMMAND_UMASK
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_UMASK} to have this
 command included.
@@ -246,7 +247,7 @@ tty:!:2:2:tty owner::/:/bin/false
 SHLL [/] # ls
 drwxr-xr-x   1   root   root         536 Jan 01 00:00 dev/
 drwxr-xr-x   1   root   root        1072 Jan 01 00:00 etc/
--rw-r--r--   1   root   root         102 Jan 01 00:00 joel 
+-rw-r--r--   1   root   root         102 Jan 01 00:00 joel
 3 files 1710 bytes occupied
 @end example
 
@@ -256,18 +257,18 @@ use the same @code{basename} in the destination directory:
 
 @example
 SHLL [/] # mkdir tmp
-SHLL [/] # ls tmp         
+SHLL [/] # ls tmp
 0 files 0 bytes occupied
 SHLL [/] # cp /etc/passwd tmp
 SHLL [/] # ls /tmp
--rw-r--r--   1   root   root         102 Jan 01 00:01 passwd 
+-rw-r--r--   1   root   root         102 Jan 01 00:01 passwd
 1 files 102 bytes occupied
 SHLL [/] # cp /etc/passwd /etc/group /tmp
 SHLL [/] # ls /tmp
--rw-r--r--   1   root   root         102 Jan 01 00:01 passwd 
--rw-r--r--   1   root   root          42 Jan 01 00:01 group 
+-rw-r--r--   1   root   root         102 Jan 01 00:01 passwd
+-rw-r--r--   1   root   root          42 Jan 01 00:01 group
 2 files 144 bytes occupied
-SHLL [/] # 
+SHLL [/] #
 @end example
 
 @subheading CONFIGURATION:
@@ -275,7 +276,7 @@ SHLL [/] #
 @findex CONFIGURE_SHELL_NO_COMMAND_CP
 @findex CONFIGURE_SHELL_COMMAND_CP
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_CP} to have this
 command included.
@@ -448,7 +449,7 @@ pwd
 @subheading DESCRIPTION:
 
 This command prints the fully qualified filename of the current
-working directory. 
+working directory.
 
 @subheading EXIT STATUS:
 
@@ -475,7 +476,7 @@ SHLL [/dev] $ pwd
 @findex CONFIGURE_SHELL_NO_COMMAND_PWD
 @findex CONFIGURE_SHELL_COMMAND_PWD
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_PWD} to have this
 command included.
@@ -531,7 +532,7 @@ This command returns 0 on success and non-zero if an error is encountered.
 
 @subheading NOTES:
 
-This command currently does not display information on a set of 
+This command currently does not display information on a set of
 files like the POSIX ls(1).  It only displays the contents of
 entire directories.
 
@@ -545,14 +546,14 @@ drwxr-xr-x   1   root   root         536 Jan 01 00:00 dev/
 drwxr-xr-x   1   root   root        1072 Jan 01 00:00 etc/
 2 files 1608 bytes occupied
 SHLL [/] $ ls etc
--rw-r--r--   1   root   root         102 Jan 01 00:00 passwd 
--rw-r--r--   1   root   root          42 Jan 01 00:00 group 
--rw-r--r--   1   root   root          30 Jan 01 00:00 issue 
--rw-r--r--   1   root   root          28 Jan 01 00:00 issue.net 
+-rw-r--r--   1   root   root         102 Jan 01 00:00 passwd
+-rw-r--r--   1   root   root          42 Jan 01 00:00 group
+-rw-r--r--   1   root   root          30 Jan 01 00:00 issue
+-rw-r--r--   1   root   root          28 Jan 01 00:00 issue.net
 4 files 202 bytes occupied
 SHLL [/] $ ls dev etc
--rwxr-xr-x   1  rtems   root           0 Jan 01 00:00 console 
--rwxr-xr-x   1   root   root           0 Jan 01 00:00 console_b 
+-rwxr-xr-x   1  rtems   root           0 Jan 01 00:00 console
+-rwxr-xr-x   1   root   root           0 Jan 01 00:00 console_b
 @end example
 
 @subheading CONFIGURATION:
@@ -560,7 +561,7 @@ SHLL [/] $ ls dev etc
 @findex CONFIGURE_SHELL_NO_COMMAND_LS
 @findex CONFIGURE_SHELL_COMMAND_LS
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_LS} to have this
 command included.
@@ -626,7 +627,7 @@ The following is an example of how to use @code{chdir}:
 SHLL [/] $ pwd
 /
 SHLL [/] $ chdir etc
-SHLL [/etc] $ pwd 
+SHLL [/etc] $ pwd
 /etc
 @end example
 
@@ -635,7 +636,7 @@ SHLL [/etc] $ pwd
 @findex CONFIGURE_SHELL_NO_COMMAND_CHDIR
 @findex CONFIGURE_SHELL_COMMAND_CHDIR
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_CHDIR} to have this
 command included.
@@ -683,7 +684,7 @@ mkdir  dir [dir1 .. dirN]
 
 This command creates the set of directories in the order they
 are specified on the command line.  If an error is encountered
-making one of the directories, the command will continue to 
+making one of the directories, the command will continue to
 attempt to create the remaining directories on the command line.
 
 @subheading EXIT STATUS:
@@ -712,7 +713,7 @@ SHLL [/] # ls joel
 0 files 0 bytes occupied
 SHLL [/] # cp etc/passwd joel
 SHLL [/] # ls joel
--rw-r--r--   1   root   root         102 Jan 01 00:02 passwd 
+-rw-r--r--   1   root   root         102 Jan 01 00:02 passwd
 1 files 102 bytes occupied
 @end example
 
@@ -721,7 +722,7 @@ SHLL [/] # ls joel
 @findex CONFIGURE_SHELL_NO_COMMAND_MKDIR
 @findex CONFIGURE_SHELL_COMMAND_MKDIR
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_MKDIR} to have this
 command included.
@@ -767,7 +768,7 @@ rmdir  [dir1 .. dirN]
 
 @subheading DESCRIPTION:
 
-This command removes the specified set of directories.  If no 
+This command removes the specified set of directories.  If no
 directories are provided on the command line, no actions are taken.
 
 @subheading EXIT STATUS:
@@ -795,7 +796,7 @@ joeldir: No such file or directory.
 @findex CONFIGURE_SHELL_NO_COMMAND_RMDIR
 @findex CONFIGURE_SHELL_COMMAND_RMDIR
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_RMDIR} to have this
 command included.
@@ -966,9 +967,9 @@ are from NetBSD 4.0.
 @subheading SYNOPSYS:
 
 @example
-mknod [-rR] [-F fmt] [-g gid] [-m mode] [-u uid] name [c | b] 
+mknod [-rR] [-F fmt] [-g gid] [-m mode] [-u uid] name [c | b]
       [driver | major] minor
-mknod [-rR] [-F fmt] [-g gid] [-m mode] [-u uid] name [c | b] 
+mknod [-rR] [-F fmt] [-g gid] [-m mode] [-u uid] name [c | b]
       major unit subunit
 mknod [-rR] [-g gid] [-m mode] [-u uid] name [c | b] number
 mknod [-rR] [-g gid] [-m mode] [-u uid] name p
@@ -1145,7 +1146,7 @@ cat: /etc/passwd: No such file or directory
 @findex CONFIGURE_SHELL_NO_COMMAND_CHROOT
 @findex CONFIGURE_SHELL_COMMAND_CHROOT
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_CHROOT} to have this
 command included. Additional to that you have to add one
@@ -1214,31 +1215,31 @@ The following is an example of how to use @code{chmod}:
 @example
 SHLL [/] # cd etc
 SHLL [/etc] # ls
--rw-r--r--   1   root   root         102 Jan 01 00:00 passwd 
--rw-r--r--   1   root   root          42 Jan 01 00:00 group 
--rw-r--r--   1   root   root          30 Jan 01 00:00 issue 
--rw-r--r--   1   root   root          28 Jan 01 00:00 issue.net 
+-rw-r--r--   1   root   root         102 Jan 01 00:00 passwd
+-rw-r--r--   1   root   root          42 Jan 01 00:00 group
+-rw-r--r--   1   root   root          30 Jan 01 00:00 issue
+-rw-r--r--   1   root   root          28 Jan 01 00:00 issue.net
 4 files 202 bytes occupied
 SHLL [/etc] # chmod 0777 passwd
-SHLL [/etc] # ls 
--rwxrwxrwx   1   root   root         102 Jan 01 00:00 passwd 
--rw-r--r--   1   root   root          42 Jan 01 00:00 group 
--rw-r--r--   1   root   root          30 Jan 01 00:00 issue 
--rw-r--r--   1   root   root          28 Jan 01 00:00 issue.net 
+SHLL [/etc] # ls
+-rwxrwxrwx   1   root   root         102 Jan 01 00:00 passwd
+-rw-r--r--   1   root   root          42 Jan 01 00:00 group
+-rw-r--r--   1   root   root          30 Jan 01 00:00 issue
+-rw-r--r--   1   root   root          28 Jan 01 00:00 issue.net
 4 files 202 bytes occupied
 SHLL [/etc] # chmod 0322 passwd
 SHLL [/etc] # ls
---wx-w--w-   1 nouser   root         102 Jan 01 00:00 passwd 
--rw-r--r--   1 nouser   root          42 Jan 01 00:00 group 
--rw-r--r--   1 nouser   root          30 Jan 01 00:00 issue 
--rw-r--r--   1 nouser   root          28 Jan 01 00:00 issue.net 
+--wx-w--w-   1 nouser   root         102 Jan 01 00:00 passwd
+-rw-r--r--   1 nouser   root          42 Jan 01 00:00 group
+-rw-r--r--   1 nouser   root          30 Jan 01 00:00 issue
+-rw-r--r--   1 nouser   root          28 Jan 01 00:00 issue.net
 4 files 202 bytes occupied
 SHLL [/etc] # chmod 0644 passwd
 SHLL [/etc] # ls
--rw-r--r--   1   root   root         102 Jan 01 00:00 passwd 
--rw-r--r--   1   root   root          42 Jan 01 00:00 group 
--rw-r--r--   1   root   root          30 Jan 01 00:00 issue 
--rw-r--r--   1   root   root          28 Jan 01 00:00 issue.net 
+-rw-r--r--   1   root   root         102 Jan 01 00:00 passwd
+-rw-r--r--   1   root   root          42 Jan 01 00:00 group
+-rw-r--r--   1   root   root          30 Jan 01 00:00 issue
+-rw-r--r--   1   root   root          28 Jan 01 00:00 issue.net
 4 files 202 bytes occupied
 @end example
 
@@ -1247,7 +1248,7 @@ SHLL [/etc] # ls
 @findex CONFIGURE_SHELL_NO_COMMAND_CHMOD
 @findex CONFIGURE_SHELL_COMMAND_CHMOD
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_CHMOD} to have this
 command included.
@@ -1319,7 +1320,7 @@ tty:!:2:2:tty owner::/:/bin/false
 @findex CONFIGURE_SHELL_NO_COMMAND_CAT
 @findex CONFIGURE_SHELL_COMMAND_CAT
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_CAT} to have this
 command included.
@@ -1365,7 +1366,7 @@ rm file1 [file2 ... fileN]
 
 @subheading DESCRIPTION:
 
-This command deletes a name from the filesystem.  If the specified file name 
+This command deletes a name from the filesystem.  If the specified file name
 was the last link to a file and there are no @code{open} file descriptor
 references to that file, then it is deleted and the associated space in
 the file system is made available for subsequent use.
@@ -1403,7 +1404,7 @@ cat: tmpfile: No such file or directory
 @findex CONFIGURE_SHELL_NO_COMMAND_RM
 @findex CONFIGURE_SHELL_COMMAND_RM
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_RM} to have this
 command included.
@@ -1510,7 +1511,7 @@ $ cat /tftp/10.10.10.10/test.txt
 @findex CONFIGURE_SHELL_NO_COMMAND_MOUNT
 @findex CONFIGURE_SHELL_COMMAND_MOUNT
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_MOUNT} to have this
 command included.
@@ -1603,7 +1604,7 @@ EXAMPLE_TBD
 @findex CONFIGURE_SHELL_NO_COMMAND_UNMOUNT
 @findex CONFIGURE_SHELL_COMMAND_UNMOUNT
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_UNMOUNT} to have this
 command included.
@@ -1672,7 +1673,7 @@ EXAMPLE_TBD
 @findex CONFIGURE_SHELL_NO_COMMAND_BLKSYNC
 @findex CONFIGURE_SHELL_COMMAND_BLKSYNC
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_BLKSYNC} to have this
 command included.
@@ -2069,7 +2070,7 @@ An asterisk (*) may not be used as a field width or precision.
 A byte count or field precision is required for each ``s'' con-
 version character (unlike the fprintf(3) default which prints the
 entire string if the precision is unspecified).
- at item 
+ at item
 The conversion characters ``h'', ``l'', ``n'', ``p'' and ``q'' are not
 supported.
 @item
@@ -2243,7 +2244,7 @@ fdisk
 @findex CONFIGURE_SHELL_NO_COMMAND_FDISK
 @findex CONFIGURE_SHELL_COMMAND_FDISK
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_FDISK} to have this
 command included.
@@ -2268,7 +2269,7 @@ dir [dir]
 
 @subheading DESCRIPTION:
 
-This command is an alias or alternate name for the @code{ls}. 
+This command is an alias or alternate name for the @code{ls}.
 See @ref{File and Directory Commands ls - list files in the directory, ls}
 for more information.
 
@@ -2290,10 +2291,10 @@ drwxr-xr-x   1   root   root         536 Jan 01 00:00 dev/
 drwxr-xr-x   1   root   root        1072 Jan 01 00:00 etc/
 2 files 1608 bytes occupied
 SHLL [/] $ dir etc
--rw-r--r--   1   root   root         102 Jan 01 00:00 passwd 
--rw-r--r--   1   root   root          42 Jan 01 00:00 group 
--rw-r--r--   1   root   root          30 Jan 01 00:00 issue 
--rw-r--r--   1   root   root          28 Jan 01 00:00 issue.net 
+-rw-r--r--   1   root   root         102 Jan 01 00:00 passwd
+-rw-r--r--   1   root   root          42 Jan 01 00:00 group
+-rw-r--r--   1   root   root          30 Jan 01 00:00 issue
+-rw-r--r--   1   root   root          28 Jan 01 00:00 issue.net
 4 files 202 bytes occupied
 @end example
 
@@ -2302,7 +2303,7 @@ SHLL [/] $ dir etc
 @findex CONFIGURE_SHELL_NO_COMMAND_DIR
 @findex CONFIGURE_SHELL_COMMAND_DIR
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_DIR} to have this
 command included.
@@ -2407,7 +2408,7 @@ SHLL [/] $ mkrfs /dev/fdda
 @findex CONFIGURE_SHELL_NO_COMMAND_MKRFS
 @findex CONFIGURE_SHELL_COMMAND_MKRFS
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_MKRFS} to have this
 command included.
@@ -2448,7 +2449,7 @@ extern rtems_shell_cmd_t rtems_shell_MKRFS_Command;
 @subheading SYNOPSYS:
 
 @example
-debugrfs [-hl] path command [options] 
+debugrfs [-hl] path command [options]
 @end example
 
 @subheading DESCRIPTION:
@@ -2476,7 +2477,7 @@ The commands are:
 Display the contents of the blocks from start to end.
 
 @item data
-Display the file system data and configuration. 
+Display the file system data and configuration.
 
 @item dir bno
 Process the block as a directory displaying the entries.
@@ -2519,7 +2520,7 @@ SHLL [/] $ debugrfs /c data
 @findex CONFIGURE_SHELL_NO_COMMAND_DEBUGRFS
 @findex CONFIGURE_SHELL_COMMAND_DEBUGRFS
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_DEBUGRFS} to have this
 command included.
@@ -2565,7 +2566,7 @@ cd directory
 
 @subheading DESCRIPTION:
 
-This command is an alias or alternate name for the @code{chdir}. 
+This command is an alias or alternate name for the @code{chdir}.
 See @ref{File and Directory Commands chdir - change the current directory, cd}
 for more information.
 
@@ -2601,7 +2602,7 @@ SHLL [/] $ pwd
 @findex CONFIGURE_SHELL_NO_COMMAND_CD
 @findex CONFIGURE_SHELL_COMMAND_CD
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_CD} to have this
 command included.
@@ -2678,7 +2679,7 @@ Filesystem     Size             Used   Available       Use%     Mounted on
 @findex CONFIGURE_SHELL_NO_COMMAND_DF
 @findex CONFIGURE_SHELL_COMMAND_DF
 
-This command is included in the default shell command set.  
+This command is included in the default shell command set.
 When building a custom command set, define
 @code{CONFIGURE_SHELL_COMMAND_DF} to have this
 command included.
@@ -2708,3 +2709,74 @@ following prototype:
 extern rtems_shell_cmd_t rtems_shell_DF_Command;
 @end example
 
+ at c
+ at c
+ at c
+ at page
+ at subsection md5 - compute the Md5 hash of a file or list of files
+
+ at pgindex md5
+
+ at subheading SYNOPSYS:
+
+ at example
+md5 <files>
+ at end example
+
+ at subheading DESCRIPTION:
+
+This command prints the MD5 of a file. You can provide one or more
+files on the command line and a hash for each file is printed in a
+single line of output.
+
+ at subheading EXIT STATUS:
+
+This command returns 0 on success and non-zero if an error is encountered.
+
+ at subheading NOTES:
+
+NONE
+
+ at subheading EXAMPLES:
+
+The following is an example of how to use @code{md5}:
+
+ at example
+SHLL [/] $ md5 shell-init
+MD5 (shell-init) = 43b4d2e71b47db79eae679a2efeacf31
+ at end example
+
+ at subheading CONFIGURATION:
+
+ at findex CONFIGURE_SHELL_NO_COMMAND_MD5
+ at findex CONFIGURE_SHELL_COMMAND_MD5
+
+This command is included in the default shell command set.
+When building a custom command set, define
+ at code{CONFIGURE_SHELL_COMMAND_MD5} to have this
+command included.
+
+This command can be excluded from the shell command set by
+defining @code{CONFIGURE_SHELL_NO_COMMAND_MD5} when all
+shell commands have been configured.
+
+ at subheading PROGRAMMING INFORMATION:
+
+ at findex rtems_shell_rtems_main_md5
+
+The @code{df} is implemented by a C language function
+which has the following prototype:
+
+ at example
+int rtems_shell_main_md5(
+  int argc,
+  char **argv
+);
+ at end example
+
+The configuration structure for the @code{md5} has the
+following prototype:
+
+ at example
+extern rtems_shell_cmd_t rtems_shell_MD5_Command;
+ at end example
-- 
1.8.5.2 (Apple Git-48)



More information about the devel mailing list