automatically handle .xz suffix (XZ-compressed files), too
[bpt/emacs.git] / lib-src / cvtmail.c
index b6e0c58..1c262c9 100644 (file)
@@ -1,10 +1,17 @@
-/* Copyright (C) 1985, 1994 Free Software Foundation
+/* cvtmail.c --- convert Gosling Emacs mail directories into RMAIL format
+
+Copyright (C) 1985, 1994, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+  2008, 2009  Free Software Foundation, Inc.
+
+Author: Larry Kolodney
+Created: 1985
+
 This file is part of GNU Emacs.
 
-GNU Emacs is free software; you can redistribute it and/or modify
+GNU Emacs is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -12,35 +19,37 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with GNU Emacs; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-/* cvtmail:
- * Program to convert oldstyle goslings emacs mail directories into
- * gnu-rmail format.  Program expects a directory called Messages to
- * exist in your home directory, containing individual mail messages in
- * separate files in the standard gosling emacs mail reader format.
- *
- * Program takes one argument: an output file.  THis file will contain
- * all the messages in Messages directory, in berkeley mail format.
- * If no output file is mentioned, messages are put in ~/OMAIL.
- *
- * In order to get rmail to read the messages, the resulting file must
- * be mv'ed to ~/mbox, and then have rmail invoked on them.
- * 
- * Author: Larry Kolodney, 1985
- */
+along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
+
+
+/* Commentary:
 
+Program to convert oldstyle goslings emacs mail directories into
+gnu-rmail format.  Program expects a directory called Messages to
+exist in your home directory, containing individual mail messages in
+separate files in the standard gosling emacs mail reader format.
+
+Program takes one argument: an output file.  This file will contain
+all the messages in Messages directory, in berkeley mail format.
+If no output file is mentioned, messages are put in ~/OMAIL.
+
+In order to get rmail to read the messages, the resulting file must
+be mv'ed to ~/mbox, and then have rmail invoked on them.  */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <stdio.h>
 
-char *malloc ();
-char *realloc ();
+#ifndef HAVE_STDLIB_H
 char *getenv ();
+#endif
 
-char *xmalloc ();
-char *xrealloc ();
-void skip_to_lf ();
+char *xmalloc __P ((unsigned));
+char *xrealloc __P ((char *, unsigned));
+void skip_to_lf __P ((FILE *));
+void sysfail __P ((char *));
 
 int
 main (argc, argv)
@@ -74,15 +83,20 @@ main (argc, argv)
   cf = (char *) xmalloc (cflen);
 
   mddf = fopen (mdd, "r");
+  if (!mddf)
+    sysfail (mdd);
   if (argc > 1)
-    mfilef = fopen (argv[1], "w");
+    mfile = argv[1];
   else
     {
       mfile = (char *) xmalloc (strlen (hd) + 7);
       strcpy (mfile, hd);
       strcat (mfile, "/OMAIL");
-      mfilef = fopen (mfile, "w");
     }
+  mfilef = fopen (mfile, "w");
+  if (!mfilef)
+    sysfail (mfile);
+
   skip_to_lf (mddf);
   while (fscanf (mddf, "%4c%14[0123456789]", pre, name) != EOF)
     {
@@ -95,15 +109,20 @@ main (argc, argv)
       strcat (cf,"/");
       strcat (cf, name);
       cff = fopen (cf, "r");
-      while ((c = getc(cff)) != EOF)
-       putc (c, mfilef);
-      putc ('\n', mfilef);
-      skip_to_lf (mddf);
-     fclose (cff);
+      if (!cff)
+       perror (cf);
+      else
+       {
+         while ((c = getc(cff)) != EOF)
+           putc (c, mfilef);
+         putc ('\n', mfilef);
+         skip_to_lf (mddf);
+         fclose (cff);
+       }
     }
   fclose (mddf);
-  fclose (mfilef);    
-  return 0;
+  fclose (mfilef);
+  return EXIT_SUCCESS;
 }
 
 void
@@ -111,7 +130,7 @@ skip_to_lf (stream)
      FILE *stream;
 {
   register int c;
-  while ((c = getc(stream)) != '\n')
+  while ((c = getc(stream)) != EOF && c != '\n')
     ;
 }
 
@@ -132,14 +151,23 @@ fatal (s1, s2)
      char *s1, *s2;
 {
   error (s1, s2);
-  exit (1);
+  exit (EXIT_FAILURE);
+}
+
+void
+sysfail (s)
+     char *s;
+{
+  fprintf (stderr, "cvtmail: ");
+  perror (s);
+  exit (EXIT_FAILURE);
 }
 
 char *
 xmalloc (size)
      unsigned size;
 {
-  char *result = malloc (size);
+  char *result = (char *) malloc (size);
   if (!result)
     fatal ("virtual memory exhausted", 0);
   return result;
@@ -150,8 +178,13 @@ xrealloc (ptr, size)
      char *ptr;
      unsigned size;
 {
-  char *result = realloc (ptr, size);
+  char *result = (char *) realloc (ptr, size);
   if (!result)
-    fatal ("virtual memory exhausted");
+    fatal ("virtual memory exhausted", 0);
   return result;
 }
+
+/* arch-tag: b93c25a9-9012-44f1-b78b-9cc7aed44a7a
+   (do not change this comment) */
+
+/* cvtmail.c ends here */