]> diplodocus.org Git - nmh/blobdiff - etc/rmmproc.messageid
Adjust the quoted-printable output routine to continue when the end of
[nmh] / etc / rmmproc.messageid
index 3bb7cad249b4dac1cae8d20b46fcda32b1c9bbb4..e23882c6b72784a6ad1f8d0219ccc5d52407cf69 100755 (executable)
@@ -1,62 +1,61 @@
 #! /bin/sh
 ##
- # rmmproc.messageid -- tries to back up a message/file to a file that's
- #                      named based on Message ID
+ # rmmproc.messageid -- tries to back up each message/file to a file
+ #                      that's named based on Message ID
  #
  # This code is Copyright (c) 2013, by the authors of nmh.
  # See the COPYRIGHT file in the root directory of the nmh
  # distribution for complete copyright information.
  #
- # If called on a message, the current directory is the
- # message folder and $1 is the message filename.
- # If called on a file, $1 is the full path to the file.
+ # If called on messages, the current directory is the message folder
+ # and the script arguments are the message filenames.  If called on
+ # files, the arguments are the full paths to the files.
  #
  # The backup directory will be:
- #   1) If input is a message, the folder of the message.
- #   2) If input is a file, the directory of the file.
+ #   1) If input is messages, the folder of the messages.
+ #   2) If input is files, the directories of the files.
  #   3) If input is standard input (-), the user's MHPATH directory.
  #
- # The backup filename will be:
+ # Each backup filename will be:
  #   1) Message-ID with all / and \ converted to periods.
- #      Message-IDs should not contain \, but some
- #      filesystems can't handle them.  Message-IDs should
- #      be unique, so there should be no need to backup a
- #      file with the same name, especially if the result of
- #      malicious action.  If the backup file already
+ #      Message-IDs should not contain \, but some filesystems can't
+ #      handle them.  Message-IDs should be unique, so there should be
+ #      no need to backup a file with the same name, especially if the
+ #      result of malicious action.  If the backup file already
  #      exists, use 2).
- #      NOTE: conversion of some characters in the filename
- #      could result in an unintended name collision.  If
- #      that is a concern, a program that uses mktemp(3) to
- #      create a temporary file might be the basis for a
- #      remedy.
- #
+ #      NOTE: conversion of some characters in the filename could
+ #      result in an unintended name collision.  If that is a concern,
+ #      a program that uses mkstemp(3) to create a temporary file might
+ #      be the basis for a remedy.
  #   2) Concatenation of BACKUP_PREFIX and input filename.
- #      NOTE: if a file of that name already exists in the
- #      destination directory, it will be overwritten by the
- #      mv below.
- #
+ #      NOTE: if a file of that name already exists in the destination
+ #      directory, it will be overwritten by the mv below.
 ##
 
-if [ "$1" = - ]; then
-    #### Input is stdin; put backup in user's MHPATH directory.
-    dir=`mhparam path`
-    #### If Path is relative, prepend home directory.
-    [ `dirname "$dir"` = . ]  &&  dir="$HOME/$dir"
-else
-    dir=`dirname "$1"`
-fi
+for i in "$@"; do
+    if [ "$i" = - ]; then
+        #### Input is stdin; put backup in user's MHPATH directory.
+        dir=`mhparam path`
+        #### If Path is relative, prepend home directory.
+        [ `dirname "$dir"` = . ]  &&  dir="$HOME/$dir"
+    else
+        dir=`dirname "$i"`
+    fi
+
+    #### Extract first Message-Id, remove <>, substitute / and \.
+    messageid=`sed -n '
+        /^$/q; /^[Mm][Ee][Ss][Ss][Aa][Gg][Ee]-[Ii][Dd]:/!d
+        s/>.*//; s/.*<//; y#/\\\#..#; p
+        ' "$i"`
 
-#### Extract first Message-Id, remove <>, substitute / and \.
-messageid=`sed -n '
-    /^$/q; /^[Mm][Ee][Ss][Ss][Aa][Gg][Ee]-[Ii][Dd]:/!d
-    s/>.*//; s/.*<//; y#/\\\#..#; p
-    ' "$1"`
+    if [ "$messageid"  -a  ! -f "$dir/$messageid" ]; then
+        filename="$dir/$messageid"
+    else
+        #### `mhparam sbackup` is usually ',' but depends on configuration.
+        filename="$dir"/`mhparam sbackup``basename "$i"`
+    fi
 
-if [ "$messageid"  -a  ! -f "$dir/$messageid" ]; then
-    filename="$dir/$messageid"
-else
-    filename="$dir"/`mhparam sbackup``basename "$1"`
-fi
+    mv "$i" "$filename"  ||  status=1
+done
 
-#### If unable to backup the message, exit with status 1.
-mv "$1" "$filename"
+exit $status