/* movemail foo bar -- move file foo to file bar,
locking file foo the way /bin/mail respects.
- Copyright (C) 1986, 92, 93, 94, 96, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1986, 1992, 1993, 1994, 1996, 1999, 2001, 2002, 2003, 2004,
+ 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
This file is part of GNU Emacs.
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)
+the Free Software Foundation; either version 3, or (at your option)
any later version.
GNU Emacs is distributed in the hope that it will be useful,
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, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA. */
/* Important notice: defining MAIL_USE_FLOCK or MAIL_USE_LOCKF *will
cause loss of mail* if you do it on a system that does not normally
#endif
if (*outname == 0)
- fatal ("Destination file name is empty", 0);
+ fatal ("Destination file name is empty", 0, 0);
/* Check access to output file. */
if (access (outname, F_OK) == 0 && access (outname, W_OK) != 0)
while (1)
{
nread = read (indesc, buf, sizeof buf);
+ if (nread < 0)
+ pfatal_with_name (inname);
if (nread != write (outdesc, buf, nread))
{
int saved_errno = errno;
#ifdef MAIL_USE_SYSTEM_LOCK
if (! preserve_mail)
{
-#if defined (STRIDE) || defined (XENIX)
- /* Stride, xenix have file locking, but no ftruncate.
- This mess will do. */
- close (open (inname, O_CREAT | O_TRUNC | O_RDWR, 0666));
-#else
ftruncate (indesc, 0L);
-#endif /* STRIDE or XENIX */
}
#endif /* MAIL_USE_SYSTEM_LOCK */
/* Print error message and exit. */
void
-fatal (s1, s2)
- char *s1, *s2;
+fatal (s1, s2, s3)
+ char *s1, *s2, *s3;
{
if (delete_lockname)
unlink (delete_lockname);
- error (s1, s2, 0);
+ error (s1, s2, s3);
exit (EXIT_FAILURE);
}
pfatal_with_name (name)
char *name;
{
- char *s = concat ("", strerror (errno), " for %s");
- fatal (s, name);
+ fatal ("%s for %s", strerror (errno), name);
}
void
pfatal_and_delete (name)
char *name;
{
- char *s = concat ("", strerror (errno), " for %s");
+ char *s = strerror (errno);
unlink (name);
- fatal (s, name);
+ fatal ("%s for %s", s, name);
}
/* Return a newly-allocated string whose contents concatenate those of s1, s2, s3. */
{
long *result = (long *) malloc (size);
if (!result)
- fatal ("virtual memory exhausted", 0);
+ fatal ("virtual memory exhausted", 0, 0);
return result;
}
\f
mbx_delimit_begin (mbf);
if (pop_retr (server, i, mbf) != OK)
{
- error (Errmsg, 0, 0);
+ error ("%s", Errmsg, 0);
close (mbfi);
return EXIT_FAILURE;
}