Back to index

courier  0.68.2
rfc822_mkdate.c
Go to the documentation of this file.
00001 /*
00002 ** Copyright 1998 - 1999 Double Precision, Inc.
00003 ** See COPYING for distribution information.
00004 */
00005 
00006 /*
00007 */
00008 
00009 #include      "rfc822.h"
00010 
00011 #include      <sys/types.h>
00012 #include      <time.h>
00013 #include      <stdio.h>
00014 #include      <string.h>
00015 #if    HAVE_UNISTD_H
00016 #include      <unistd.h>
00017 #endif
00018 
00019 static const char * const months[]={
00020        "Jan",
00021        "Feb",
00022        "Mar",
00023        "Apr",
00024        "May",
00025        "Jun",
00026        "Jul",
00027        "Aug",
00028        "Sep",
00029        "Oct",
00030        "Nov",
00031        "Dec"};
00032 
00033 static const char * const wdays[]={
00034        "Sun",
00035        "Mon",
00036        "Tue",
00037        "Wed",
00038        "Thu",
00039        "Fri",
00040        "Sat"};
00041 
00042 void rfc822_mkdate_buf(time_t t, char *buf)
00043 {
00044 struct tm *p;
00045 int    offset;
00046 
00047 #if    USE_TIME_ALTZONE
00048 
00049        p=localtime(&t);
00050        offset= -(int)timezone;
00051 
00052        if (p->tm_isdst > 0)
00053               offset= -(int)altzone;
00054 
00055        if (offset % 60)
00056        {
00057               offset=0;
00058               p=gmtime(&t);
00059        }
00060        offset /= 60;
00061 #else
00062 #if    USE_TIME_DAYLIGHT
00063 
00064        p=localtime(&t);
00065        offset= -(int)timezone;
00066 
00067        if (p->tm_isdst > 0)
00068               offset += 60*60;
00069        if (offset % 60)
00070        {
00071               offset=0;
00072               p=gmtime(&t);
00073        }
00074        offset /= 60;
00075 #else
00076 #if    USE_TIME_GMTOFF
00077        p=localtime(&t);
00078        offset= p->tm_gmtoff;
00079 
00080        if (offset % 60)
00081        {
00082               offset=0;
00083               p=gmtime(&t);
00084        }
00085        offset /= 60;
00086 #else
00087        p=gmtime(&t);
00088        offset=0;
00089 #endif
00090 #endif
00091 #endif
00092 
00093        offset = (offset % 60) + offset / 60 * 100;
00094 
00095        sprintf(buf, "%s, %02d %s %04d %02d:%02d:%02d %+05d",
00096               wdays[p->tm_wday],
00097               p->tm_mday,
00098               months[p->tm_mon],
00099               p->tm_year+1900,
00100               p->tm_hour,
00101               p->tm_min,
00102               p->tm_sec,
00103               offset);
00104 }
00105 
00106 const char *rfc822_mkdate(time_t t)
00107 {
00108 static char buf[50];
00109 
00110        rfc822_mkdate_buf(t, buf);
00111        return (buf);
00112 }