annotate lib-src/fakemail.c @ 69215:ef5cd9601f14

(mh-folder-list): Fix problem with passing in a folder and getting nothing back. Fix problem with passing in empty string and getting the entire filesystem (or infinite loop). Don't append slash to folder. These fixes fix problems observed with the pick search. Thanks to Thomas Baumann for the help (closes SF #1435381).
author Bill Wohler <wohler@newt.com>
date Tue, 28 Feb 2006 23:54:53 +0000
parents 3661e9b3c48f
children e112ec9aa49b c5406394f567
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,
64769
6358e3c6075c Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64083
diff changeset
2 Copyright (C) 1985, 1994, 1999, 2002, 2003, 2004,
68647
3661e9b3c48f Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64769
diff changeset
3 2005, 2006 Free Software Foundation, Inc.
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 This file is part of GNU Emacs.
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6
37
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
8 it under the terms of the GNU General Public License as published by
6109
e52619114580 Update GPL.
David J. MacKenzie <djm@gnu.org>
parents: 5959
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
37
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
10 any later version.
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
37
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
12 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
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
15 GNU General Public License for more details.
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
16
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
17 You should have received a copy of the GNU General Public License
e48c0f5e6696 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 20
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
64083
23a17af379b1 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 55442
diff changeset
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
23a17af379b1 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 55442
diff changeset
20 Boston, MA 02110-1301, USA. */
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 #define NO_SHORTNAMES
42134
de525d9743c9 Include "config.h", not <../src/config.h>.
Dave Love <fx@gnu.org>
parents: 34951
diff changeset
23 #define _XOPEN_SOURCE 500 /* for cuserid */
42181
358035cb58d9 Conditionally include config.h.
Pavel Janík <Pavel@Janik.cz>
parents: 42134
diff changeset
24
358035cb58d9 Conditionally include config.h.
Pavel Janík <Pavel@Janik.cz>
parents: 42134
diff changeset
25 #ifdef HAVE_CONFIG_H
42469
64341c22fb4c Include <config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 42181
diff changeset
26 #include <config.h>
42181
358035cb58d9 Conditionally include config.h.
Pavel Janík <Pavel@Janik.cz>
parents: 42134
diff changeset
27 #endif
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
16218
32f82ca8b41f Replaced all BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents: 16121
diff changeset
29 #if defined (BSD_SYSTEM) && !defined (BSD4_1) && !defined (USE_FAKEMAIL)
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 /* 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
31 int
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 main ()
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 {
16121
6e026dc3f1b1 Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 15683
diff changeset
34 return 0;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 #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
37 #ifdef MSDOS
15683
5f9426e991a3 Declare main as int, not void.
Karl Heuer <kwzh@gnu.org>
parents: 15099
diff changeset
38 int
5447
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
39 main ()
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
40 {
16121
6e026dc3f1b1 Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 15683
diff changeset
41 return 0;
5447
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
42 }
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
43 #else /* not MSDOS */
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 /* This conditional contains all the rest of the file. */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 /* These are defined in config in some versions. */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 #ifdef static
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 #undef static
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 #endif
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51
15099
857388330750 [WINDOWSNT]: Include ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
52 #ifdef WINDOWSNT
857388330750 [WINDOWSNT]: Include ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
53 #include "ntlib.h"
857388330750 [WINDOWSNT]: Include ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
54 #endif
857388330750 [WINDOWSNT]: Include ntlib.h.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
55
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 #include <stdio.h>
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 #include <string.h>
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 #include <ctype.h>
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 #include <time.h>
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 #include <pwd.h>
18841
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
61
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
62 /* This is to declare cuserid. */
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
63 #ifdef HAVE_UNISTD_H
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
64 #include <unistd.h>
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
65 #endif
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 /* Type definitions */
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 #define boolean int
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 #define true 1
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 #define false 0
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 /* Various lists */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 struct line_record
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 char *string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 struct line_record *continuation;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 };
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 typedef struct line_record *line_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 struct header_record
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 line_list text;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 struct header_record *next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 struct header_record *previous;
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 typedef struct header_record *header;
42181
358035cb58d9 Conditionally include config.h.
Pavel Janík <Pavel@Janik.cz>
parents: 42134
diff changeset
89
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 struct stream_record
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 FILE *handle;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 int (*action)();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 struct stream_record *rest_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 };
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 typedef struct stream_record *stream_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 /* A `struct linebuffer' is a structure which holds a line of text.
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 * `readline' reads a line from a stream into a linebuffer
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 * and works regardless of the length of the line.
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 */
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 struct linebuffer
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 long size;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 char *buffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 };
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 struct linebuffer lb;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 #define new_list() \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ((line_list) xmalloc (sizeof (struct line_record)))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 #define new_header() \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 ((header) xmalloc (sizeof (struct header_record)))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 #define new_stream() \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 ((stream_list) xmalloc (sizeof (struct stream_record)))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 #define alloc_string(nchars) \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ((char *) xmalloc ((nchars) + 1))
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 /* Global declarations */
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 BUFLEN 1024
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 #define KEYWORD_SIZE 256
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 #define FROM_PREFIX "From"
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 #define MY_NAME "fakemail"
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 #define NIL ((line_list) NULL)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 #define INITIAL_LINE_SIZE 200
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 #ifndef MAIL_PROGRAM_NAME
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 #define MAIL_PROGRAM_NAME "/bin/mail"
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 #endif
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 static char *my_name;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 static char *the_date;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 static char *the_user;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 static line_list file_preface;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 static stream_list the_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 static boolean no_problems = true;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 extern FILE *popen ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 extern int fclose (), pclose ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 #ifdef CURRENT_USER
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 extern struct passwd *getpwuid ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 extern unsigned short geteuid ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 static struct passwd *my_entry;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 #define cuserid(s) \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 (my_entry = getpwuid (((int) geteuid ())), \
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 my_entry->pw_name)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 #endif
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 /* Utilities */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 /* 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
155
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 static void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 error (s1, s2)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 char *s1, *s2;
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 printf ("%s: ", my_name);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 printf (s1, s2);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 printf ("\n");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 no_problems = false;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 /* Print error message and exit. */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 static void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 fatal (s1, s2)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 char *s1, *s2;
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 error (s1, s2);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
173 exit (EXIT_FAILURE);
18
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
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 /* Like malloc but get fatal error if memory is exhausted. */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177
12833
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
178 static long *
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 xmalloc (size)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 int size;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 {
12833
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
182 long *result = (long *) malloc (((unsigned) size));
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
183 if (result == ((long *) NULL))
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 fatal ("virtual memory exhausted", 0);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 return result;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187
12833
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
188 static long *
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 xrealloc (ptr, size)
12833
25464bf61eb1 (xmalloc, xrealloc): Use return-type long *.
Richard M. Stallman <rms@gnu.org>
parents: 10265
diff changeset
190 long *ptr;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 int size;
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 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
194 if (result == ((long *) NULL))
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 fatal ("virtual memory exhausted");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 return result;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 /* Initialize a linebuffer for use */
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 void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 init_linebuffer (linebuffer)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 struct linebuffer *linebuffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 linebuffer->size = INITIAL_LINE_SIZE;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 linebuffer->buffer = ((char *) xmalloc (INITIAL_LINE_SIZE));
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 /* 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
210 Return the length of the line. */
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 long
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 readline (linebuffer, stream)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 struct linebuffer *linebuffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 FILE *stream;
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 *
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 get_keyword (field, rest)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 register char *field;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 char **rest;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 static char keyword[KEYWORD_SIZE];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 register char *ptr;
34609
cb2667416fa5 (get_keyword): Make sure that isspace and
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
256 register int c;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 ptr = &keyword[0];
34609
cb2667416fa5 (get_keyword): Make sure that isspace and
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
259 c = (unsigned char) *field++;
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
260 if (isspace (c) || c == ':')
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 return ((char *) NULL);
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
262 *ptr++ = (islower (c) ? toupper (c) : c);
34609
cb2667416fa5 (get_keyword): Make sure that isspace and
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
263 while (((c = (unsigned char) *field++) != ':') && ! isspace (c))
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
264 *ptr++ = (islower (c) ? toupper (c) : c);
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 *ptr++ = '\0';
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
266 while (isspace (c))
34609
cb2667416fa5 (get_keyword): Make sure that isspace and
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
267 c = (unsigned char) *field++;
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
268 if (c != ':')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
269 return ((char *) NULL);
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 *rest = field;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 return &keyword[0];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
274 /* 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
275
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 boolean
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 has_keyword (field)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 char *field;
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 char *ignored;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 return (get_keyword (field, &ignored) != ((char *) NULL));
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
284 /* 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
285 into the buffer WHERE.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
286 Concatenate lines, putting just a space between them.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
287 Delete everything contained in parentheses.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
288 When a recipient name contains <...>, we discard
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
289 everything except what is inside the <...>.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
290
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
291 We don't pay attention to overflowing WHERE;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
292 the caller has to make it big enough. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
293
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 char *
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 add_field (the_list, field, where)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 line_list the_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 register char *field, *where;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 register char c;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 while (true)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 {
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
302 char *this_recipient_where;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
303 int in_quotes = 0;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
304
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 *where++ = ' ';
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
306 this_recipient_where = where;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
307
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 while ((c = *field++) != '\0')
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 {
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
310 if (c == '\\')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
311 *where++ = c;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
312 else if (c == '"')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
313 {
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
314 in_quotes = ! in_quotes;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
315 *where++ = c;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
316 }
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
317 else if (in_quotes)
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
318 *where++ = c;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
319 else if (c == '(')
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 while (*field && *field != ')') ++field;
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
322 if (! (*field++)) break; /* no close */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
323 continue;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
324 }
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
325 else if (c == ',')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
326 {
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
327 *where++ = ' ';
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
328 /* When we get to the end of one recipient,
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
329 don't discard it if the next one has <...>. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
330 this_recipient_where = where;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 }
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
332 else if (c == '<')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
333 /* Discard everything we got before the `<'. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
334 where = this_recipient_where;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
335 else if (c == '>')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
336 /* Discard the rest of this name that follows the `>'. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
337 {
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
338 while (*field && *field != ',') ++field;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
339 if (! (*field++)) break; /* no comma */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
340 continue;
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
341 }
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
342 else
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
343 *where++ = c;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 if (the_list == NIL) break;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 field = the_list->string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 the_list = the_list->continuation;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 return where;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 line_list
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 make_file_preface ()
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 char *the_string, *temp;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 long idiotic_interface;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 long prefix_length;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 long user_length;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 long date_length;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 line_list result;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 prefix_length = strlen (FROM_PREFIX);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 time (&idiotic_interface);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 the_date = ctime (&idiotic_interface);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 /* the_date has an unwanted newline at the end */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 date_length = strlen (the_date) - 1;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 the_date[date_length] = '\0';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 temp = cuserid ((char *) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 user_length = strlen (temp);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 the_user = alloc_string (user_length + 1);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 strcpy (the_user, temp);
18841
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
372 the_string = alloc_string (3 + prefix_length
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
373 + user_length
36704f455f32 [HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
374 + date_length);
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 temp = the_string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 strcpy (temp, FROM_PREFIX);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 temp = &temp[prefix_length];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 *temp++ = ' ';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 strcpy (temp, the_user);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 temp = &temp[user_length];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 *temp++ = ' ';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 strcpy (temp, the_date);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 result = new_list ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 result->string = the_string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 result->continuation = ((line_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 return result;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 write_line_list (the_list, the_stream)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 register line_list the_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 FILE *the_stream;
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
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 close_the_streams ()
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
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 add_a_stream (the_stream, closing_action)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 FILE *the_stream;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 int (*closing_action)();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 stream_list old = the_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 the_streams = new_stream ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 the_streams->handle = the_stream;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 the_streams->action = closing_action;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 the_streams->rest_streams = old;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 int
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 my_fclose (the_file)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 FILE *the_file;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 putc ('\n', the_file);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 fflush (the_file);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 return fclose (the_file);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 }
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 boolean
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 open_a_file (name)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 char *name;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 FILE *the_stream = fopen (name, "a");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 if (the_stream != ((FILE *) NULL))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 add_a_stream (the_stream, my_fclose);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 if (the_user == ((char *) NULL))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 file_preface = make_file_preface ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 write_line_list (file_preface, the_stream);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 return true;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 return false;
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
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 put_string (s)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 char *s;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 register stream_list rem;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 for (rem = the_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 rem != ((stream_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 rem = rem->rest_streams)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 fputs (s, rem->handle);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 void
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
468 put_line (string)
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
469 char *string;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 register stream_list rem;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 for (rem = the_streams;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 rem != ((stream_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 rem = rem->rest_streams)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 {
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
476 char *s = string;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
477 int column = 0;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
478
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
479 /* Divide STRING into lines. */
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
480 while (*s != 0)
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
481 {
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
482 char *breakpos;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
483
5959
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
484 /* Find the last char that fits. */
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
485 for (breakpos = s; *breakpos && column < 78; ++breakpos)
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
486 {
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
487 if (*breakpos == '\t')
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
488 column += 8;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
489 else
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
490 column++;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
491 }
5959
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
492 /* 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
493 if (*breakpos)
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
494 {
5959
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
495 /* 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
496 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
497
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
498 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
499 {
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
500 /* 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
501 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
502 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
503 /* 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
504 ++breakpos;
e4337a7bbe32 (put_line): Don't break the line if it all fits.
Richard M. Stallman <rms@gnu.org>
parents: 5447
diff changeset
505 }
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
506 }
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
507 /* Output that much, then break the line. */
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
508 fwrite (s, 1, breakpos - s, rem->handle);
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
509 column = 8;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
510
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
511 /* Skip whitespace and prepare to print more addresses. */
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
512 s = breakpos;
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
513 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
514 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
515 fputs ("\n\t", rem->handle);
20
34d646609216 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 18
diff changeset
516 }
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 putc ('\n', rem->handle);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 #define mail_error error
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
524 /* 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
525 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
526 Call open_a_file for each file. */
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
527
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 setup_files (the_list, field)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 register line_list the_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 register char *field;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 register char *start;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 register char c;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 while (true)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 {
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 if (c != '\0')
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 start = field;
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
545 while (((c = *field) != '\0')
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
546 && c != ' '
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
547 && c != '\t'
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
548 && c != ',')
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 field += 1;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 *field = '\0';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 if (!open_a_file (start))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 mail_error ("Could not open file %s", start);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 *field = c;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 if (c != '\0') continue;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 }
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
556 if (the_list == ((line_list) NULL))
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
557 return;
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 field = the_list->string;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 the_list = the_list->continuation;
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 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
563 /* 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
564 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
565
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 int
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 args_size (the_header)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 header the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 register header old = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 register line_list rem;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 register int size = 0;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 do
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 char *field;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 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
577 if ((strcmp (keyword, "TO") == 0)
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
578 || (strcmp (keyword, "CC") == 0)
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
579 || (strcmp (keyword, "BCC") == 0))
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 size += 1 + strlen (field);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 for (rem = the_header->text->continuation;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 rem != NIL;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 rem = rem->continuation)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 size += 1 + strlen (rem->string);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 the_header = the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 } while (the_header != old);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 return size;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
592 /* Scan the header described by the lists THE_HEADER,
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
593 and put all recipient names into the buffer WHERE.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
594 Precede each recipient name with a space.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
595
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
596 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
597
21389
48690fd8d40a (_XOPEN_SOURCE): Define for declaration of cuserid.
Andreas Schwab <schwab@suse.de>
parents: 18841
diff changeset
598 void
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 parse_header (the_header, where)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 header the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 register char *where;
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 register header old = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 do
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 char *field;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 register char *keyword = get_keyword (the_header->text->string, &field);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 if (strcmp (keyword, "TO") == 0)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 where = add_field (the_header->text->continuation, field, where);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 else if (strcmp (keyword, "CC") == 0)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 where = add_field (the_header->text->continuation, field, where);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 else if (strcmp (keyword, "BCC") == 0)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 where = add_field (the_header->text->continuation, field, where);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 the_header->previous->next = the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 the_header->next->previous = the_header->previous;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 else if (strcmp (keyword, "FCC") == 0)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 setup_files (the_header->text->continuation, field);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 the_header = the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 } while (the_header != old);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 *where = '\0';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 }
42181
358035cb58d9 Conditionally include config.h.
Pavel Janík <Pavel@Janik.cz>
parents: 42134
diff changeset
625
10265
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
626 /* 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
627 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
628 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
629 one for each line in that field.
c53a70ec8d85 (xmalloc, xrealloc): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 9621
diff changeset
630 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
631
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 header
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 read_header ()
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 register header the_header = ((header) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 register line_list *next_line = ((line_list *) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 init_linebuffer (&lb);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 do
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 long length;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 register char *line;
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 readline (&lb, stdin);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 line = lb.buffer;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 length = strlen (line);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 if (length == 0) break;
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 if (has_keyword (line))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 register header old = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 the_header = new_header ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 if (old == ((header) NULL))
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 the_header->next = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 the_header->previous = the_header;
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 else
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 the_header->previous = old;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 the_header->next = old->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 old->next = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 next_line = &(the_header->text);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 }
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 if (next_line == ((line_list *) NULL))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 /* 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
671 exit (EXIT_FAILURE);
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 *next_line = new_list ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 (*next_line)->string = alloc_string (length);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 strcpy (((*next_line)->string), line);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 next_line = &((*next_line)->continuation);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 *next_line = NIL;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 } while (true);
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 return the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 void
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 write_header (the_header)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 header the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 register header old = the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 do
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 register line_list the_list;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 for (the_list = the_header->text;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 the_list != NIL;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 the_list = the_list->continuation)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 put_line (the_list->string);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 the_header = the_header->next;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 } while (the_header != old);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 put_line ("");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 return;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701
15683
5f9426e991a3 Declare main as int, not void.
Karl Heuer <kwzh@gnu.org>
parents: 15099
diff changeset
702 int
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 main (argc, argv)
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 int argc;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 char **argv;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 char *command_line;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 header the_header;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 long name_length;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 char *mail_program_name;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 char buf[BUFLEN + 1];
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 register int size;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 FILE *the_pipe;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 extern char *getenv ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 mail_program_name = getenv ("FAKEMAILER");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 if (!(mail_program_name && *mail_program_name))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 mail_program_name = MAIL_PROGRAM_NAME;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 name_length = strlen (mail_program_name);
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 my_name = MY_NAME;
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 the_streams = ((stream_list) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 the_date = ((char *) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 the_user = ((char *) NULL);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 the_header = read_header ();
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 command_line = alloc_string (name_length + args_size (the_header));
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 strcpy (command_line, mail_program_name);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 parse_header (the_header, &command_line[name_length]);
42181
358035cb58d9 Conditionally include config.h.
Pavel Janík <Pavel@Janik.cz>
parents: 42134
diff changeset
731
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 the_pipe = popen (command_line, "w");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 if (the_pipe == ((FILE *) NULL))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 fatal ("cannot open pipe to real mailer");
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 add_a_stream (the_pipe, pclose);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 write_header (the_header);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 /* Dump the message itself */
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 while (!feof (stdin))
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 {
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 size = fread (buf, 1, BUFLEN, stdin);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 buf[size] = '\0';
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 put_string (buf);
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 exit (close_the_streams ());
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750 }
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751
5447
6f0905b05218 (main) [MSDOS]: Dummy stub just to make the file compile.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
752 #endif /* not MSDOS */
18
71c0ddb55b6d Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 #endif /* not BSD 4.2 (or newer) */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 42469
diff changeset
754
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 42469
diff changeset
755 /* arch-tag: acb0afa6-315a-4c5b-b9e3-def5725c8783
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 42469
diff changeset
756 (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
757
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
758 /* fakemail.c ends here */