annotate lib-src/movemail.c @ 105832:56392d7b0ff4

(byte-compile-file-form-defvar) (byte-compile-file-form-define-abbrev-table) (byte-compile-file-form-custom-declare-variable) (byte-compile-variable-ref, byte-compile-defvar): Whether or not a warning is enabled should only affect whether we issue the warning, not whether or not we collect the relevant data. Eg warnings can be turned on and off throughout the course of a file.
author Glenn Morris <rgm@gnu.org>
date Tue, 03 Nov 2009 03:16:23 +0000
parents e85d013e3140
children 1d1d5d9bd884
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,
100958
a9f7e446141d Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 100823
diff changeset
4 2005, 2006, 2007, 2008, 2009 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>
102006
86059ded629a Include time.h unconditionally.
Chong Yidong <cyd@stupidchicken.com>
parents: 101936
diff changeset
63 #include <time.h>
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
64
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
65 #include <getopt.h>
31317
d431eeb4028f (toplevel): Remove redundant <fcntl.h>. Provide definitions for F_OK
Eli Zaretskii <eliz@gnu.org>
parents: 31274
diff changeset
66 #ifdef HAVE_UNISTD_H
d431eeb4028f (toplevel): Remove redundant <fcntl.h>. Provide definitions for F_OK
Eli Zaretskii <eliz@gnu.org>
parents: 31274
diff changeset
67 #include <unistd.h>
d431eeb4028f (toplevel): Remove redundant <fcntl.h>. Provide definitions for F_OK
Eli Zaretskii <eliz@gnu.org>
parents: 31274
diff changeset
68 #endif
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
69 #ifdef HAVE_FCNTL_H
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
70 #include <fcntl.h>
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
71 #endif
31317
d431eeb4028f (toplevel): Remove redundant <fcntl.h>. Provide definitions for F_OK
Eli Zaretskii <eliz@gnu.org>
parents: 31274
diff changeset
72 #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
73 #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
74 #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
75 #endif
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76
5446
726a3dc867a6 (malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents: 5435
diff changeset
77 #ifdef MSDOS
726a3dc867a6 (malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents: 5435
diff changeset
78 #undef access
726a3dc867a6 (malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents: 5435
diff changeset
79 #endif /* MSDOS */
726a3dc867a6 (malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents: 5435
diff changeset
80
15105
328889a58f6d (DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents: 15101
diff changeset
81 #ifndef DIRECTORY_SEP
328889a58f6d (DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents: 15101
diff changeset
82 #define DIRECTORY_SEP '/'
328889a58f6d (DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents: 15101
diff changeset
83 #endif
328889a58f6d (DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents: 15101
diff changeset
84 #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
85 #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
86 #endif
328889a58f6d (DIRECTORY_SEP, IS_DIRECTORY_SEP): Definitions copied from lisp.h.
Richard M. Stallman <rms@gnu.org>
parents: 15101
diff changeset
87
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
88 #ifdef WINDOWSNT
21905
b1e64615e700 [WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents: 21396
diff changeset
89 #include "ntlib.h"
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
90 #undef access
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
91 #undef unlink
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
92 #define fork() 0
22316
95d38cf99591 (sys_wait): Rename to wait.
Andrew Innes <andrewi@gnu.org>
parents: 22235
diff changeset
93 #define wait(var) (*(var) = 0)
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
94 /* 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
95 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
96 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
97 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
98 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
99
b1e64615e700 [WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents: 21396
diff changeset
100 [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
101 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
102 implemented and used on Unix. */
b1e64615e700 [WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents: 21396
diff changeset
103 //#define DISABLE_DIRECT_ACCESS
b1e64615e700 [WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents: 21396
diff changeset
104
b1e64615e700 [WINDOWSNT]: Undefine DISABLE_DIRECT_ACCESS. Force
Richard M. Stallman <rms@gnu.org>
parents: 21396
diff changeset
105 #include <fcntl.h>
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
106 #endif /* WINDOWSNT */
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
107
27
f60b88b46f97 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25
diff changeset
108 #ifndef F_OK
f60b88b46f97 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25
diff changeset
109 #define F_OK 0
f60b88b46f97 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25
diff changeset
110 #define X_OK 1
f60b88b46f97 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25
diff changeset
111 #define W_OK 2
f60b88b46f97 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25
diff changeset
112 #define R_OK 4
f60b88b46f97 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25
diff changeset
113 #endif
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114
87833
36e4ffad31fe * movemail.c: Remove references to XENIX.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87730
diff changeset
115 #ifdef WINDOWSNT
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 #include <sys/locking.h>
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 #endif
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
119 #ifdef MAIL_USE_LOCKF
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
120 #define MAIL_USE_SYSTEM_LOCK
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
121 #endif
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
122
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
123 #ifdef MAIL_USE_FLOCK
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
124 #define MAIL_USE_SYSTEM_LOCK
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
125 #endif
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
126
25
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
127 #ifdef MAIL_USE_MMDF
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
128 extern int lk_open (), lk_close ();
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
129 #endif
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
130
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
131 #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
132 (defined (HAVE_LIBMAIL) || defined (HAVE_LIBLOCKFILE)) && \
b0811540692f Check HAVE_LIBLOCKFILE like HAVE_LIBMAIL.
Dave Love <fx@gnu.org>
parents: 49600
diff changeset
133 defined (HAVE_MAILLOCK_H)
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
134 #include <maillock.h>
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
135 /* 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
136 files appear in. */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
137 #ifdef MAILDIR
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
138 #define MAIL_USE_MAILLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
139 static char *mail_spool_name ();
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 #endif
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
142
571
3dfecf91a09b *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 510
diff changeset
143 #ifndef errno
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 extern int errno;
571
3dfecf91a09b *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 510
diff changeset
145 #endif
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
146 char *strerror ();
31376
f5cd669613d2 (index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents: 31317
diff changeset
147 #ifdef HAVE_INDEX
f5cd669613d2 (index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents: 31317
diff changeset
148 extern char *index __P ((const char *, int));
f5cd669613d2 (index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents: 31317
diff changeset
149 #endif
f5cd669613d2 (index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents: 31317
diff changeset
150 #ifdef HAVE_RINDEX
f5cd669613d2 (index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents: 31317
diff changeset
151 extern char *rindex __P((const char *, int));
f5cd669613d2 (index, rindex): Prototype conditionally.
Dave Love <fx@gnu.org>
parents: 31317
diff changeset
152 #endif
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
153
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
154 void fatal ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
155 void error ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
156 void pfatal_with_name ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
157 void pfatal_and_delete ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
158 char *concat ();
11675
496576df5d46 (xmalloc): Declare it to return long *.
Richard M. Stallman <rms@gnu.org>
parents: 10399
diff changeset
159 long *xmalloc ();
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
160 int popmail ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
161 int pop_retr ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
162 int mbx_write ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
163 int mbx_delimit_begin ();
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
164 int mbx_delimit_end ();
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 /* 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
167 char *delete_lockname;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
169 int
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 main (argc, argv)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 int argc;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 char **argv;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 {
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 char *inname, *outname;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 int indesc, outdesc;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 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
177 int status;
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
178 int c, preserve_mail = 0;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
180 #ifndef MAIL_USE_SYSTEM_LOCK
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 struct stat st;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 long now;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 int tem;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 char *lockname, *p;
601
3db1540d4b97 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 580
diff changeset
185 char *tempname;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 int desc;
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
187 #endif /* not MAIL_USE_SYSTEM_LOCK */
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
189 #ifdef MAIL_USE_MAILLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
190 char *spool_name;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
191 #endif
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
192
23182
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
193 #ifdef MAIL_USE_POP
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
194 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
195 # define ARGSTR "pr"
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
196 #else /* ! MAIL_USE_POP */
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
197 # define ARGSTR "p"
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
198 #endif /* MAIL_USE_POP */
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
199
31080
7ae519dba237 (main) [WINDOWSNT]: Force binary mode for fileio.
Andrew Innes <andrewi@gnu.org>
parents: 29046
diff changeset
200 #ifdef WINDOWSNT
7ae519dba237 (main) [WINDOWSNT]: Force binary mode for fileio.
Andrew Innes <andrewi@gnu.org>
parents: 29046
diff changeset
201 /* 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
202 _fmode = _O_BINARY;
7ae519dba237 (main) [WINDOWSNT]: Force binary mode for fileio.
Andrew Innes <andrewi@gnu.org>
parents: 29046
diff changeset
203 #endif
7ae519dba237 (main) [WINDOWSNT]: Force binary mode for fileio.
Andrew Innes <andrewi@gnu.org>
parents: 29046
diff changeset
204
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 delete_lockname = 0;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206
23182
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
207 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
208 {
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
209 switch (c) {
23182
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
210 #ifdef MAIL_USE_POP
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
211 case 'r':
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
212 pop_reverse_order = 1;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
213 break;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
214 #endif
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
215 case 'p':
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
216 preserve_mail++;
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
217 break;
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
218 default:
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
219 exit (EXIT_FAILURE);
16909
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
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
223 if (
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
224 #ifdef MAIL_USE_POP
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
225 (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
226 #else
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
227 (argc - optind != 2)
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
228 #endif
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
229 )
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
230 {
52069
76d453ac3c4f (main): Fix having macros in a printf statement.
Juanma Barranquero <lekktu@gmail.com>
parents: 51112
diff changeset
231 #ifdef MAIL_USE_POP
102385
e85d013e3140 (main) [MAIL_USE_POP]: Add -r to usage message.
Glenn Morris <rgm@gnu.org>
parents: 102006
diff changeset
232 fprintf (stderr, "Usage: movemail [-p] [-r] inbox destfile%s\n",
52069
76d453ac3c4f (main): Fix having macros in a printf statement.
Juanma Barranquero <lekktu@gmail.com>
parents: 51112
diff changeset
233 " [POP-password]");
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
234 #else
52069
76d453ac3c4f (main): Fix having macros in a printf statement.
Juanma Barranquero <lekktu@gmail.com>
parents: 51112
diff changeset
235 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
236 #endif
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
237 exit (EXIT_FAILURE);
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
238 }
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
240 inname = argv[optind];
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
241 outname = argv[optind+1];
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242
25
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
243 #ifdef MAIL_USE_MMDF
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
244 mmdf_init (argv[0]);
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
245 #endif
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
246
12793
0464324deda7 (main): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 12777
diff changeset
247 if (*outname == 0)
59918
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
248 fatal ("Destination file name is empty", 0, 0);
12793
0464324deda7 (main): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 12777
diff changeset
249
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
250 /* Check access to output file. */
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 if (access (outname, F_OK) == 0 && access (outname, W_OK) != 0)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 pfatal_with_name (outname);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 12793
diff changeset
254 /* 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
255 {
5446
726a3dc867a6 (malloc): Don't declare it.
Richard M. Stallman <rms@gnu.org>
parents: 5435
diff changeset
256 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
257 char *p;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 strcpy (buf, outname);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 p = buf + strlen (buf);
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
260 while (p > buf && !IS_DIRECTORY_SEP (p[-1]))
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 *--p = 0;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 if (p == buf)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 *p++ = '.';
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 if (access (buf, W_OK) != 0)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 pfatal_with_name (buf);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 free (buf);
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
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 #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
270 if (!strncmp (inname, "po:", 3))
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 {
12442
981986d7d82f (main) [MAIL_USE_POP]: When a user specifies a
Richard M. Stallman <rms@gnu.org>
parents: 12389
diff changeset
272 int status;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
274 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
275 (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
276 pop_reverse_order);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 exit (status);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
280 setuid (getuid ());
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 #endif /* MAIL_USE_POP */
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
283 #ifndef DISABLE_DIRECT_ACCESS
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
284
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
285 /* Check access to input file. */
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
286 if (access (inname, R_OK | W_OK) != 0)
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
287 pfatal_with_name (inname);
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
288
25
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
289 #ifndef MAIL_USE_MMDF
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
290 #ifndef MAIL_USE_SYSTEM_LOCK
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
291 #ifdef MAIL_USE_MAILLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
292 spool_name = mail_spool_name (inname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
293 if (! spool_name)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
294 #endif
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
295 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
296 /* 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
297 If it exists, the mail file is locked. */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
298 /* Note: this locking mechanism is *required* by the mailer
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
299 (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
300
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
301 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
302 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
303
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
304 So, if creation of the lock file fails
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
305 due to access permission on the mail spool directory,
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
306 you simply MUST change the permission
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
307 and/or make movemail a setgid program
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
308 so it can create lock files properly.
351
5729b1cc3942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 127
diff changeset
309
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
310 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
311 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
312
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
313 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
314 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
315 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
316 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
317 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
318
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
319 lockname = concat (inname, ".lock", "");
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
320 tempname = (char *) xmalloc (strlen (inname) + strlen ("EXXXXXX") + 1);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
321 strcpy (tempname, inname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
322 p = tempname + strlen (tempname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
323 while (p != tempname && !IS_DIRECTORY_SEP (p[-1]))
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
324 p--;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
325 *p = 0;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
326 strcpy (p, "EXXXXXX");
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
327 mktemp (tempname);
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
328 unlink (tempname);
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
329
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
330 while (1)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
331 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
332 /* 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
333 /* Give up if cannot do that. */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
334 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
335 if (desc < 0)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
336 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
337 char *message = (char *) xmalloc (strlen (tempname) + 50);
27507
b7db0c0368dc Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 27504
diff changeset
338 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
339 tempname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
340 pfatal_with_name (message);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
341 }
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
342 close (desc);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
344 tem = link (tempname, lockname);
100823
d893844c75a7 (main): Fatal if hard links cannot be created.
Chong Yidong <cyd@stupidchicken.com>
parents: 96620
diff changeset
345
d893844c75a7 (main): Fatal if hard links cannot be created.
Chong Yidong <cyd@stupidchicken.com>
parents: 96620
diff changeset
346 #ifdef EPERM
d893844c75a7 (main): Fatal if hard links cannot be created.
Chong Yidong <cyd@stupidchicken.com>
parents: 96620
diff changeset
347 if (tem < 0 && errno == EPERM)
d893844c75a7 (main): Fatal if hard links cannot be created.
Chong Yidong <cyd@stupidchicken.com>
parents: 96620
diff changeset
348 fatal ("Unable to create hard link between %s and %s",
d893844c75a7 (main): Fatal if hard links cannot be created.
Chong Yidong <cyd@stupidchicken.com>
parents: 96620
diff changeset
349 tempname, lockname);
d893844c75a7 (main): Fatal if hard links cannot be created.
Chong Yidong <cyd@stupidchicken.com>
parents: 96620
diff changeset
350 #endif
d893844c75a7 (main): Fatal if hard links cannot be created.
Chong Yidong <cyd@stupidchicken.com>
parents: 96620
diff changeset
351
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
352 unlink (tempname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
353 if (tem >= 0)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
354 break;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
355 sleep (1);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
356
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
357 /* If lock file is five minutes old, unlock it.
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
358 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
359 and wedgitude, and long enough to avoid being fooled
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
360 by time differences between machines. */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
361 if (stat (lockname, &st) >= 0)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
362 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
363 now = time (0);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
364 if (st.st_ctime < now - 300)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
365 unlink (lockname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
366 }
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 }
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
368
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
369 delete_lockname = lockname;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 }
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
371 #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
372 #endif /* not MAIL_USE_MMDF */
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
374 if (fork () == 0)
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
375 {
16366
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
376 int lockcount = 0;
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
377 int status = 0;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
378 #if defined (MAIL_USE_MAILLOCK) && defined (HAVE_TOUCHLOCK)
102006
86059ded629a Include time.h unconditionally.
Chong Yidong <cyd@stupidchicken.com>
parents: 101936
diff changeset
379 time_t touched_lock, now;
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
380 #endif
16366
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
381
6813
76f93e487956 (main): Use setuid, not seteuid.
Karl Heuer <kwzh@gnu.org>
parents: 6690
diff changeset
382 setuid (getuid ());
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
383
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
384 #ifndef MAIL_USE_MMDF
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
385 #ifdef MAIL_USE_SYSTEM_LOCK
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
386 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
387 #else /* if not MAIL_USE_SYSTEM_LOCK */
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
388 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
389 #endif /* not MAIL_USE_SYSTEM_LOCK */
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
390 #else /* MAIL_USE_MMDF */
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
391 indesc = lk_open (inname, O_RDONLY, 0, 0, 10);
25
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
392 #endif /* MAIL_USE_MMDF */
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
393
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
394 if (indesc < 0)
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
395 pfatal_with_name (inname);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396
87833
36e4ffad31fe * movemail.c: Remove references to XENIX.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87730
diff changeset
397 #ifdef BSD_SYSTEM
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
398 /* 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
399 read the output file. */
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
400 /* This is desirable for all systems
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
401 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
402 umask (umask (0) & 0333);
87833
36e4ffad31fe * movemail.c: Remove references to XENIX.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 87730
diff changeset
403 #endif /* BSD_SYSTEM */
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
404 outdesc = open (outname, O_WRONLY | O_CREAT | O_EXCL, 0666);
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
405 if (outdesc < 0)
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
406 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
407
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
408 /* 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
409 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
410 retry_lock:
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
411
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
412 /* Try to lock it. */
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
413 #ifdef MAIL_USE_MAILLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
414 if (spool_name)
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 /* 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
417 non-zero. */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
418 status = 0 - maillock (spool_name, 1);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
419 #ifdef HAVE_TOUCHLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
420 touched_lock = time (0);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
421 #endif
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
422 lockcount = 5;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
423 }
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
424 else
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
425 #endif /* MAIL_USE_MAILLOCK */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
426 {
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
427 #ifdef MAIL_USE_SYSTEM_LOCK
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
428 #ifdef MAIL_USE_LOCKF
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
429 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
430 #else /* not MAIL_USE_LOCKF */
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
431 #ifdef WINDOWSNT
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
432 status = locking (indesc, LK_RLCK, -1L);
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
433 #else
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
434 status = flock (indesc, LOCK_EX);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 #endif
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
436 #endif /* not MAIL_USE_LOCKF */
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
437 #endif /* MAIL_USE_SYSTEM_LOCK */
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
438 }
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439
16366
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
440 /* 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
441 for certain failure codes. */
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
442 if (status < 0)
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 if (++lockcount <= 5)
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
445 {
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
446 #ifdef EAGAIN
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
447 if (errno == EAGAIN)
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
448 {
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
449 sleep (1);
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
450 goto retry_lock;
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
451 }
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
452 #endif
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
453 #ifdef EBUSY
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
454 if (errno == EBUSY)
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
455 {
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
456 sleep (1);
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
457 goto retry_lock;
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
458 }
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
459 #endif
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
460 }
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
461
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
462 pfatal_with_name (inname);
ed13d19dbce5 (main): If the lock call fails with EBUSY or
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
463 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48314
diff changeset
464
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
465 {
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
466 char buf[1024];
604
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 601
diff changeset
467
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
468 while (1)
604
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 601
diff changeset
469 {
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
470 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
471 if (nread < 0)
bca72679c7d8 (main): Check for negative value from `read'.
Richard M. Stallman <rms@gnu.org>
parents: 68647
diff changeset
472 pfatal_with_name (inname);
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
473 if (nread != write (outdesc, buf, nread))
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
474 {
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
475 int saved_errno = errno;
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
476 unlink (outname);
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
477 errno = saved_errno;
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
478 pfatal_with_name (outname);
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
479 }
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
480 if (nread < sizeof buf)
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
481 break;
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
482 #if defined (MAIL_USE_MAILLOCK) && defined (HAVE_TOUCHLOCK)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
483 if (spool_name)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
484 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
485 now = time (0);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
486 if (now - touched_lock > 60)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
487 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
488 touchlock ();
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
489 touched_lock = now;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
490 }
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
491 }
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
492 #endif /* MAIL_USE_MAILLOCK */
604
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 601
diff changeset
493 }
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 601
diff changeset
494 }
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495
16218
32f82ca8b41f Replaced all BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 15105
diff changeset
496 #ifdef BSD_SYSTEM
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
497 if (fsync (outdesc) < 0)
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
498 pfatal_and_delete (outname);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 #endif
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
501 /* 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
502 if (close (outdesc) != 0)
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
503 pfatal_and_delete (outname);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
505 #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
506 if (! preserve_mail)
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
507 {
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
508 ftruncate (indesc, 0L);
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
509 }
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
510 #endif /* MAIL_USE_SYSTEM_LOCK */
25
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
511
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
512 #ifdef MAIL_USE_MMDF
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
513 lk_close (indesc, 0, 0, 0);
25
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
514 #else
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
515 close (indesc);
25
b446124cdf5a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23
diff changeset
516 #endif
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
518 #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
519 if (! preserve_mail)
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
520 {
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
521 /* 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
522 contents. */
571
3dfecf91a09b *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 510
diff changeset
523 #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
524 /* 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
525 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
526 if (unlink (inname) < 0 && errno != ENOENT)
571
3dfecf91a09b *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 510
diff changeset
527 #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
528 creat (inname, 0600);
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
529 }
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
530 #endif /* not MAIL_USE_SYSTEM_LOCK */
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
531
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
532 #ifdef MAIL_USE_MAILLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
533 /* 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
534 acquired the lock! */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
535 if (spool_name)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
536 mailunlock ();
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
537 #endif
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
538 exit (EXIT_SUCCESS);
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
539 }
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
540
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
541 wait (&status);
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
542 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
543 exit (EXIT_FAILURE);
5435
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
544 else if (WRETCODE (status) != 0)
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
545 exit (WRETCODE (status));
d7408b99b88f Include syswait.h.
Richard M. Stallman <rms@gnu.org>
parents: 5318
diff changeset
546
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
547 #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
548 #ifdef MAIL_USE_MAILLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
549 if (! spool_name)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
550 #endif /* MAIL_USE_MAILLOCK */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
551 unlink (lockname);
6690
a1a42eefcc61 (main): Fix up MAIL_USE_MMDF conditional where
Richard M. Stallman <rms@gnu.org>
parents: 5532
diff changeset
552 #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
553
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
554 #endif /* ! DISABLE_DIRECT_ACCESS */
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
555
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
556 return EXIT_SUCCESS;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 }
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
558
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
559 #ifdef MAIL_USE_MAILLOCK
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
560 /* 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
561 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
562 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
563 be symbolic links pointing to some other directory. */
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
564 static char *
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
565 mail_spool_name (inname)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
566 char *inname;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
567 {
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
568 struct stat stat1, stat2;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
569 char *indir, *fname;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
570 int status;
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 if (! (fname = rindex (inname, '/')))
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
573 return NULL;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
574
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
575 fname++;
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 if (stat (MAILDIR, &stat1) < 0)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
578 return NULL;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
579
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
580 indir = (char *) xmalloc (fname - inname + 1);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
581 strncpy (indir, inname, fname - inname);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
582 indir[fname-inname] = '\0';
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
583
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
584
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
585 status = stat (indir, &stat2);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
586
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
587 free (indir);
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
588
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
589 if (status < 0)
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
590 return NULL;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
591
18626
d3d968d0773a (rindex): Add declaration.
Richard M. Stallman <rms@gnu.org>
parents: 17069
diff changeset
592 if (stat1.st_dev == stat2.st_dev
d3d968d0773a (rindex): Add declaration.
Richard M. Stallman <rms@gnu.org>
parents: 17069
diff changeset
593 && stat1.st_ino == stat2.st_ino)
16897
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
594 return fname;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
595
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
596 return NULL;
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
597 }
523d5c54a3f5 Include maillock.h (conditionally).
Richard M. Stallman <rms@gnu.org>
parents: 16366
diff changeset
598 #endif /* MAIL_USE_MAILLOCK */
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 /* Print error message and exit. */
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
602 void
59918
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
603 fatal (s1, s2, s3)
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
604 char *s1, *s2, *s3;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 {
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 if (delete_lockname)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 unlink (delete_lockname);
59918
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
608 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
609 exit (EXIT_FAILURE);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
612 /* 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
613 are args for it or null. */
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
615 void
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
616 error (s1, s2, s3)
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
617 char *s1, *s2, *s3;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 {
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
619 fprintf (stderr, "movemail: ");
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
620 if (s3)
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
621 fprintf (stderr, s1, s2, s3);
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
622 else if (s2)
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
623 fprintf (stderr, s1, s2);
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
624 else
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
625 fprintf (stderr, s1);
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
626 fprintf (stderr, "\n");
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
629 void
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 pfatal_with_name (name)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 char *name;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 {
59918
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
633 fatal ("%s for %s", strerror (errno), name);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635
9490
4e70299f958d Make functions that return nothing void, not implicitly int.
David J. MacKenzie <djm@gnu.org>
parents: 9157
diff changeset
636 void
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
637 pfatal_and_delete (name)
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
638 char *name;
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
639 {
59918
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
640 char *s = strerror (errno);
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
641 unlink (name);
59918
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
642 fatal ("%s for %s", s, name);
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
643 }
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
644
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 /* 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
646
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 char *
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 concat (s1, s2, s3)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 char *s1, *s2, *s3;
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 int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
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 strcpy (result, s1);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 strcpy (result + len1, s2);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 strcpy (result + len1 + len2, s3);
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 *(result + len1 + len2 + len3) = 0;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 return result;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 /* Like malloc but get fatal error if memory is exhausted. */
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663
11675
496576df5d46 (xmalloc): Declare it to return long *.
Richard M. Stallman <rms@gnu.org>
parents: 10399
diff changeset
664 long *
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 xmalloc (size)
571
3dfecf91a09b *** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents: 510
diff changeset
666 unsigned size;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 {
11675
496576df5d46 (xmalloc): Declare it to return long *.
Richard M. Stallman <rms@gnu.org>
parents: 10399
diff changeset
668 long *result = (long *) malloc (size);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 if (!result)
59918
5a468b3bfb27 (fatal): Accept third parameter and pass down to
Andreas Schwab <schwab@suse.de>
parents: 59775
diff changeset
670 fatal ("virtual memory exhausted", 0, 0);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 return result;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 /* This is the guts of the interface to the Post Office Protocol. */
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 #ifdef MAIL_USE_POP
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
678 #ifndef WINDOWSNT
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 #include <sys/socket.h>
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 #include <netinet/in.h>
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 #include <netdb.h>
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
682 #else
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
683 #undef _WINSOCKAPI_
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
684 #include <winsock.h>
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
685 #endif
634
52d0ff659265 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 604
diff changeset
686 #include <pwd.h>
101936
696b3e7c297b (mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents: 101915
diff changeset
687 #include <string.h>
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 #define NOTOK (-1)
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 #define OK 0
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 #define DONE 1
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 char *progname;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 FILE *sfi;
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 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
696 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
697 char obuffer[BUFSIZ];
29046
7d5565d3cf32 Include config.h, not ../src/config.h.
Dave Love <fx@gnu.org>
parents: 27507
diff changeset
698 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
699 the original length of 80. */
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700
26794
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
701 /*
80028
f56936039199 *** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents: 79748
diff changeset
702 * 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
703 * 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
704 * 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
705 * 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
706 * off of the front of the mailbox name.
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
707 *
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
708 * 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
709 * 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
710 * null.
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
711 *
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
712 * 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
713 */
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
714
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
715 int
26794
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
716 popmail (mailbox, outfile, preserve, password, reverse_order)
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
717 char *mailbox;
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
718 char *outfile;
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
719 int preserve;
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
720 char *password;
23182
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
721 int reverse_order;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 {
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
723 int nmsgs, nbytes;
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
724 register int i;
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
725 int mbfi;
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
726 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
727 char *getenv ();
9630
5410efcb7b6e PopServer renamed to popserver throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9612
diff changeset
728 popserver server;
23182
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
729 int start, end, increment;
26794
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
730 char *user, *hostname;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731
26794
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
732 user = mailbox;
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
733 if ((hostname = index(mailbox, ':')))
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
734 *hostname++ = '\0';
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
735
535af4b15059 (popmail): Allow mailbox specifications of the
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
736 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
737 if (! server)
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
738 {
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
739 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
740 return EXIT_FAILURE;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
743 if (pop_stat (server, &nmsgs, &nbytes))
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
744 {
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
745 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
746 return EXIT_FAILURE;
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
747 }
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
749 if (!nmsgs)
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
750 {
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
751 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
752 return EXIT_SUCCESS;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
755 mbfi = open (outfile, O_WRONLY | O_CREAT | O_EXCL, 0666);
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
756 if (mbfi < 0)
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
757 {
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
758 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
759 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
760 return EXIT_FAILURE;
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
761 }
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
762 fchown (mbfi, getuid (), -1);
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
763
15101
f86169152e74 (access, unlink) [WINDOWSNT]: Macros undefined.
Richard M. Stallman <rms@gnu.org>
parents: 14649
diff changeset
764 if ((mbf = fdopen (mbfi, "wb")) == NULL)
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
765 {
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
766 pop_close (server);
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
767 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
768 close (mbfi);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
769 unlink (outfile);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
770 return EXIT_FAILURE;
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
771 }
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
772
23182
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
773 if (reverse_order)
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
774 {
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
775 start = nmsgs;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
776 end = 1;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
777 increment = -1;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
778 }
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
779 else
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
780 {
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
781 start = 1;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
782 end = nmsgs;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
783 increment = 1;
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
784 }
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
785
0ba967162ee0 [MAIL_USE_POP]: Add the "-r" flag to reverse the
Karl Heuer <kwzh@gnu.org>
parents: 22316
diff changeset
786 for (i = start; i * increment <= end * increment; i += increment)
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
787 {
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
788 mbx_delimit_begin (mbf);
17069
0b2b8a0f7570 (popmail): Remove some unnecessary function
Karl Heuer <kwzh@gnu.org>
parents: 16994
diff changeset
789 if (pop_retr (server, i, mbf) != OK)
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
790 {
59775
d39551ad7f40 (popmail): Don't use Errmsg as format string.
Richard M. Stallman <rms@gnu.org>
parents: 55442
diff changeset
791 error ("%s", Errmsg, 0);
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
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;
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
794 }
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
795 mbx_delimit_end (mbf);
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
796 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
797 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
798 {
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
799 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
800 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
801 close (mbfi);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
802 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
803 }
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
804 }
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
805
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
806 /* 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
807 * 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
808 * 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
809 * 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
810 * 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
811
16218
32f82ca8b41f Replaced all BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 15105
diff changeset
812 #ifdef BSD_SYSTEM
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
813 if (fsync (mbfi) < 0)
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
814 {
40683
580a1a573d3e (popmail): Always pass two args to `error'.
Richard M. Stallman <rms@gnu.org>
parents: 31376
diff changeset
815 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
816 return EXIT_FAILURE;
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
817 }
9491
dd3b83e4ceb0 Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents: 9490
diff changeset
818 #endif
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
819
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
820 if (close (mbfi) == -1)
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
821 {
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
822 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
823 return EXIT_FAILURE;
447
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
824 }
2e226dcdaf0f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 351
diff changeset
825
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
826 if (! preserve)
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
827 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
828 {
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
829 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
830 {
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
831 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
832 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
833 return EXIT_FAILURE;
16909
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
834 }
d878e23bbfa6 (main): Do not display "[POP-password]" in the usage
Richard M. Stallman <rms@gnu.org>
parents: 16897
diff changeset
835 }
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
837 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
838 {
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
839 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
840 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
841 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48314
diff changeset
842
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
843 return EXIT_SUCCESS;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845
17069
0b2b8a0f7570 (popmail): Remove some unnecessary function
Karl Heuer <kwzh@gnu.org>
parents: 16994
diff changeset
846 int
0b2b8a0f7570 (popmail): Remove some unnecessary function
Karl Heuer <kwzh@gnu.org>
parents: 16994
diff changeset
847 pop_retr (server, msgno, arg)
9630
5410efcb7b6e PopServer renamed to popserver throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9612
diff changeset
848 popserver server;
48314
f6d89a1d0478 (pop_retr): Declare comment.
Dave Love <fx@gnu.org>
parents: 40683
diff changeset
849 int msgno;
17069
0b2b8a0f7570 (popmail): Remove some unnecessary function
Karl Heuer <kwzh@gnu.org>
parents: 16994
diff changeset
850 FILE *arg;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 {
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
852 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
853 char *line;
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
854 int ret;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
856 if (pop_retrieve_first (server, msgno, &line))
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
857 {
23290
9917b9a0024d (popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents: 23182
diff changeset
858 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
859 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
860 Errmsg[sizeof (Errmsg)-1] = '\0';
23290
9917b9a0024d (popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents: 23182
diff changeset
861 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
862 return (NOTOK);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20387
diff changeset
865 while ((ret = pop_retrieve_next (server, &line)) >= 0)
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
866 {
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
867 if (! line)
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
868 break;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20387
diff changeset
870 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
871 {
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
872 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
873 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
874 return (NOTOK);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
875 }
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
878 if (ret)
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
879 {
23290
9917b9a0024d (popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents: 23182
diff changeset
880 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
881 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
882 Errmsg[sizeof (Errmsg)-1] = '\0';
23290
9917b9a0024d (popmail, pop_retr) [MAIL_USE_POP]: When displaying
Karl Heuer <kwzh@gnu.org>
parents: 23182
diff changeset
883 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
884 return (NOTOK);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 }
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
886
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
887 return (OK);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
890 /* 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
891 #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
892 && (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
893 && (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
894 && (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
895 && (a[4] == ' '))
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
897 int
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20387
diff changeset
898 mbx_write (line, len, mbf)
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
899 char *line;
20418
7e1538a45702 Allow messages retrieved from the POP
Karl Heuer <kwzh@gnu.org>
parents: 20387
diff changeset
900 int len;
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
901 FILE *mbf;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902 {
20387
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
903 #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
904 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
905 {
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
906 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
907 return (NOTOK);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
908 }
20387
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
909 #endif
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
910 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
911 {
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
912 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
913 return (NOTOK);
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
914 line++;
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
915 len--;
4c524f5214ce (mbx_write) [MAIL_USE_POP]: Disable the code which quotes with a
Paul Eggert <eggert@twinsun.com>
parents: 18626
diff changeset
916 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48314
diff changeset
917 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
918 return (NOTOK);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
919 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
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
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
924 int
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
925 mbx_delimit_begin (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 {
101936
696b3e7c297b (mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents: 101915
diff changeset
928 time_t now;
696b3e7c297b (mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents: 101915
diff changeset
929 struct tm *ltime;
696b3e7c297b (mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents: 101915
diff changeset
930 char fromline[40] = "From movemail ";
696b3e7c297b (mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents: 101915
diff changeset
931
696b3e7c297b (mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents: 101915
diff changeset
932 now = time (NULL);
696b3e7c297b (mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents: 101915
diff changeset
933 ltime = localtime (&now);
696b3e7c297b (mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents: 101915
diff changeset
934
696b3e7c297b (mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents: 101915
diff changeset
935 strcat (fromline, asctime (ltime));
696b3e7c297b (mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents: 101915
diff changeset
936
696b3e7c297b (mbx_delimit_begin): Also write the current time.
Glenn Morris <rgm@gnu.org>
parents: 101915
diff changeset
937 if (fputs (fromline, mbf) == EOF)
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
938 return (NOTOK);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
939 return (OK);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941
31233
77ed917b12ee (toplevel) [HAVE_STRING_H]: Include string.h.
Dave Love <fx@gnu.org>
parents: 31080
diff changeset
942 int
120
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
943 mbx_delimit_end (mbf)
86f080a3d883 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 38
diff changeset
944 FILE *mbf;
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 {
101915
091a8cf73243 (mbx_delimit_begin, mbx_delimit_end): Write mbox rather than Babyl
Glenn Morris <rgm@gnu.org>
parents: 100958
diff changeset
946 if (putc ('\n', mbf) == EOF)
9157
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
947 return (NOTOK);
29f4cce05fa5 Improve POP code, move most of it into a separate file.
Richard M. Stallman <rms@gnu.org>
parents: 8449
diff changeset
948 return (OK);
23
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 }
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950
b437d0778a66 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 #endif /* MAIL_USE_POP */
5532
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
952
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
953 #ifndef HAVE_STRERROR
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
954 char *
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
955 strerror (errnum)
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
956 int errnum;
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
957 {
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
958 extern char *sys_errlist[];
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
959 extern int sys_nerr;
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
960
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
961 if (errnum >= 0 && errnum < sys_nerr)
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
962 return sys_errlist[errnum];
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
963 return (char *) "Unknown error";
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
964 }
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
965
9c86c71e879d [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5524
diff changeset
966 #endif /* ! HAVE_STRERROR */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52069
diff changeset
967
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52069
diff changeset
968 /* arch-tag: 1c323112-41fe-4fe5-8de9-494de631f73f
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52069
diff changeset
969 (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
970
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
971 /* movemail.c ends here */