/* bijou HTTP server for plan 9 by sean caron (scaron@umich.edu) */ #include "main.h" /* Generate a timestamp for log file entries */void timestamp(char *ptr) { Tm *ti; ti = localtime(time(0)); sprint(ptr, "%02d/%02d/%04d %02d:%02d:%02d", (ti->mon)+1, ti->mday, (ti->year)+1900, ti->hour, ti->min, ti->sec); return;} /* Generate a timestamp suitable for a directory listing */void file_time(char *ptr, ulong dtime) { Tm *ti; char month[4]; ti = gmtime(dtime); switch (ti->mon) { case 0: strcpy(month, "Jan"); break; case 1: strcpy(month, "Feb"); break; case 2: strcpy(month, "Mar"); break; case 3: strcpy(month, "Apr"); break; case 4: strcpy(month, "May"); break; case 5: strcpy(month, "Jun"); break; case 6: strcpy(month, "Jul"); break; case 7: strcpy(month, "Aug"); break; case 8: strcpy(month, "Sep"); break; case 9: strcpy(month, "Oct"); break; case 10: strcpy(month, "Nov"); break; case 11: strcpy(month, "Dec"); break; } sprint(ptr, "%02d-%s-%04d %02d:%02d", ti->mday, month, (ti->year)+1900, ti->hour, ti->min); return;} /* Generate a RFC1123 compliant timestamp for the Date header field */void rfc1123_time(char *ptr, ulong tm) { Tm *ti; char day[4]; char month[4]; ti = gmtime(tm); switch (ti->wday) { case 0: strcpy(day, "Sun"); break; case 1: strcpy(day, "Mon"); break; case 2: strcpy(day, "Tue"); break; case 3: strcpy(day, "Wed"); break; case 4: strcpy(day, "Thu"); break; case 5: strcpy(day, "Fri"); break; case 6: strcpy(day, "Sat"); break; } switch (ti->mon) { case 0: strcpy(month, "Jan"); break; case 1: strcpy(month, "Feb"); break; case 2: strcpy(month, "Mar"); break; case 3: strcpy(month, "Apr"); break; case 4: strcpy(month, "May"); break; case 5: strcpy(month, "Jun"); break; case 6: strcpy(month, "Jul"); break; case 7: strcpy(month, "Aug"); break; case 8: strcpy(month, "Sep"); break; case 9: strcpy(month, "Oct"); break; case 10: strcpy(month, "Nov"); break; case 11: strcpy(month, "Dec"); break; } sprint(ptr, "%s, %02d %s %04d %02d:%02d:%02d GMT", day, ti->mday, month, (ti->year)+1900, ti->hour, ti->min, ti->sec); return;}
/* bijou HTTP server for plan 9 by sean caron (scaron@umich.edu) */
#include "main.h"
/* Generate a timestamp for log file entries */
void timestamp(char *ptr) {
Tm *ti;
ti = localtime(time(0));
sprint(ptr, "%02d/%02d/%04d %02d:%02d:%02d", (ti->mon)+1, ti->mday, (ti->year)+1900,
ti->hour, ti->min, ti->sec);
return;
}
/* Generate a timestamp suitable for a directory listing */
void file_time(char *ptr, ulong dtime) {
Tm *ti;
char month[4];
ti = gmtime(dtime);
switch (ti->mon) {
case 0:
strcpy(month, "Jan");
break;
case 1:
strcpy(month, "Feb");
break;
case 2:
strcpy(month, "Mar");
break;
case 3:
strcpy(month, "Apr");
break;
case 4:
strcpy(month, "May");
break;
case 5:
strcpy(month, "Jun");
break;
case 6:
strcpy(month, "Jul");
break;
case 7:
strcpy(month, "Aug");
break;
case 8:
strcpy(month, "Sep");
break;
case 9:
strcpy(month, "Oct");
break;
case 10:
strcpy(month, "Nov");
break;
case 11:
strcpy(month, "Dec");
break;
}
sprint(ptr, "%02d-%s-%04d %02d:%02d", ti->mday, month, (ti->year)+1900, ti->hour, ti->min);
return;
}
/* Generate a RFC1123 compliant timestamp for the Date header field */
void rfc1123_time(char *ptr, ulong tm) {
Tm *ti;
char day[4];
char month[4];
ti = gmtime(tm);
switch (ti->wday) {
case 0:
strcpy(day, "Sun");
break;
case 1:
strcpy(day, "Mon");
break;
case 2:
strcpy(day, "Tue");
break;
case 3:
strcpy(day, "Wed");
break;
case 4:
strcpy(day, "Thu");
break;
case 5:
strcpy(day, "Fri");
break;
case 6:
strcpy(day, "Sat");
break;
}
switch (ti->mon) {
case 0:
strcpy(month, "Jan");
break;
case 1:
strcpy(month, "Feb");
break;
case 2:
strcpy(month, "Mar");
break;
case 3:
strcpy(month, "Apr");
break;
case 4:
strcpy(month, "May");
break;
case 5:
strcpy(month, "Jun");
break;
case 6:
strcpy(month, "Jul");
break;
case 7:
strcpy(month, "Aug");
break;
case 8:
strcpy(month, "Sep");
break;
case 9:
strcpy(month, "Oct");
break;
case 10:
strcpy(month, "Nov");
break;
case 11:
strcpy(month, "Dec");
break;
}
sprint(ptr, "%s, %02d %s %04d %02d:%02d:%02d GMT", day, ti->mday, month, (ti->year)+1900,
ti->hour, ti->min, ti->sec);
return;
}