X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/f55658040dbc67b3acf345d82d017e47389b0727..09ffa822f8c0ff82d7a277d1bc673cc0831010b6:/lib-src/fakemail.c diff --git a/lib-src/fakemail.c b/lib-src/fakemail.c index 2c2b462e36..f98fb74947 100644 --- a/lib-src/fakemail.c +++ b/lib-src/fakemail.c @@ -1,13 +1,16 @@ /* sendmail-like interface to /bin/mail for system V, - Copyright (C) 1985, 1994, 1999, 2002, 2003, 2004, - 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1985, 1994, 1999, 2001, 2002, 2003, 2004, + 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + +Author: Bill Rozas +(according to ack.texi) This file is part of GNU Emacs. -GNU Emacs is free software; you can redistribute it and/or modify +GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -15,18 +18,16 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -Boston, MA 02110-1301, USA. */ +along with GNU Emacs. If not, see . */ + -#define NO_SHORTNAMES #define _XOPEN_SOURCE 500 /* for cuserid */ #ifdef HAVE_CONFIG_H #include #endif -#if defined (BSD_SYSTEM) && !defined (BSD4_1) && !defined (USE_FAKEMAIL) +#if defined (BSD_SYSTEM) && !defined (USE_FAKEMAIL) /* This program isnot used in BSD, so just avoid loader complaints. */ int main () @@ -53,7 +54,6 @@ main () #include "ntlib.h" #endif -#include #include #include #include @@ -71,15 +71,13 @@ main () #define true 1 #define false 0 -/* True if TM_YEAR is a struct tm's tm_year value that is acceptable - to asctime. Glibc asctime returns a useful string unless TM_YEAR - is nearly INT_MAX, but the C Standard lets C libraries overrun a - buffer if TM_YEAR needs more than 4 bytes. */ -#ifdef __GLIBC__ -# define TM_YEAR_IN_ASCTIME_RANGE(tm_year) ((tm_year) <= INT_MAX - 1900) -#else +#define TM_YEAR_BASE 1900 + +/* Nonzero if TM_YEAR is a struct tm's tm_year value that causes + asctime to have well-defined behavior. */ +#ifndef TM_YEAR_IN_ASCTIME_RANGE # define TM_YEAR_IN_ASCTIME_RANGE(tm_year) \ - (-999 - 1900 <= (tm_year) && (tm_year) <= 9999 - 1900) + (1000 - TM_YEAR_BASE <= (tm_year) && (tm_year) <= 9999 - TM_YEAR_BASE) #endif /* Various lists */ @@ -178,10 +176,10 @@ error (s1, s2) /* Print error message and exit. */ static void -fatal (s1, s2) - char *s1, *s2; +fatal (s1) + char *s1; { - error (s1, s2); + error ("%s", s1); exit (EXIT_FAILURE); } @@ -193,7 +191,7 @@ xmalloc (size) { long *result = (long *) malloc (((unsigned) size)); if (result == ((long *) NULL)) - fatal ("virtual memory exhausted", 0); + fatal ("virtual memory exhausted"); return result; } @@ -378,9 +376,9 @@ make_file_preface () Don't use 'ctime', as that might dump core if the hardware clock is set to a bizarre value. */ tm = localtime (&idiotic_interface); - if (! (tm && TM_YEAR_IN_ASCTIME_RANGE (tm->tm_year))) - fatal ("current time is out of range", 0); - the_date = asctime (tm); + if (! (tm && TM_YEAR_IN_ASCTIME_RANGE (tm->tm_year) + && (the_date = asctime (tm)))) + fatal ("current time is out of range"); /* the_date has an unwanted newline at the end */ date_length = strlen (the_date) - 1; the_date[date_length] = '\0'; @@ -697,6 +695,8 @@ read_header () } while (true); + if (! the_header) + fatal ("input message has no header"); return the_header->next; }