annotate lib-src/movemail.c @ 99492:ee792794d888

(isearch-search-fun): Compare the length of the current search string with the length of the string from the previous search state to detect the situation when the user adds or removes characters in the search string. Use word-search-forward-lax and word-search-backward-lax in this case, and otherwise word-search-forward and word-search-backward.
author Juri Linkov <juri@jurta.org>
date Tue, 11 Nov 2008 19:43:09 +0000
parents 3bea8ede5bd0
children d893844c75a7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 /* movemail foo bar -- move file foo to file bar,
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2 locking file foo the way /bin/mail respects.
75250
6d19c76d81c5 Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents: 70280
diff changeset
3 Copyright (C) 1986, 1992, 1993, 1994, 1996, 1999, 2001, 2002, 2003, 2004,
79748
5714ff101fd9 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78257
diff changeset
4 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 This file is part of GNU Emacs.
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
8 GNU Emacs is free software: you can redistribute it and/or modify
38
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 27
diff changeset
9 it under the terms of the GNU General Public License as published by
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
10 the Free Software Foundation, either version 3 of the License, or
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
11 (at your option) any later version.
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12
38
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 27
diff changeset
13 GNU Emacs is distributed in the hope that it will be useful,
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 27
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 27
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 27
diff changeset
16 GNU General Public License for more details.
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 27
diff changeset
17
056b931d312b *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 27
diff changeset
18 You should have received a copy of the GNU General Public License
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
20
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
22 /* Important notice: defining MAIL_USE_FLOCK or MAIL_USE_LOCKF *will
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
23 cause loss of mail* if you do it on a system that does not normally
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
24 use flock as its way of interlocking access to inbox files. The
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
25 setting of MAIL_USE_FLOCK and MAIL_USE_LOCKF *must agree* with the
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
26 system's own conventions. It is not a choice that is up to you.
510
4eaef1578a15 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 447
diff changeset
27
4eaef1578a15 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 447
diff changeset
28 So, if your system uses lock files rather than flock, then the only way
4eaef1578a15 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 447
diff changeset
29 you can get proper operation is to enable movemail to write lockfiles there.
4eaef1578a15 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 447
diff changeset
30 This means you must either give that directory access modes
4eaef1578a15 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 447
diff changeset
31 that permit everyone to write lockfiles in it, or you must make movemail
4eaef1578a15 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 447
diff changeset
32 a setuid or setgid program. */
4eaef1578a15 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 447
diff changeset
33
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 /*
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 * Modified January, 1986 by Michael R. Gretzinger (Project Athena)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 *
14649
2925c3f0d038 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
37 * Added POP (Post Office Protocol) service. When compiled -DMAIL_USE_POP
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 * movemail will accept input filename arguments of the form
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 * "po:username". This will cause movemail to open a connection to
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 * a pop server running on $MAILHOST (environment variable). Movemail
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 * must be setuid to root in order to work with POP.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48314
diff changeset
42 *
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 * New module: popmail.c
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 * Modified routines:
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
45 * main - added code within #ifdef MAIL_USE_POP; added setuid (getuid ())
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48314
diff changeset
46 * after POP code.
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 * New routines in movemail.c:
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 * get_errmsg - return pointer to system error message
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 *
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
50 * Modified August, 1993 by Jonathan Kamens (OpenVision Technologies)
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
51 *
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
52 * Move all of the POP code into a separate file, "pop.c".
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
53 * Use strerror instead of get_errmsg.
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
54 *
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 */
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56
29046
7d5565d3cf32 Include config.h, not ../src/config.h.
Dave Love <fx@gnu.org>
parents: 27507
diff changeset
57 #include <config.h>
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 #include <sys/types.h>
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 #include <sys/stat.h>
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 #include <sys/file.h>
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
61 #include <stdio.h>
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 #include <errno.h>
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
63
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
64 #include <getopt.h>
31317
d431eeb4028f (toplevel): Remove redundant <fcntl.h>. Provide definitions for F_OK
Eli Zaretskii <eliz@gnu.org>
parents: 31274
diff changeset
65 #ifdef HAVE_UNISTD_H
d431eeb4028f (toplevel): Remove redundant <fcntl.h>. Provide definitions for F_OK
Eli Zaretskii <eliz@gnu.org>
parents: 31274
diff changeset
66 #include <unistd.h>
d431eeb4028f (toplevel): Remove redundant <fcntl.h>. Provide definitions for F_OK
Eli Zaretskii <eliz@gnu.org>
parents: 31274
diff changeset
67 #endif
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
68 #ifdef HAVE_FCNTL_H
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
69 #include <fcntl.h>
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
70 #endif
31317
d431eeb4028f (toplevel): Remove redundant <fcntl.h>. Provide definitions for F_OK
Eli Zaretskii <eliz@gnu.org>
parents: 31274
diff changeset
71 #include "syswait.h"
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
72 #ifdef MAIL_USE_POP
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
73 #include "pop.h"
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
74 #endif
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75
5446
726a3dc867a6 (malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents: 5435
diff changeset
76 #ifdef MSDOS
726a3dc867a6 (malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents: 5435
diff changeset
77 #undef access
726a3dc867a6 (malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents: 5435
diff changeset
78 #endif /* MSDOS */
726a3dc867a6 (malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents: 5435
diff changeset
79
15105
328889a58f6d (DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents: 15101
diff changeset
80 #ifndef DIRECTORY_SEP
328889a58f6d (DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents: 15101
diff changeset
81 #define DIRECTORY_SEP '/'
328889a58f6d (DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents: 15101
diff changeset
82 #endif
328889a58f6d (DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents: 15101
diff changeset
83 #ifndef IS_DIRECTORY_SEP
328889a58f6d (DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents: 15101
diff changeset
84 #define IS_DIRECTORY_SEP(_c_) ((_c_) == DIRECTORY_SEP)
328889a58f6d (DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents: 15101
diff changeset
85 #endif
328889a58f6d (DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents: 15101
diff changeset
86
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
87 #ifdef WINDOWSNT
21905
b1e64615e700 [WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents: 21396
diff changeset
88 #include "ntlib.h"
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
89 #undef access
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
90 #undef unlink
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
91 #define fork() 0
22316
95d38cf99591 (sys_wait): Rename to wait.
Andrew Innes <andrewi@gnu.org>
parents: 22235
diff changeset
92 #define wait(var) (*(var) = 0)
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
93 /* Unfortunately, Samba doesn't seem to properly lock Unix files even
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
94 though the locking call succeeds (and indeed blocks local access from
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
95 other NT programs). If you have direct file access using an NFS
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
96 client or something other than Samba, the locking call might work
21905
b1e64615e700 [WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents: 21396
diff changeset
97 properly - make sure it does before you enable this!
b1e64615e700 [WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents: 21396
diff changeset
98
b1e64615e700 [WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents: 21396
diff changeset
99 [18-Feb-97 andrewi] I now believe my comment above to be incorrect,
b1e64615e700 [WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents: 21396
diff changeset
100 since it was based on a misunderstanding of how locking calls are
b1e64615e700 [WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents: 21396
diff changeset
101 implemented and used on Unix. */
b1e64615e700 [WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents: 21396
diff changeset
102 //#define DISABLE_DIRECT_ACCESS
b1e64615e700 [WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents: 21396
diff changeset
103
b1e64615e700 [WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents: 21396
diff changeset
104 #include <fcntl.h>
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
105 #endif /* WINDOWSNT */
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
106
27
f60b88b46f97 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25
diff changeset
107 #ifndef F_OK
f60b88b46f97 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25
diff changeset
108 #define F_OK 0
f60b88b46f97 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25
diff changeset
109 #define X_OK 1
f60b88b46f97 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25
diff changeset
110 #define W_OK 2
f60b88b46f97 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25
diff changeset
111 #define R_OK 4
f60b88b46f97 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25
diff changeset
112 #endif
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113
87833
36e4ffad31fe * movemail.c: Remove references to XENIX.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87730
diff changeset
114 #ifdef WINDOWSNT
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 #include <sys/locking.h>
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 #endif
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
118 #ifdef MAIL_USE_LOCKF
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
119 #define MAIL_USE_SYSTEM_LOCK
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
120 #endif
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
121
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
122 #ifdef MAIL_USE_FLOCK
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
123 #define MAIL_USE_SYSTEM_LOCK
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
124 #endif
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
125
25
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
126 #ifdef MAIL_USE_MMDF
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
127 extern int lk_open (), lk_close ();
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
128 #endif
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
129
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
130 #if !defined (MAIL_USE_SYSTEM_LOCK) && !defined (MAIL_USE_MMDF) && \
51112
b0811540692f Check HAVE_LIBLOCKFILE like HAVE_LIBMAIL.
Dave Love <fx@gnu.org>
parents: 49600
diff changeset
131 (defined (HAVE_LIBMAIL) || defined (HAVE_LIBLOCKFILE)) && \
b0811540692f Check HAVE_LIBLOCKFILE like HAVE_LIBMAIL.
Dave Love <fx@gnu.org>
parents: 49600
diff changeset
132 defined (HAVE_MAILLOCK_H)
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
133 #include <maillock.h>
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
134 /* We can't use maillock unless we know what directory system mail
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
135 files appear in. */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
136 #ifdef MAILDIR
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
137 #define MAIL_USE_MAILLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
138 static char *mail_spool_name ();
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
139 #endif
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
140 #endif
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
141
571
3dfecf91a09b *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 510
diff changeset
142 #ifndef errno
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 extern int errno;
571
3dfecf91a09b *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 510
diff changeset
144 #endif
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
145 char *strerror ();
31376
f5cd669613d2 (index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents: 31317
diff changeset
146 #ifdef HAVE_INDEX
f5cd669613d2 (index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents: 31317
diff changeset
147 extern char *index __P ((const char *, int));
f5cd669613d2 (index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents: 31317
diff changeset
148 #endif
f5cd669613d2 (index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents: 31317
diff changeset
149 #ifdef HAVE_RINDEX
f5cd669613d2 (index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents: 31317
diff changeset
150 extern char *rindex __P((const char *, int));
f5cd669613d2 (index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents: 31317
diff changeset
151 #endif
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
152
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
153 void fatal ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
154 void error ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
155 void pfatal_with_name ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
156 void pfatal_and_delete ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
157 char *concat ();
11675
496576df5d46 (xmalloc): Declare it to return long *.
Richard M. Stallman <rms@gnu.org>
parents: 10399
diff changeset
158 long *xmalloc ();
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
159 int popmail ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
160 int pop_retr ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
161 int mbx_write ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
162 int mbx_delimit_begin ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
163 int mbx_delimit_end ();
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 /* Nonzero means this is name of a lock file to delete on fatal error. */
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 char *delete_lockname;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
168 int
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 main (argc, argv)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 int argc;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 char **argv;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 {
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 char *inname, *outname;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 int indesc, outdesc;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 int nread;
96620
3bea8ede5bd0 * syswait.h: Remove old if 0 code. Do not define WAITTYPE, it was
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94828
diff changeset
176 int status;
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
177 int c, preserve_mail = 0;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
179 #ifndef MAIL_USE_SYSTEM_LOCK
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 struct stat st;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 long now;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 int tem;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 char *lockname, *p;
601
3db1540d4b97 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 580
diff changeset
184 char *tempname;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 int desc;
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
186 #endif /* not MAIL_USE_SYSTEM_LOCK */
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
188 #ifdef MAIL_USE_MAILLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
189 char *spool_name;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
190 #endif
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
191
23182
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
192 #ifdef MAIL_USE_POP
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
193 int pop_reverse_order = 0;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
194 # define ARGSTR "pr"
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
195 #else /* ! MAIL_USE_POP */
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
196 # define ARGSTR "p"
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
197 #endif /* MAIL_USE_POP */
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
198
31080
7ae519dba237 (main) [WINDOWSNT]: Force binary mode for fileio.
Andrew Innes <andrewi@gnu.org>
parents: 29046
diff changeset
199 #ifdef WINDOWSNT
7ae519dba237 (main) [WINDOWSNT]: Force binary mode for fileio.
Andrew Innes <andrewi@gnu.org>
parents: 29046
diff changeset
200 /* Ensure all file i/o is in binary mode. */
7ae519dba237 (main) [WINDOWSNT]: Force binary mode for fileio.
Andrew Innes <andrewi@gnu.org>
parents: 29046
diff changeset
201 _fmode = _O_BINARY;
7ae519dba237 (main) [WINDOWSNT]: Force binary mode for fileio.
Andrew Innes <andrewi@gnu.org>
parents: 29046
diff changeset
202 #endif
7ae519dba237 (main) [WINDOWSNT]: Force binary mode for fileio.
Andrew Innes <andrewi@gnu.org>
parents: 29046
diff changeset
203
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 delete_lockname = 0;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205
23182
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
206 while ((c = getopt (argc, argv, ARGSTR)) != EOF)
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
207 {
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
208 switch (c) {
23182
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
209 #ifdef MAIL_USE_POP
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
210 case 'r':
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
211 pop_reverse_order = 1;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
212 break;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
213 #endif
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
214 case 'p':
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
215 preserve_mail++;
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
216 break;
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
217 default:
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
218 exit (EXIT_FAILURE);
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
219 }
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
220 }
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
221
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
222 if (
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
223 #ifdef MAIL_USE_POP
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
224 (argc - optind < 2) || (argc - optind > 3)
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
225 #else
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
226 (argc - optind != 2)
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
227 #endif
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
228 )
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
229 {
52069
76d453ac3c4f (main): Fix having macros in a printf statement.
Juanma Barranquero <lekktu@gmail.com>
parents: 51112
diff changeset
230 #ifdef MAIL_USE_POP
22235
ee90e9da3a70 Undo this previous change:
Richard M. Stallman <rms@gnu.org>
parents: 21905
diff changeset
231 fprintf (stderr, "Usage: movemail [-p] inbox destfile%s\n",
52069
76d453ac3c4f (main): Fix having macros in a printf statement.
Juanma Barranquero <lekktu@gmail.com>
parents: 51112
diff changeset
232 " [POP-password]");
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
233 #else
52069
76d453ac3c4f (main): Fix having macros in a printf statement.
Juanma Barranquero <lekktu@gmail.com>
parents: 51112
diff changeset
234 fprintf (stderr, "Usage: movemail [-p] inbox destfile%s\n", "");
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
235 #endif
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
236 exit (EXIT_FAILURE);
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
237 }
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
239 inname = argv[optind];
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
240 outname = argv[optind+1];
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241
25
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
242 #ifdef MAIL_USE_MMDF
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
243 mmdf_init (argv[0]);
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
244 #endif
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
245
12793
0464324deda7 (main): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 12777
diff changeset
246 if (*outname == 0)
59918
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
247 fatal ("Destination file name is empty", 0, 0);
12793
0464324deda7 (main): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 12777
diff changeset
248
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
249 /* Check access to output file. */
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 if (access (outname, F_OK) == 0 && access (outname, W_OK) != 0)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 pfatal_with_name (outname);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 12793
diff changeset
253 /* Also check that outname's directory is writable to the real uid. */
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 {
5446
726a3dc867a6 (malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents: 5435
diff changeset
255 char *buf = (char *) xmalloc (strlen (outname) + 1);
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
256 char *p;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 strcpy (buf, outname);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 p = buf + strlen (buf);
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
259 while (p > buf && !IS_DIRECTORY_SEP (p[-1]))
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 *--p = 0;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 if (p == buf)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 *p++ = '.';
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 if (access (buf, W_OK) != 0)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 pfatal_with_name (buf);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 free (buf);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 #ifdef MAIL_USE_POP
3309
f00054d40753 * movemail.c [MAIL_USE_POP] (main): Don't use non-portable
Jim Blandy <jimb@redhat.com>
parents: 733
diff changeset
269 if (!strncmp (inname, "po:", 3))
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 {
12442
981986d7d82f (main) [MAIL_USE_POP]: When a user specifies a
Richard M. Stallman <rms@gnu.org>
parents: 12389
diff changeset
271 int status;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
273 status = popmail (inname + 3, outname, preserve_mail,
23182
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
274 (argc - optind == 3) ? argv[optind+2] : NULL,
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
275 pop_reverse_order);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 exit (status);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
279 setuid (getuid ());
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 #endif /* MAIL_USE_POP */
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
282 #ifndef DISABLE_DIRECT_ACCESS
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
283
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
284 /* Check access to input file. */
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
285 if (access (inname, R_OK | W_OK) != 0)
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
286 pfatal_with_name (inname);
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
287
25
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
288 #ifndef MAIL_USE_MMDF
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
289 #ifndef MAIL_USE_SYSTEM_LOCK
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
290 #ifdef MAIL_USE_MAILLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
291 spool_name = mail_spool_name (inname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
292 if (! spool_name)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
293 #endif
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
294 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
295 /* Use a lock file named after our first argument with .lock appended:
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
296 If it exists, the mail file is locked. */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
297 /* Note: this locking mechanism is *required* by the mailer
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
298 (on systems which use it) to prevent loss of mail.
351
5729b1cc3942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 127
diff changeset
299
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
300 On systems that use a lock file, extracting the mail without locking
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
301 WILL occasionally cause loss of mail due to timing errors!
351
5729b1cc3942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 127
diff changeset
302
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
303 So, if creation of the lock file fails
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
304 due to access permission on the mail spool directory,
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
305 you simply MUST change the permission
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
306 and/or make movemail a setgid program
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
307 so it can create lock files properly.
351
5729b1cc3942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 127
diff changeset
308
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
309 You might also wish to verify that your system is one
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
310 which uses lock files for this purpose. Some systems use other methods.
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
311
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
312 If your system uses the `flock' system call for mail locking,
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
313 define MAIL_USE_SYSTEM_LOCK in config.h or the s-*.h file
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
314 and recompile movemail. If the s- file for your system
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
315 should define MAIL_USE_SYSTEM_LOCK but does not, send a bug report
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
316 to bug-gnu-emacs@prep.ai.mit.edu so we can fix it. */
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
318 lockname = concat (inname, ".lock", "");
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
319 tempname = (char *) xmalloc (strlen (inname) + strlen ("EXXXXXX") + 1);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
320 strcpy (tempname, inname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
321 p = tempname + strlen (tempname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
322 while (p != tempname && !IS_DIRECTORY_SEP (p[-1]))
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
323 p--;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
324 *p = 0;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
325 strcpy (p, "EXXXXXX");
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
326 mktemp (tempname);
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
327 unlink (tempname);
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
328
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
329 while (1)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
330 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
331 /* Create the lock file, but not under the lock file name. */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
332 /* Give up if cannot do that. */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
333 desc = open (tempname, O_WRONLY | O_CREAT | O_EXCL, 0666);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
334 if (desc < 0)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
335 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
336 char *message = (char *) xmalloc (strlen (tempname) + 50);
27507
b7db0c0368dc Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 27504
diff changeset
337 sprintf (message, "creating %s, which would become the lock file",
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
338 tempname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
339 pfatal_with_name (message);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
340 }
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
341 close (desc);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
343 tem = link (tempname, lockname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
344 unlink (tempname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
345 if (tem >= 0)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
346 break;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
347 sleep (1);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
348
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
349 /* If lock file is five minutes old, unlock it.
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
350 Five minutes should be good enough to cope with crashes
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
351 and wedgitude, and long enough to avoid being fooled
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
352 by time differences between machines. */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
353 if (stat (lockname, &st) >= 0)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
354 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
355 now = time (0);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
356 if (st.st_ctime < now - 300)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
357 unlink (lockname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
358 }
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 }
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
360
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
361 delete_lockname = lockname;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 }
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
363 #endif /* not MAIL_USE_SYSTEM_LOCK */
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
364 #endif /* not MAIL_USE_MMDF */
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
366 if (fork () == 0)
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
367 {
16366
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
368 int lockcount = 0;
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
369 int status = 0;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
370 #if defined (MAIL_USE_MAILLOCK) && defined (HAVE_TOUCHLOCK)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
371 long touched_lock, now;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
372 #endif
16366
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
373
6813
76f93e487956 (main): Use setuid, not seteuid.
Karl Heuer <kwzh@gnu.org>
parents: 6690
diff changeset
374 setuid (getuid ());
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
375
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
376 #ifndef MAIL_USE_MMDF
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
377 #ifdef MAIL_USE_SYSTEM_LOCK
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
378 indesc = open (inname, O_RDWR);
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
379 #else /* if not MAIL_USE_SYSTEM_LOCK */
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
380 indesc = open (inname, O_RDONLY);
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
381 #endif /* not MAIL_USE_SYSTEM_LOCK */
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
382 #else /* MAIL_USE_MMDF */
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
383 indesc = lk_open (inname, O_RDONLY, 0, 0, 10);
25
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
384 #endif /* MAIL_USE_MMDF */
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
385
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
386 if (indesc < 0)
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
387 pfatal_with_name (inname);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388
87833
36e4ffad31fe * movemail.c: Remove references to XENIX.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87730
diff changeset
389 #ifdef BSD_SYSTEM
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
390 /* In case movemail is setuid to root, make sure the user can
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
391 read the output file. */
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
392 /* This is desirable for all systems
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
393 but I don't want to assume all have the umask system call */
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
394 umask (umask (0) & 0333);
87833
36e4ffad31fe * movemail.c: Remove references to XENIX.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87730
diff changeset
395 #endif /* BSD_SYSTEM */
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
396 outdesc = open (outname, O_WRONLY | O_CREAT | O_EXCL, 0666);
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
397 if (outdesc < 0)
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
398 pfatal_with_name (outname);
16366
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
399
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
400 /* This label exists so we can retry locking
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
401 after a delay, if it got EAGAIN or EBUSY. */
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
402 retry_lock:
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
403
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
404 /* Try to lock it. */
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
405 #ifdef MAIL_USE_MAILLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
406 if (spool_name)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
407 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
408 /* The "0 - " is to make it a negative number if maillock returns
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
409 non-zero. */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
410 status = 0 - maillock (spool_name, 1);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
411 #ifdef HAVE_TOUCHLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
412 touched_lock = time (0);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
413 #endif
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
414 lockcount = 5;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
415 }
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
416 else
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
417 #endif /* MAIL_USE_MAILLOCK */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
418 {
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
419 #ifdef MAIL_USE_SYSTEM_LOCK
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
420 #ifdef MAIL_USE_LOCKF
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
421 status = lockf (indesc, F_LOCK, 0);
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
422 #else /* not MAIL_USE_LOCKF */
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
423 #ifdef WINDOWSNT
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
424 status = locking (indesc, LK_RLCK, -1L);
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
425 #else
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
426 status = flock (indesc, LOCK_EX);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 #endif
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
428 #endif /* not MAIL_USE_LOCKF */
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
429 #endif /* MAIL_USE_SYSTEM_LOCK */
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
430 }
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431
16366
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
432 /* If it fails, retry up to 5 times
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
433 for certain failure codes. */
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
434 if (status < 0)
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
435 {
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
436 if (++lockcount <= 5)
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
437 {
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
438 #ifdef EAGAIN
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
439 if (errno == EAGAIN)
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
440 {
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
441 sleep (1);
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
442 goto retry_lock;
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
443 }
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
444 #endif
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
445 #ifdef EBUSY
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
446 if (errno == EBUSY)
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
447 {
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
448 sleep (1);
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
449 goto retry_lock;
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
450 }
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
451 #endif
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
452 }
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
453
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
454 pfatal_with_name (inname);
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
455 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48314
diff changeset
456
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
457 {
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
458 char buf[1024];
604
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 601
diff changeset
459
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
460 while (1)
604
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 601
diff changeset
461 {
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
462 nread = read (indesc, buf, sizeof buf);
70280
bca72679c7d8 (main): Check for negative value from `read'.
Richard M. Stallman <rms@gnu.org>
parents: 68647
diff changeset
463 if (nread < 0)
bca72679c7d8 (main): Check for negative value from `read'.
Richard M. Stallman <rms@gnu.org>
parents: 68647
diff changeset
464 pfatal_with_name (inname);
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
465 if (nread != write (outdesc, buf, nread))
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
466 {
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
467 int saved_errno = errno;
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
468 unlink (outname);
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
469 errno = saved_errno;
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
470 pfatal_with_name (outname);
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
471 }
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
472 if (nread < sizeof buf)
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
473 break;
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
474 #if defined (MAIL_USE_MAILLOCK) && defined (HAVE_TOUCHLOCK)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
475 if (spool_name)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
476 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
477 now = time (0);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
478 if (now - touched_lock > 60)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
479 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
480 touchlock ();
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
481 touched_lock = now;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
482 }
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
483 }
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
484 #endif /* MAIL_USE_MAILLOCK */
604
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 601
diff changeset
485 }
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 601
diff changeset
486 }
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487
16218
32f82ca8b41f Replaced all BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 15105
diff changeset
488 #ifdef BSD_SYSTEM
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
489 if (fsync (outdesc) < 0)
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
490 pfatal_and_delete (outname);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 #endif
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
493 /* Check to make sure no errors before we zap the inbox. */
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
494 if (close (outdesc) != 0)
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
495 pfatal_and_delete (outname);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
497 #ifdef MAIL_USE_SYSTEM_LOCK
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
498 if (! preserve_mail)
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
499 {
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
500 ftruncate (indesc, 0L);
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
501 }
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
502 #endif /* MAIL_USE_SYSTEM_LOCK */
25
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
503
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
504 #ifdef MAIL_USE_MMDF
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
505 lk_close (indesc, 0, 0, 0);
25
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
506 #else
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
507 close (indesc);
25
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
508 #endif
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
510 #ifndef MAIL_USE_SYSTEM_LOCK
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
511 if (! preserve_mail)
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
512 {
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
513 /* Delete the input file; if we can't, at least get rid of its
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
514 contents. */
571
3dfecf91a09b *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 510
diff changeset
515 #ifdef MAIL_UNLINK_SPOOL
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
516 /* This is generally bad to do, because it destroys the permissions
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
517 that were set on the file. Better to just empty the file. */
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
518 if (unlink (inname) < 0 && errno != ENOENT)
571
3dfecf91a09b *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 510
diff changeset
519 #endif /* MAIL_UNLINK_SPOOL */
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
520 creat (inname, 0600);
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
521 }
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
522 #endif /* not MAIL_USE_SYSTEM_LOCK */
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
523
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
524 #ifdef MAIL_USE_MAILLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
525 /* This has to occur in the child, i.e., in the process that
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
526 acquired the lock! */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
527 if (spool_name)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
528 mailunlock ();
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
529 #endif
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
530 exit (EXIT_SUCCESS);
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
531 }
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
532
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
533 wait (&status);
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
534 if (!WIFEXITED (status))
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
535 exit (EXIT_FAILURE);
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
536 else if (WRETCODE (status) != 0)
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
537 exit (WRETCODE (status));
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
538
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
539 #if !defined (MAIL_USE_MMDF) && !defined (MAIL_USE_SYSTEM_LOCK)
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
540 #ifdef MAIL_USE_MAILLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
541 if (! spool_name)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
542 #endif /* MAIL_USE_MAILLOCK */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
543 unlink (lockname);
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
544 #endif /* not MAIL_USE_MMDF and not MAIL_USE_SYSTEM_LOCK */
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
545
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
546 #endif /* ! DISABLE_DIRECT_ACCESS */
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
547
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
548 return EXIT_SUCCESS;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 }
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
550
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
551 #ifdef MAIL_USE_MAILLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
552 /* This function uses stat to confirm that the mail directory is
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
553 identical to the directory of the input file, rather than just
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
554 string-comparing the two paths, because one or both of them might
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
555 be symbolic links pointing to some other directory. */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
556 static char *
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
557 mail_spool_name (inname)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
558 char *inname;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
559 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
560 struct stat stat1, stat2;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
561 char *indir, *fname;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
562 int status;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
563
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
564 if (! (fname = rindex (inname, '/')))
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
565 return NULL;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
566
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
567 fname++;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
568
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
569 if (stat (MAILDIR, &stat1) < 0)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
570 return NULL;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
571
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
572 indir = (char *) xmalloc (fname - inname + 1);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
573 strncpy (indir, inname, fname - inname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
574 indir[fname-inname] = '\0';
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
575
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
576
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
577 status = stat (indir, &stat2);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
578
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
579 free (indir);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
580
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
581 if (status < 0)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
582 return NULL;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
583
18626
d3d968d0773a (rindex): Add declaration.
Richard M. Stallman <rms@gnu.org>
parents: 17069
diff changeset
584 if (stat1.st_dev == stat2.st_dev
d3d968d0773a (rindex): Add declaration.
Richard M. Stallman <rms@gnu.org>
parents: 17069
diff changeset
585 && stat1.st_ino == stat2.st_ino)
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
586 return fname;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
587
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
588 return NULL;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
589 }
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
590 #endif /* MAIL_USE_MAILLOCK */
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 /* Print error message and exit. */
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
594 void
59918
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
595 fatal (s1, s2, s3)
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
596 char *s1, *s2, *s3;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 {
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 if (delete_lockname)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 unlink (delete_lockname);
59918
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
600 error (s1, s2, s3);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
601 exit (EXIT_FAILURE);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
604 /* Print error message. `s1' is printf control string, `s2' and `s3'
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
605 are args for it or null. */
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
607 void
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
608 error (s1, s2, s3)
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
609 char *s1, *s2, *s3;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 {
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
611 fprintf (stderr, "movemail: ");
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
612 if (s3)
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
613 fprintf (stderr, s1, s2, s3);
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
614 else if (s2)
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
615 fprintf (stderr, s1, s2);
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
616 else
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
617 fprintf (stderr, s1);
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
618 fprintf (stderr, "\n");
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
621 void
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 pfatal_with_name (name)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 char *name;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 {
59918
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
625 fatal ("%s for %s", strerror (errno), name);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
628 void
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
629 pfatal_and_delete (name)
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
630 char *name;
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
631 {
59918
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
632 char *s = strerror (errno);
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
633 unlink (name);
59918
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
634 fatal ("%s for %s", s, name);
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
635 }
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
636
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 /* Return a newly-allocated string whose contents concatenate those of s1, s2, s3. */
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 char *
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 concat (s1, s2, s3)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 char *s1, *s2, *s3;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 {
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 strcpy (result, s1);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 strcpy (result + len1, s2);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 strcpy (result + len1 + len2, s3);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 *(result + len1 + len2 + len3) = 0;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 return result;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 /* Like malloc but get fatal error if memory is exhausted. */
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655
11675
496576df5d46 (xmalloc): Declare it to return long *.
Richard M. Stallman <rms@gnu.org>
parents: 10399
diff changeset
656 long *
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 xmalloc (size)
571
3dfecf91a09b *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 510
diff changeset
658 unsigned size;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 {
11675
496576df5d46 (xmalloc): Declare it to return long *.
Richard M. Stallman <rms@gnu.org>
parents: 10399
diff changeset
660 long *result = (long *) malloc (size);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 if (!result)
59918
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
662 fatal ("virtual memory exhausted", 0, 0);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 return result;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 /* This is the guts of the interface to the Post Office Protocol. */
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 #ifdef MAIL_USE_POP
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
670 #ifndef WINDOWSNT
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 #include <sys/socket.h>
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 #include <netinet/in.h>
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 #include <netdb.h>
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
674 #else
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
675 #undef _WINSOCKAPI_
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
676 #include <winsock.h>
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
677 #endif
634
52d0ff659265 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 604
diff changeset
678 #include <pwd.h>
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 #define NOTOK (-1)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 #define OK 0
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 #define DONE 1
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 char *progname;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 FILE *sfi;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 FILE *sfo;
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
687 char ibuffer[BUFSIZ];
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
688 char obuffer[BUFSIZ];
29046
7d5565d3cf32 Include config.h, not ../src/config.h.
Dave Love <fx@gnu.org>
parents: 27507
diff changeset
689 char Errmsg[200]; /* POP errors, at least, can exceed
7d5565d3cf32 Include config.h, not ../src/config.h.
Dave Love <fx@gnu.org>
parents: 27507
diff changeset
690 the original length of 80. */
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691
26794
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
692 /*
80028
f56936039199 *** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents: 79748
diff changeset
693 * The full valid syntax for a POP mailbox specification for movemail
26794
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
694 * is "po:username:hostname". The ":hostname" is optional; if it is
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
695 * omitted, the MAILHOST environment variable will be consulted. Note
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
696 * that by the time popmail() is called the "po:" has been stripped
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
697 * off of the front of the mailbox name.
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
698 *
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
699 * If the mailbox is in the form "po:username:hostname", then it is
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
700 * modified by this function -- the second colon is replaced by a
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
701 * null.
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
702 *
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
703 * Return a value suitable for passing to `exit'.
26794
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
704 */
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
705
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
706 int
26794
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
707 popmail (mailbox, outfile, preserve, password, reverse_order)
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
708 char *mailbox;
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
709 char *outfile;
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
710 int preserve;
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
711 char *password;
23182
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
712 int reverse_order;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 {
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
714 int nmsgs, nbytes;
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
715 register int i;
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
716 int mbfi;
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
717 FILE *mbf;
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
718 char *getenv ();
9630
5410efcb7b6e PopServer renamed to popserver throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9612
diff changeset
719 popserver server;
23182
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
720 int start, end, increment;
26794
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
721 char *user, *hostname;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722
26794
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
723 user = mailbox;
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
724 if ((hostname = index(mailbox, ':')))
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
725 *hostname++ = '\0';
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
726
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
727 server = pop_open (hostname, user, password, POP_NO_GETPASS);
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
728 if (! server)
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
729 {
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
730 error ("Error connecting to POP server: %s", pop_error, 0);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
731 return EXIT_FAILURE;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
734 if (pop_stat (server, &nmsgs, &nbytes))
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
735 {
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
736 error ("Error getting message count from POP server: %s", pop_error, 0);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
737 return EXIT_FAILURE;
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
738 }
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
740 if (!nmsgs)
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
741 {
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
742 pop_close (server);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
743 return EXIT_SUCCESS;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
746 mbfi = open (outfile, O_WRONLY | O_CREAT | O_EXCL, 0666);
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
747 if (mbfi < 0)
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
748 {
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
749 pop_close (server);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
750 error ("Error in open: %s, %s", strerror (errno), outfile);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
751 return EXIT_FAILURE;
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
752 }
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
753 fchown (mbfi, getuid (), -1);
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
754
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
755 if ((mbf = fdopen (mbfi, "wb")) == NULL)
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
756 {
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
757 pop_close (server);
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
758 error ("Error in fdopen: %s", strerror (errno), 0);
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
759 close (mbfi);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
760 unlink (outfile);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
761 return EXIT_FAILURE;
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
762 }
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
763
23182
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
764 if (reverse_order)
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
765 {
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
766 start = nmsgs;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
767 end = 1;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
768 increment = -1;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
769 }
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
770 else
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
771 {
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
772 start = 1;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
773 end = nmsgs;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
774 increment = 1;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
775 }
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
776
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
777 for (i = start; i * increment <= end * increment; i += increment)
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
778 {
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
779 mbx_delimit_begin (mbf);
17069
0b2b8a0f7570 (popmail): Remove some unnecessary function
Karl Heuer <kwzh@gnu.org>
parents: 16994
diff changeset
780 if (pop_retr (server, i, mbf) != OK)
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
781 {
59775
d39551ad7f40 (popmail): Don't use Errmsg as format string.
Richard M. Stallman <rms@gnu.org>
parents: 55442
diff changeset
782 error ("%s", Errmsg, 0);
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
783 close (mbfi);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
784 return EXIT_FAILURE;
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
785 }
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
786 mbx_delimit_end (mbf);
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
787 fflush (mbf);
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
788 if (ferror (mbf))
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
789 {
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
790 error ("Error in fflush: %s", strerror (errno), 0);
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
791 pop_close (server);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
792 close (mbfi);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
793 return EXIT_FAILURE;
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
794 }
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
795 }
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
796
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
797 /* On AFS, a call to write only modifies the file in the local
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
798 * workstation's AFS cache. The changes are not written to the server
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
799 * until a call to fsync or close is made. Users with AFS home
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
800 * directories have lost mail when over quota because these checks were
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
801 * not made in previous versions of movemail. */
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
802
16218
32f82ca8b41f Replaced all BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 15105
diff changeset
803 #ifdef BSD_SYSTEM
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
804 if (fsync (mbfi) < 0)
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
805 {
40683
580a1a573d3e (popmail): Always pass two args to `error'.
Richard M. Stallman <rms@gnu.org>
parents: 31376
diff changeset
806 error ("Error in fsync: %s", strerror (errno), 0);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
807 return EXIT_FAILURE;
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
808 }
9491
dd3b83e4ceb0 Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents: 9490
diff changeset
809 #endif
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
810
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
811 if (close (mbfi) == -1)
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
812 {
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
813 error ("Error in close: %s", strerror (errno), 0);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
814 return EXIT_FAILURE;
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
815 }
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
816
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
817 if (! preserve)
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
818 for (i = 1; i <= nmsgs; i++)
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
819 {
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
820 if (pop_delete (server, i))
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
821 {
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
822 error ("Error from POP server: %s", pop_error, 0);
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
823 pop_close (server);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
824 return EXIT_FAILURE;
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
825 }
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
826 }
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
828 if (pop_quit (server))
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
829 {
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
830 error ("Error from POP server: %s", pop_error, 0);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
831 return EXIT_FAILURE;
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
832 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48314
diff changeset
833
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
834 return EXIT_SUCCESS;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836
17069
0b2b8a0f7570 (popmail): Remove some unnecessary function
Karl Heuer <kwzh@gnu.org>
parents: 16994
diff changeset
837 int
0b2b8a0f7570 (popmail): Remove some unnecessary function
Karl Heuer <kwzh@gnu.org>
parents: 16994
diff changeset
838 pop_retr (server, msgno, arg)
9630
5410efcb7b6e PopServer renamed to popserver throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9612
diff changeset
839 popserver server;
48314
f6d89a1d0478 (pop_retr): Declare comment.
Dave Love <fx@gnu.org>
parents: 40683
diff changeset
840 int msgno;
17069
0b2b8a0f7570 (popmail): Remove some unnecessary function
Karl Heuer <kwzh@gnu.org>
parents: 16994
diff changeset
841 FILE *arg;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 {
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
843 extern char *strerror ();
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
844 char *line;
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
845 int ret;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
847 if (pop_retrieve_first (server, msgno, &line))
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
848 {
23290
9917b9a0024d (popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents: 23182
diff changeset
849 char *error = concat ("Error from POP server: ", pop_error, "");
9917b9a0024d (popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents: 23182
diff changeset
850 strncpy (Errmsg, error, sizeof (Errmsg));
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
851 Errmsg[sizeof (Errmsg)-1] = '\0';
23290
9917b9a0024d (popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents: 23182
diff changeset
852 free(error);
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
853 return (NOTOK);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20387
diff changeset
856 while ((ret = pop_retrieve_next (server, &line)) >= 0)
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
857 {
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
858 if (! line)
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
859 break;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20387
diff changeset
861 if (mbx_write (line, ret, arg) != OK)
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
862 {
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
863 strcpy (Errmsg, strerror (errno));
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
864 pop_close (server);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
865 return (NOTOK);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
866 }
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
869 if (ret)
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
870 {
23290
9917b9a0024d (popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents: 23182
diff changeset
871 char *error = concat ("Error from POP server: ", pop_error, "");
9917b9a0024d (popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents: 23182
diff changeset
872 strncpy (Errmsg, error, sizeof (Errmsg));
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
873 Errmsg[sizeof (Errmsg)-1] = '\0';
23290
9917b9a0024d (popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents: 23182
diff changeset
874 free(error);
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
875 return (NOTOK);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876 }
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
877
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
878 return (OK);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
881 /* Do this as a macro instead of using strcmp to save on execution time. */
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
882 #define IS_FROM_LINE(a) ((a[0] == 'F') \
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
883 && (a[1] == 'r') \
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
884 && (a[2] == 'o') \
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
885 && (a[3] == 'm') \
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
886 && (a[4] == ' '))
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
888 int
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20387
diff changeset
889 mbx_write (line, len, mbf)
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
890 char *line;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20387
diff changeset
891 int len;
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
892 FILE *mbf;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 {
20387
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
894 #ifdef MOVEMAIL_QUOTE_POP_FROM_LINES
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
895 if (IS_FROM_LINE (line))
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
896 {
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
897 if (fputc ('>', mbf) == EOF)
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
898 return (NOTOK);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
899 }
20387
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
900 #endif
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
901 if (line[0] == '\037')
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
902 {
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
903 if (fputs ("^_", mbf) == EOF)
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
904 return (NOTOK);
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
905 line++;
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
906 len--;
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
907 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48314
diff changeset
908 if (fwrite (line, 1, len, mbf) != len)
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
909 return (NOTOK);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
910 if (fputc (0x0a, mbf) == EOF)
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
911 return (NOTOK);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
912 return (OK);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
915 int
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
916 mbx_delimit_begin (mbf)
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
917 FILE *mbf;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 {
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
919 if (fputs ("\f\n0, unseen,,\n", mbf) == EOF)
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
920 return (NOTOK);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
921 return (OK);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
924 int
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
925 mbx_delimit_end (mbf)
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
926 FILE *mbf;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 {
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
928 if (putc ('\037', mbf) == EOF)
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
929 return (NOTOK);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
930 return (OK);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 #endif /* MAIL_USE_POP */
5532
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
934
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
935 #ifndef HAVE_STRERROR
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
936 char *
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
937 strerror (errnum)
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
938 int errnum;
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
939 {
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
940 extern char *sys_errlist[];
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
941 extern int sys_nerr;
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
942
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
943 if (errnum >= 0 && errnum < sys_nerr)
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
944 return sys_errlist[errnum];
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
945 return (char *) "Unknown error";
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
946 }
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
947
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
948 #endif /* ! HAVE_STRERROR */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52069
diff changeset
949
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52069
diff changeset
950 /* arch-tag: 1c323112-41fe-4fe5-8de9-494de631f73f
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52069
diff changeset
951 (do not change this comment) */
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
952
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
953 /* movemail.c ends here */