annotate lib-src/fakemail.c @ 112119:48f5ac42611a

Reconcile with changes in line movement behavior for long text lines that cross more than a single physical window line, ie when truncate-lines is nil. (allout-next-visible-heading): Provide for change in line-move behavior on long lines when truncate-lines is nil. In that case, line-move can wind up on the same textual line when it moves to the next window line, and moving to the bullet position after the move yields zero advancement. Add logic to detect and compensate for the lack of progress. (allout-current-topic-collapsed-p): move-end-of-line respect for field boundaries is different when operating with body lines shorter than window width versus ones greater than window width, which can yield false negatives in this function. Avoid difference by applying move-end-of-line while field-text-motion is inhibited.
author Ken Manheimer <ken.manheimer@gmail.com>
date Tue, 04 Jan 2011 14:44:10 -0500
parents 1f617baf8ae5
children 417b1e4d63cd 7df2e30d72ec
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 /* sendmail-like interface to /bin/mail for system V,
75250
6d19c76d81c5 Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents: 72034
diff changeset
2 Copyright (C) 1985, 1994, 1999, 2001, 2002, 2003, 2004,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 101079
diff changeset
3 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
101079
0370b7985d6d Comment (add an author based on ack.texi).
Glenn Morris <rgm@gnu.org>
parents: 100958
diff changeset
5 Author: Bill Rozas <jinx@martigny.ai.mit.edu>
0370b7985d6d Comment (add an author based on ack.texi).
Glenn Morris <rgm@gnu.org>
parents: 100958
diff changeset
6 (according to ack.texi)
0370b7985d6d Comment (add an author based on ack.texi).
Glenn Morris <rgm@gnu.org>
parents: 100958
diff changeset
7
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 This file is part of GNU Emacs.
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
10 GNU Emacs is free software: you can redistribute it and/or modify
37
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
11 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
12 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
13 (at your option) any later version.
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14
37
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
15 GNU Emacs is distributed in the hope that it will be useful,
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
18 GNU General Public License for more details.
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
19
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
20 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
21 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
22
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23
42134
de525d9743c9 Include "config.h", not <../src/config.h>.
Dave Love <fx@gnu.org>
parents: 34951
diff changeset
24 #define _XOPEN_SOURCE 500 /* for cuserid */
42181
358035cb58d9 Conditionally include config.h.
Pavel Janík <Pavel@Janik.cz>
parents: 42134
diff changeset
25
358035cb58d9 Conditionally include config.h.
Pavel Janík <Pavel@Janik.cz>
parents: 42134
diff changeset
26 #ifdef HAVE_CONFIG_H
42469
64341c22fb4c Include <config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 42181
diff changeset
27 #include <config.h>
42181
358035cb58d9 Conditionally include config.h.
Pavel Janík <Pavel@Janik.cz>
parents: 42134
diff changeset
28 #endif
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29
96303
ddedcecb18ef * unexnext.c:
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94828
diff changeset
30 #if defined (BSD_SYSTEM) && !defined (USE_FAKEMAIL)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 /* This program isnot used in BSD, so just avoid loader complaints. */
15683
5f9426e991a3 Declare main as int, not void.
Karl Heuer <kwzh@gnu.org>
parents: 15099
diff changeset
32 int
109744
fdbd24f8d999 Fix warnings produced by compiling with -Wwrite_strings (i.e. use const char *).
Jan D <jan.h.d@swipnet.se>
parents: 109511
diff changeset
33 main (void)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 {
16121
6e026dc3f1b1 Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 15683
diff changeset
35 return 0;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 #else /* not BSD 4.2 (or newer) */
5447
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
38 #ifdef MSDOS
15683
5f9426e991a3 Declare main as int, not void.
Karl Heuer <kwzh@gnu.org>
parents: 15099
diff changeset
39 int
5447
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
40 main ()
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
41 {
16121
6e026dc3f1b1 Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 15683
diff changeset
42 return 0;
5447
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
43 }
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
44 #else /* not MSDOS */
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 /* This conditional contains all the rest of the file. */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 /* These are defined in config in some versions. */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 #ifdef static
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 #undef static
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 #endif
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52
15099
857388330750 [WINDOWSNT]: Include ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
53 #ifdef WINDOWSNT
857388330750 [WINDOWSNT]: Include ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
54 #include "ntlib.h"
857388330750 [WINDOWSNT]: Include ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
55 #endif
857388330750 [WINDOWSNT]: Include ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
56
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 #include <stdio.h>
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 #include <string.h>
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 #include <ctype.h>
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 #include <time.h>
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 #include <pwd.h>
109747
1f617baf8ae5 Fix -Wwrite-strings warnings in fakemail.c.
Jan D <jan.h.d@swipnet.se>
parents: 109744
diff changeset
62 #include <stdlib.h>
18841
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
63
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
64 /* This is to declare cuserid. */
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
65 #ifdef HAVE_UNISTD_H
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
66 #include <unistd.h>
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
67 #endif
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 /* Type definitions */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 #define boolean int
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 #define true 1
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 #define false 0
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74
69790
1e68e7f3b824 * lib-src/b2m.c (main): Don't include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 69697
diff changeset
75 #define TM_YEAR_BASE 1900
1e68e7f3b824 * lib-src/b2m.c (main): Don't include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 69697
diff changeset
76
1e68e7f3b824 * lib-src/b2m.c (main): Don't include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 69697
diff changeset
77 /* Nonzero if TM_YEAR is a struct tm's tm_year value that causes
1e68e7f3b824 * lib-src/b2m.c (main): Don't include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 69697
diff changeset
78 asctime to have well-defined behavior. */
1e68e7f3b824 * lib-src/b2m.c (main): Don't include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 69697
diff changeset
79 #ifndef TM_YEAR_IN_ASCTIME_RANGE
69697
e112ec9aa49b * b2m.c: Include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 68647
diff changeset
80 # define TM_YEAR_IN_ASCTIME_RANGE(tm_year) \
69790
1e68e7f3b824 * lib-src/b2m.c (main): Don't include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 69697
diff changeset
81 (1000 - TM_YEAR_BASE <= (tm_year) && (tm_year) <= 9999 - TM_YEAR_BASE)
69697
e112ec9aa49b * b2m.c: Include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 68647
diff changeset
82 #endif
e112ec9aa49b * b2m.c: Include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 68647
diff changeset
83
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 /* Various lists */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 struct line_record
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 char *string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 struct line_record *continuation;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 };
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 typedef struct line_record *line_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 struct header_record
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 line_list text;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 struct header_record *next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 struct header_record *previous;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 };
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 typedef struct header_record *header;
42181
358035cb58d9 Conditionally include config.h.
Pavel Janík <Pavel@Janik.cz>
parents: 42134
diff changeset
100
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 struct stream_record
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 FILE *handle;
109125
12b02558bf51 * lib-src/fakemail.c (action): Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109111
diff changeset
104 int (*action)(FILE *);
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 struct stream_record *rest_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 };
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 typedef struct stream_record *stream_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 /* A `struct linebuffer' is a structure which holds a line of text.
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 * `readline' reads a line from a stream into a linebuffer
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 * and works regardless of the length of the line.
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 struct linebuffer
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 long size;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 char *buffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 };
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 struct linebuffer lb;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 #define new_list() \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 ((line_list) xmalloc (sizeof (struct line_record)))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 #define new_header() \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 ((header) xmalloc (sizeof (struct header_record)))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 #define new_stream() \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 ((stream_list) xmalloc (sizeof (struct stream_record)))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 #define alloc_string(nchars) \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 ((char *) xmalloc ((nchars) + 1))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 /* Global declarations */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 #define BUFLEN 1024
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 #define KEYWORD_SIZE 256
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 #define FROM_PREFIX "From"
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 #define MY_NAME "fakemail"
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 #define NIL ((line_list) NULL)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 #define INITIAL_LINE_SIZE 200
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139
91725
9dee041c9720 Undo previous change.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91702
diff changeset
140 #ifndef MAIL_PROGRAM_NAME
9dee041c9720 Undo previous change.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91702
diff changeset
141 #define MAIL_PROGRAM_NAME "/bin/mail"
9dee041c9720 Undo previous change.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91702
diff changeset
142 #endif
9dee041c9720 Undo previous change.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91702
diff changeset
143
109747
1f617baf8ae5 Fix -Wwrite-strings warnings in fakemail.c.
Jan D <jan.h.d@swipnet.se>
parents: 109744
diff changeset
144 static const char *my_name;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 static char *the_date;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 static char *the_user;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 static line_list file_preface;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 static stream_list the_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 static boolean no_problems = true;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150
109747
1f617baf8ae5 Fix -Wwrite-strings warnings in fakemail.c.
Jan D <jan.h.d@swipnet.se>
parents: 109744
diff changeset
151 static void fatal (const char *s1) NO_RETURN;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 #ifdef CURRENT_USER
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 static struct passwd *my_entry;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 #define cuserid(s) \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 (my_entry = getpwuid (((int) geteuid ())), \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 my_entry->pw_name)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 #endif
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 /* Utilities */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 /* Print error message. `s1' is printf control string, `s2' is arg for it. */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 static void
109747
1f617baf8ae5 Fix -Wwrite-strings warnings in fakemail.c.
Jan D <jan.h.d@swipnet.se>
parents: 109744
diff changeset
165 error (const char *s1, const char *s2)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 printf ("%s: ", my_name);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 printf (s1, s2);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 printf ("\n");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 no_problems = false;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 /* Print error message and exit. */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 static void
109747
1f617baf8ae5 Fix -Wwrite-strings warnings in fakemail.c.
Jan D <jan.h.d@swipnet.se>
parents: 109744
diff changeset
176 fatal (const char *s1)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 {
72034
ca1a855f01ae (fatal): Drop second parameter and treat first
Andreas Schwab <schwab@suse.de>
parents: 70278
diff changeset
178 error ("%s", s1);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
179 exit (EXIT_FAILURE);
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 /* Like malloc but get fatal error if memory is exhausted. */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183
12833
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
184 static long *
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
185 xmalloc (int size)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 {
12833
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
187 long *result = (long *) malloc (((unsigned) size));
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
188 if (result == ((long *) NULL))
72034
ca1a855f01ae (fatal): Drop second parameter and treat first
Andreas Schwab <schwab@suse.de>
parents: 70278
diff changeset
189 fatal ("virtual memory exhausted");
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 return result;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192
12833
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
193 static long *
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
194 xrealloc (long int *ptr, int size)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 {
12833
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
196 long *result = (long *) realloc (ptr, ((unsigned) size));
12840
4e9a14304b8b (xrealloc): Change cast to match return type.
Karl Heuer <kwzh@gnu.org>
parents: 12833
diff changeset
197 if (result == ((long *) NULL))
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 fatal ("virtual memory exhausted");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 return result;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 /* Initialize a linebuffer for use */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 void
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
205 init_linebuffer (struct linebuffer *linebuffer)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 linebuffer->size = INITIAL_LINE_SIZE;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 linebuffer->buffer = ((char *) xmalloc (INITIAL_LINE_SIZE));
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 /* Read a line of text from `stream' into `linebuffer'.
42181
358035cb58d9 Conditionally include config.h.
Pavel Janík <Pavel@Janik.cz>
parents: 42134
diff changeset
212 Return the length of the line. */
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 long
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
215 readline (struct linebuffer *linebuffer, FILE *stream)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 char *buffer = linebuffer->buffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 char *p = linebuffer->buffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 char *end = p + linebuffer->size;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 while (true)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 int c = getc (stream);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 if (p == end)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 linebuffer->size *= 2;
34951
1efc40541908 (readline): Cast buffer to "long *" to pacify
Eli Zaretskii <eliz@gnu.org>
parents: 34609
diff changeset
227 buffer = ((char *) xrealloc ((long *)buffer, linebuffer->size));
6992
ed57331fb222 (readline): Fix updating of p when buffer grows.
Richard M. Stallman <rms@gnu.org>
parents: 6954
diff changeset
228 p = buffer + (p - linebuffer->buffer);
6954
774fdc20d115 (readline): When extending the buffer,
Richard M. Stallman <rms@gnu.org>
parents: 6109
diff changeset
229 end = buffer + linebuffer->size;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 linebuffer->buffer = buffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 if (c < 0 || c == '\n')
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 *p = 0;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 break;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 *p++ = c;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 return p - buffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
243 /* Extract a colon-terminated keyword from the string FIELD.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
244 Return that keyword as a string stored in a static buffer.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
245 Store the address of the rest of the string into *REST.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
246
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
247 If there is no keyword, return NULL and don't alter *REST. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
248
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 char *
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
250 get_keyword (register char *field, char **rest)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 static char keyword[KEYWORD_SIZE];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 register char *ptr;
34609
cb2667416fa5 (get_keyword): Make sure that isspace and
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
254 register int c;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 ptr = &keyword[0];
34609
cb2667416fa5 (get_keyword): Make sure that isspace and
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
257 c = (unsigned char) *field++;
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
258 if (isspace (c) || c == ':')
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 return ((char *) NULL);
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
260 *ptr++ = (islower (c) ? toupper (c) : c);
34609
cb2667416fa5 (get_keyword): Make sure that isspace and
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
261 while (((c = (unsigned char) *field++) != ':') && ! isspace (c))
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
262 *ptr++ = (islower (c) ? toupper (c) : c);
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 *ptr++ = '\0';
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
264 while (isspace (c))
34609
cb2667416fa5 (get_keyword): Make sure that isspace and
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
265 c = (unsigned char) *field++;
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
266 if (c != ':')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
267 return ((char *) NULL);
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 *rest = field;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 return &keyword[0];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
272 /* Nonzero if the string FIELD starts with a colon-terminated keyword. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
273
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 boolean
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
275 has_keyword (char *field)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 char *ignored;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 return (get_keyword (field, &ignored) != ((char *) NULL));
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
281 /* Store the string FIELD, followed by any lines in THE_LIST,
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
282 into the buffer WHERE.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
283 Concatenate lines, putting just a space between them.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
284 Delete everything contained in parentheses.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
285 When a recipient name contains <...>, we discard
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
286 everything except what is inside the <...>.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
287
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
288 We don't pay attention to overflowing WHERE;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
289 the caller has to make it big enough. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
290
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 char *
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
292 add_field (line_list the_list, register char *field, register char *where)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 register char c;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 while (true)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 {
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
297 char *this_recipient_where;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
298 int in_quotes = 0;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
299
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 *where++ = ' ';
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
301 this_recipient_where = where;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
302
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 while ((c = *field++) != '\0')
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 {
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
305 if (c == '\\')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
306 *where++ = c;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
307 else if (c == '"')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
308 {
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
309 in_quotes = ! in_quotes;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
310 *where++ = c;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
311 }
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
312 else if (in_quotes)
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
313 *where++ = c;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
314 else if (c == '(')
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 while (*field && *field != ')') ++field;
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
317 if (! (*field++)) break; /* no close */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
318 continue;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
319 }
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
320 else if (c == ',')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
321 {
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
322 *where++ = ' ';
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
323 /* When we get to the end of one recipient,
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
324 don't discard it if the next one has <...>. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
325 this_recipient_where = where;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 }
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
327 else if (c == '<')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
328 /* Discard everything we got before the `<'. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
329 where = this_recipient_where;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
330 else if (c == '>')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
331 /* Discard the rest of this name that follows the `>'. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
332 {
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
333 while (*field && *field != ',') ++field;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
334 if (! (*field++)) break; /* no comma */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
335 continue;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
336 }
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
337 else
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
338 *where++ = c;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 if (the_list == NIL) break;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 field = the_list->string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 the_list = the_list->continuation;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 return where;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 line_list
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
348 make_file_preface (void)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 char *the_string, *temp;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 long idiotic_interface;
69697
e112ec9aa49b * b2m.c: Include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 68647
diff changeset
352 struct tm *tm;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 long prefix_length;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 long user_length;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 long date_length;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 line_list result;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 prefix_length = strlen (FROM_PREFIX);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 time (&idiotic_interface);
69697
e112ec9aa49b * b2m.c: Include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 68647
diff changeset
360 /* Convert to a string, checking for out-of-range time stamps.
e112ec9aa49b * b2m.c: Include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 68647
diff changeset
361 Don't use 'ctime', as that might dump core if the hardware clock
e112ec9aa49b * b2m.c: Include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 68647
diff changeset
362 is set to a bizarre value. */
e112ec9aa49b * b2m.c: Include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 68647
diff changeset
363 tm = localtime (&idiotic_interface);
69790
1e68e7f3b824 * lib-src/b2m.c (main): Don't include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 69697
diff changeset
364 if (! (tm && TM_YEAR_IN_ASCTIME_RANGE (tm->tm_year)
1e68e7f3b824 * lib-src/b2m.c (main): Don't include <limits.h>.
Paul Eggert <eggert@twinsun.com>
parents: 69697
diff changeset
365 && (the_date = asctime (tm))))
72034
ca1a855f01ae (fatal): Drop second parameter and treat first
Andreas Schwab <schwab@suse.de>
parents: 70278
diff changeset
366 fatal ("current time is out of range");
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 /* the_date has an unwanted newline at the end */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 date_length = strlen (the_date) - 1;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 the_date[date_length] = '\0';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 temp = cuserid ((char *) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 user_length = strlen (temp);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 the_user = alloc_string (user_length + 1);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 strcpy (the_user, temp);
18841
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
374 the_string = alloc_string (3 + prefix_length
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
375 + user_length
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
376 + date_length);
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 temp = the_string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 strcpy (temp, FROM_PREFIX);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 temp = &temp[prefix_length];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 *temp++ = ' ';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 strcpy (temp, the_user);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 temp = &temp[user_length];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 *temp++ = ' ';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 strcpy (temp, the_date);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 result = new_list ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 result->string = the_string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 result->continuation = ((line_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 return result;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 void
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
392 write_line_list (register line_list the_list, FILE *the_stream)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 for ( ;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 the_list != ((line_list) NULL) ;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 the_list = the_list->continuation)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 fputs (the_list->string, the_stream);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 putc ('\n', the_stream);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 int
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
405 close_the_streams (void)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 register stream_list rem;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 for (rem = the_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 rem != ((stream_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 rem = rem->rest_streams)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 no_problems = (no_problems &&
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 ((*rem->action) (rem->handle) == 0));
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 the_streams = ((stream_list) NULL);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
414 return (no_problems ? EXIT_SUCCESS : EXIT_FAILURE);
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 void
109125
12b02558bf51 * lib-src/fakemail.c (action): Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109111
diff changeset
418 add_a_stream (FILE *the_stream, int (*closing_action) (FILE *))
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 stream_list old = the_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 the_streams = new_stream ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 the_streams->handle = the_stream;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 the_streams->action = closing_action;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 the_streams->rest_streams = old;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 int
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
429 my_fclose (FILE *the_file)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 putc ('\n', the_file);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 fflush (the_file);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 return fclose (the_file);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 boolean
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
437 open_a_file (char *name)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 FILE *the_stream = fopen (name, "a");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 if (the_stream != ((FILE *) NULL))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 add_a_stream (the_stream, my_fclose);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 if (the_user == ((char *) NULL))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 file_preface = make_file_preface ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 write_line_list (file_preface, the_stream);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 return true;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 return false;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 void
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
452 put_string (char *s)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 register stream_list rem;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 for (rem = the_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 rem != ((stream_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 rem = rem->rest_streams)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 fputs (s, rem->handle);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 void
109747
1f617baf8ae5 Fix -Wwrite-strings warnings in fakemail.c.
Jan D <jan.h.d@swipnet.se>
parents: 109744
diff changeset
463 put_line (const char *string)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 register stream_list rem;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 for (rem = the_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 rem != ((stream_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 rem = rem->rest_streams)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 {
109747
1f617baf8ae5 Fix -Wwrite-strings warnings in fakemail.c.
Jan D <jan.h.d@swipnet.se>
parents: 109744
diff changeset
470 const char *s = string;
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
471 int column = 0;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
472
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
473 /* Divide STRING into lines. */
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
474 while (*s != 0)
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
475 {
109747
1f617baf8ae5 Fix -Wwrite-strings warnings in fakemail.c.
Jan D <jan.h.d@swipnet.se>
parents: 109744
diff changeset
476 const char *breakpos;
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
477
5959
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
478 /* Find the last char that fits. */
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
479 for (breakpos = s; *breakpos && column < 78; ++breakpos)
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
480 {
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
481 if (*breakpos == '\t')
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
482 column += 8;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
483 else
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
484 column++;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
485 }
5959
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
486 /* If we didn't reach end of line, break the line. */
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
487 if (*breakpos)
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
488 {
5959
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
489 /* Back up to just after the last comma that fits. */
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
490 while (breakpos != s && breakpos[-1] != ',') --breakpos;
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
491
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
492 if (breakpos == s)
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
493 {
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
494 /* If no comma fits, move past the first address anyway. */
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
495 while (*breakpos != 0 && *breakpos != ',') ++breakpos;
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
496 if (*breakpos != 0)
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
497 /* Include the comma after it. */
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
498 ++breakpos;
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
499 }
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
500 }
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
501 /* Output that much, then break the line. */
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
502 fwrite (s, 1, breakpos - s, rem->handle);
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
503 column = 8;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
504
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
505 /* Skip whitespace and prepare to print more addresses. */
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
506 s = breakpos;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
507 while (*s == ' ' || *s == '\t') ++s;
3219
1aa8fa0a569e (put_line): Don't output \n\t unless more text follows.
Richard M. Stallman <rms@gnu.org>
parents: 37
diff changeset
508 if (*s != 0)
1aa8fa0a569e (put_line): Don't output \n\t unless more text follows.
Richard M. Stallman <rms@gnu.org>
parents: 37
diff changeset
509 fputs ("\n\t", rem->handle);
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
510 }
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 putc ('\n', rem->handle);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 #define mail_error error
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
518 /* Handle an FCC field. FIELD is the text of the first line (after
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
519 the header name), and THE_LIST holds the continuation lines if any.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
520 Call open_a_file for each file. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
521
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 void
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
523 setup_files (register line_list the_list, register char *field)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 register char *start;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 register char c;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 while (true)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 {
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
529 while (((c = *field) != '\0')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
530 && (c == ' '
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
531 || c == '\t'
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
532 || c == ','))
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 field += 1;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 if (c != '\0')
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 start = field;
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
537 while (((c = *field) != '\0')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
538 && c != ' '
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
539 && c != '\t'
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
540 && c != ',')
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 field += 1;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 *field = '\0';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 if (!open_a_file (start))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 mail_error ("Could not open file %s", start);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 *field = c;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 if (c != '\0') continue;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 }
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
548 if (the_list == ((line_list) NULL))
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
549 return;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 field = the_list->string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 the_list = the_list->continuation;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
555 /* Compute the total size of all recipient names stored in THE_HEADER.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
556 The result says how big to make the buffer to pass to parse_header. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
557
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 int
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
559 args_size (header the_header)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 register header old = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 register line_list rem;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 register int size = 0;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 do
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 char *field;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 register char *keyword = get_keyword (the_header->text->string, &field);
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
568 if ((strcmp (keyword, "TO") == 0)
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
569 || (strcmp (keyword, "CC") == 0)
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
570 || (strcmp (keyword, "BCC") == 0))
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 size += 1 + strlen (field);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 for (rem = the_header->text->continuation;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 rem != NIL;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 rem = rem->continuation)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 size += 1 + strlen (rem->string);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 the_header = the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 } while (the_header != old);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 return size;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
583 /* Scan the header described by the lists THE_HEADER,
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
584 and put all recipient names into the buffer WHERE.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
585 Precede each recipient name with a space.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
586
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
587 Also, if the header has any FCC fields, call setup_files for each one. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
588
21389
48690fd8d40a (_XOPEN_SOURCE): Define for declaration of cuserid.
Andreas Schwab <schwab@suse.de>
parents: 18841
diff changeset
589 void
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
590 parse_header (header the_header, register char *where)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 register header old = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 do
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 char *field;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 register char *keyword = get_keyword (the_header->text->string, &field);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 if (strcmp (keyword, "TO") == 0)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 where = add_field (the_header->text->continuation, field, where);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 else if (strcmp (keyword, "CC") == 0)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 where = add_field (the_header->text->continuation, field, where);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 else if (strcmp (keyword, "BCC") == 0)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 where = add_field (the_header->text->continuation, field, where);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 the_header->previous->next = the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 the_header->next->previous = the_header->previous;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 else if (strcmp (keyword, "FCC") == 0)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 setup_files (the_header->text->continuation, field);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 the_header = the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 } while (the_header != old);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 *where = '\0';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 }
42181
358035cb58d9 Conditionally include config.h.
Pavel Janík <Pavel@Janik.cz>
parents: 42134
diff changeset
614
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
615 /* Read lines from the input until we get a blank line.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
616 Create a list of `header' objects, one for each header field,
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
617 each of which points to a list of `line_list' objects,
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
618 one for each line in that field.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
619 Continuation lines are grouped in the headers they continue. */
42181
358035cb58d9 Conditionally include config.h.
Pavel Janík <Pavel@Janik.cz>
parents: 42134
diff changeset
620
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 header
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
622 read_header (void)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 register header the_header = ((header) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 register line_list *next_line = ((line_list *) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 init_linebuffer (&lb);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 do
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 long length;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 register char *line;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 readline (&lb, stdin);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 line = lb.buffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 length = strlen (line);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 if (length == 0) break;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 if (has_keyword (line))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 register header old = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 the_header = new_header ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 if (old == ((header) NULL))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 the_header->next = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 the_header->previous = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 else
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 the_header->previous = old;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 the_header->next = old->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 old->next = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 next_line = &(the_header->text);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 if (next_line == ((line_list *) NULL))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 /* Not a valid header */
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
660 exit (EXIT_FAILURE);
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 *next_line = new_list ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 (*next_line)->string = alloc_string (length);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 strcpy (((*next_line)->string), line);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 next_line = &((*next_line)->continuation);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 *next_line = NIL;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 } while (true);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669
70278
8e7233f487a3 (read_header): Give fatal error if input has no header.
Richard M. Stallman <rms@gnu.org>
parents: 69790
diff changeset
670 if (! the_header)
8e7233f487a3 (read_header): Give fatal error if input has no header.
Richard M. Stallman <rms@gnu.org>
parents: 69790
diff changeset
671 fatal ("input message has no header");
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 return the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 void
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
676 write_header (header the_header)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 register header old = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 do
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 register line_list the_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 for (the_list = the_header->text;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 the_list != NIL;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 the_list = the_list->continuation)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 put_line (the_list->string);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 the_header = the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 } while (the_header != old);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 put_line ("");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691
15683
5f9426e991a3 Declare main as int, not void.
Karl Heuer <kwzh@gnu.org>
parents: 15099
diff changeset
692 int
109111
52b76722152a Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 106815
diff changeset
693 main (int argc, char **argv)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 char *command_line;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 header the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 long name_length;
109747
1f617baf8ae5 Fix -Wwrite-strings warnings in fakemail.c.
Jan D <jan.h.d@swipnet.se>
parents: 109744
diff changeset
698 const char *mail_program_name;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 char buf[BUFLEN + 1];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 register int size;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 FILE *the_pipe;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 mail_program_name = getenv ("FAKEMAILER");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 if (!(mail_program_name && *mail_program_name))
91725
9dee041c9720 Undo previous change.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 91702
diff changeset
705 mail_program_name = MAIL_PROGRAM_NAME;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 name_length = strlen (mail_program_name);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 my_name = MY_NAME;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 the_streams = ((stream_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 the_date = ((char *) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 the_user = ((char *) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 the_header = read_header ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 command_line = alloc_string (name_length + args_size (the_header));
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 strcpy (command_line, mail_program_name);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 parse_header (the_header, &command_line[name_length]);
42181
358035cb58d9 Conditionally include config.h.
Pavel Janík <Pavel@Janik.cz>
parents: 42134
diff changeset
717
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 the_pipe = popen (command_line, "w");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 if (the_pipe == ((FILE *) NULL))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 fatal ("cannot open pipe to real mailer");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 add_a_stream (the_pipe, pclose);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 write_header (the_header);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 /* Dump the message itself */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 while (!feof (stdin))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 size = fread (buf, 1, BUFLEN, stdin);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 buf[size] = '\0';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 put_string (buf);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 exit (close_the_streams ());
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737
5447
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
738 #endif /* not MSDOS */
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 #endif /* not BSD 4.2 (or newer) */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 42469
diff changeset
740
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 42469
diff changeset
741 /* arch-tag: acb0afa6-315a-4c5b-b9e3-def5725c8783
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 42469
diff changeset
742 (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
743
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
744 /* fakemail.c ends here */