diff options
Diffstat (limited to 'rfc822/rfc822_mkdate.c')
| -rw-r--r-- | rfc822/rfc822_mkdate.c | 112 | 
1 files changed, 112 insertions, 0 deletions
| diff --git a/rfc822/rfc822_mkdate.c b/rfc822/rfc822_mkdate.c new file mode 100644 index 0000000..ad84276 --- /dev/null +++ b/rfc822/rfc822_mkdate.c @@ -0,0 +1,112 @@ +/* +** Copyright 1998 - 1999 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +/* +*/ + +#include	"rfc822.h" + +#include	<sys/types.h> +#include	<time.h> +#include	<stdio.h> +#include	<string.h> +#if	HAVE_UNISTD_H +#include	<unistd.h> +#endif + +static const char * const months[]={ +	"Jan", +	"Feb", +	"Mar", +	"Apr", +	"May", +	"Jun", +	"Jul", +	"Aug", +	"Sep", +	"Oct", +	"Nov", +	"Dec"}; + +static const char * const wdays[]={ +	"Sun", +	"Mon", +	"Tue", +	"Wed", +	"Thu", +	"Fri", +	"Sat"}; + +void rfc822_mkdate_buf(time_t t, char *buf) +{ +struct	tm *p; +int	offset; + +#if	USE_TIME_ALTZONE + +	p=localtime(&t); +	offset= -(int)timezone; + +	if (p->tm_isdst > 0) +		offset= -(int)altzone; + +	if (offset % 60) +	{ +		offset=0; +		p=gmtime(&t); +	} +	offset /= 60; +#else +#if	USE_TIME_DAYLIGHT + +	p=localtime(&t); +	offset= -(int)timezone; + +	if (p->tm_isdst > 0) +		offset += 60*60; +	if (offset % 60) +	{ +		offset=0; +		p=gmtime(&t); +	} +	offset /= 60; +#else +#if	USE_TIME_GMTOFF +	p=localtime(&t); +	offset= p->tm_gmtoff; + +	if (offset % 60) +	{ +		offset=0; +		p=gmtime(&t); +	} +	offset /= 60; +#else +	p=gmtime(&t); +	offset=0; +#endif +#endif +#endif + +	offset = (offset % 60) + offset / 60 * 100; + +	sprintf(buf, "%s, %02d %s %04d %02d:%02d:%02d %+05d", +		wdays[p->tm_wday], +		p->tm_mday, +		months[p->tm_mon], +		p->tm_year+1900, +		p->tm_hour, +		p->tm_min, +		p->tm_sec, +		offset); +} + +const char *rfc822_mkdate(time_t t) +{ +static char buf[50]; + +	rfc822_mkdate_buf(t, buf); +	return (buf); +} | 
