X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/c4f592c47f236d2493b86760d11fb38ffd3275d6..3f32be22c62ae36136eb3a5d4d659f27b4adfcad:/lib-src/movemail.c diff --git a/lib-src/movemail.c b/lib-src/movemail.c index 84d4f949b2..d452fd15a7 100644 --- a/lib-src/movemail.c +++ b/lib-src/movemail.c @@ -1,14 +1,14 @@ /* movemail foo bar -- move file foo to file bar, locking file foo the way /bin/mail respects. Copyright (C) 1986, 1992, 1993, 1994, 1996, 1999, 2001, 2002, 2003, 2004, - 2005, 2006, 2007 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. 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 @@ -16,9 +16,8 @@ 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, Inc., 51 Franklin Street, Fifth Floor, -Boston, MA 02110-1301, USA. */ +along with GNU Emacs. If not, see . */ + /* 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 @@ -55,7 +54,6 @@ Boston, MA 02110-1301, USA. */ * */ -#define NO_SHORTNAMES /* Tell config not to load remap.h */ #include #include #include @@ -113,7 +111,7 @@ Boston, MA 02110-1301, USA. */ #define R_OK 4 #endif -#if defined (XENIX) || defined (WINDOWSNT) +#ifdef WINDOWSNT #include #endif @@ -175,7 +173,7 @@ main (argc, argv) char *inname, *outname; int indesc, outdesc; int nread; - WAITTYPE status; + int status; int c, preserve_mail = 0; #ifndef MAIL_USE_SYSTEM_LOCK @@ -343,6 +341,13 @@ main (argc, argv) close (desc); tem = link (tempname, lockname); + +#ifdef EPERM + if (tem < 0 && errno == EPERM) + fatal ("Unable to create hard link between %s and %s", + tempname, lockname); +#endif + unlink (tempname); if (tem >= 0) break; @@ -388,13 +393,13 @@ main (argc, argv) if (indesc < 0) pfatal_with_name (inname); -#if defined (BSD_SYSTEM) || defined (XENIX) +#ifdef BSD_SYSTEM /* In case movemail is setuid to root, make sure the user can read the output file. */ /* This is desirable for all systems but I don't want to assume all have the umask system call */ umask (umask (0) & 0333); -#endif /* BSD_SYSTEM || XENIX */ +#endif /* BSD_SYSTEM */ outdesc = open (outname, O_WRONLY | O_CREAT | O_EXCL, 0666); if (outdesc < 0) pfatal_with_name (outname); @@ -422,15 +427,11 @@ main (argc, argv) #ifdef MAIL_USE_LOCKF status = lockf (indesc, F_LOCK, 0); #else /* not MAIL_USE_LOCKF */ -#ifdef XENIX - status = locking (indesc, LK_RLCK, 0L); -#else #ifdef WINDOWSNT status = locking (indesc, LK_RLCK, -1L); #else status = flock (indesc, LOCK_EX); #endif -#endif #endif /* not MAIL_USE_LOCKF */ #endif /* MAIL_USE_SYSTEM_LOCK */ } @@ -503,13 +504,7 @@ main (argc, argv) #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 */ @@ -702,7 +697,7 @@ char Errmsg[200]; /* POP errors, at least, can exceed the original length of 80. */ /* - * The full legal syntax for a POP mailbox specification for movemail + * The full valid syntax for a POP mailbox specification for movemail * is "po:username:hostname". The ":hostname" is optional; if it is * omitted, the MAILHOST environment variable will be consulted. Note * that by the time popmail() is called the "po:" has been stripped @@ -928,7 +923,7 @@ int mbx_delimit_begin (mbf) FILE *mbf; { - if (fputs ("\f\n0, unseen,,\n", mbf) == EOF) + if (fputs ("From movemail\n", mbf) == EOF) return (NOTOK); return (OK); } @@ -937,7 +932,7 @@ int mbx_delimit_end (mbf) FILE *mbf; { - if (putc ('\037', mbf) == EOF) + if (putc ('\n', mbf) == EOF) return (NOTOK); return (OK); }