/* sendmail-like interface to /bin/mail for system V,
Copyright (C) 1985, 1994, 1999, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+ 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+
+Author: Bill Rozas <jinx@martigny.ai.mit.edu>
+(according to ack.texi)
This file is part of GNU Emacs.
struct stream_record
{
FILE *handle;
- int (*action)();
+ int (*action)(FILE *);
struct stream_record *rest_streams;
};
typedef struct stream_record *stream_list;
static stream_list the_streams;
static boolean no_problems = true;
-extern FILE *popen ();
-extern int fclose (), pclose ();
+static void fatal (char *s1) NO_RETURN;
+
+extern FILE *popen (const char *, const char *);
+extern int fclose (FILE *), pclose (FILE *);
#ifdef CURRENT_USER
extern struct passwd *getpwuid ();
/* Print error message. `s1' is printf control string, `s2' is arg for it. */
static void
-error (s1, s2)
- char *s1, *s2;
+error (char *s1, char *s2)
{
printf ("%s: ", my_name);
printf (s1, s2);
/* Print error message and exit. */
static void
-fatal (s1)
- char *s1;
+fatal (char *s1)
{
error ("%s", s1);
exit (EXIT_FAILURE);
/* Like malloc but get fatal error if memory is exhausted. */
static long *
-xmalloc (size)
- int size;
+xmalloc (int size)
{
long *result = (long *) malloc (((unsigned) size));
if (result == ((long *) NULL))
}
static long *
-xrealloc (ptr, size)
- long *ptr;
- int size;
+xrealloc (long int *ptr, int size)
{
long *result = (long *) realloc (ptr, ((unsigned) size));
if (result == ((long *) NULL))
/* Initialize a linebuffer for use */
void
-init_linebuffer (linebuffer)
- struct linebuffer *linebuffer;
+init_linebuffer (struct linebuffer *linebuffer)
{
linebuffer->size = INITIAL_LINE_SIZE;
linebuffer->buffer = ((char *) xmalloc (INITIAL_LINE_SIZE));
Return the length of the line. */
long
-readline (linebuffer, stream)
- struct linebuffer *linebuffer;
- FILE *stream;
+readline (struct linebuffer *linebuffer, FILE *stream)
{
char *buffer = linebuffer->buffer;
char *p = linebuffer->buffer;
If there is no keyword, return NULL and don't alter *REST. */
char *
-get_keyword (field, rest)
- register char *field;
- char **rest;
+get_keyword (register char *field, char **rest)
{
static char keyword[KEYWORD_SIZE];
register char *ptr;
/* Nonzero if the string FIELD starts with a colon-terminated keyword. */
boolean
-has_keyword (field)
- char *field;
+has_keyword (char *field)
{
char *ignored;
return (get_keyword (field, &ignored) != ((char *) NULL));
the caller has to make it big enough. */
char *
-add_field (the_list, field, where)
- line_list the_list;
- register char *field, *where;
+add_field (line_list the_list, register char *field, register char *where)
{
register char c;
while (true)
}
\f
line_list
-make_file_preface ()
+make_file_preface (void)
{
char *the_string, *temp;
long idiotic_interface;
}
void
-write_line_list (the_list, the_stream)
- register line_list the_list;
- FILE *the_stream;
+write_line_list (register line_list the_list, FILE *the_stream)
{
for ( ;
the_list != ((line_list) NULL) ;
}
\f
int
-close_the_streams ()
+close_the_streams (void)
{
register stream_list rem;
for (rem = the_streams;
}
void
-add_a_stream (the_stream, closing_action)
- FILE *the_stream;
- int (*closing_action)();
+add_a_stream (FILE *the_stream, int (*closing_action) (FILE *))
{
stream_list old = the_streams;
the_streams = new_stream ();
}
int
-my_fclose (the_file)
- FILE *the_file;
+my_fclose (FILE *the_file)
{
putc ('\n', the_file);
fflush (the_file);
}
boolean
-open_a_file (name)
- char *name;
+open_a_file (char *name)
{
FILE *the_stream = fopen (name, "a");
if (the_stream != ((FILE *) NULL))
}
void
-put_string (s)
- char *s;
+put_string (char *s)
{
register stream_list rem;
for (rem = the_streams;
}
void
-put_line (string)
- char *string;
+put_line (char *string)
{
register stream_list rem;
for (rem = the_streams;
Call open_a_file for each file. */
void
-setup_files (the_list, field)
- register line_list the_list;
- register char *field;
+setup_files (register line_list the_list, register char *field)
{
register char *start;
register char c;
The result says how big to make the buffer to pass to parse_header. */
int
-args_size (the_header)
- header the_header;
+args_size (header the_header)
{
register header old = the_header;
register line_list rem;
Also, if the header has any FCC fields, call setup_files for each one. */
void
-parse_header (the_header, where)
- header the_header;
- register char *where;
+parse_header (header the_header, register char *where)
{
register header old = the_header;
do
Continuation lines are grouped in the headers they continue. */
header
-read_header ()
+read_header (void)
{
register header the_header = ((header) NULL);
register line_list *next_line = ((line_list *) NULL);
}
\f
void
-write_header (the_header)
- header the_header;
+write_header (header the_header)
{
register header old = the_header;
do
}
\f
int
-main (argc, argv)
- int argc;
- char **argv;
+main (int argc, char **argv)
{
char *command_line;
header the_header;
register int size;
FILE *the_pipe;
- extern char *getenv ();
+ extern char *getenv (const char *);
mail_program_name = getenv ("FAKEMAILER");
if (!(mail_program_name && *mail_program_name))