X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Ffmt_date.c;h=6d37bd7449e8f414c5fbe269dfaa77d71f4a0627;hb=fb6f6fa4ec4e3277e30d84326d48e6850822d318;hp=04cb391f5b8698ee990622a46bc62091be15d7ba;hpb=3e14f31738c6a9ede5f026b6de43bcd21197a06d;p=citadel.git diff --git a/webcit/fmt_date.c b/webcit/fmt_date.c index 04cb391f5..6d37bd744 100644 --- a/webcit/fmt_date.c +++ b/webcit/fmt_date.c @@ -1,12 +1,20 @@ /* - * $Id$ + * Copyright (c) 1996-2012 by the citadel.org team + * + * This program is open source software. You can redistribute it and/or + * modify it under the terms of the GNU General Public License, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. */ #include "webcit.h" #include "webserver.h" #ifdef HAVE_USELOCALE -extern locale_t wc_locales[]; +extern locale_t *wc_locales; #endif typedef unsigned char byte; @@ -47,7 +55,7 @@ size_t wc_strftime(char *s, size_t max, const char *format, const struct tm *tm) /* * Format a date/time stamp for output */ -void webcit_fmt_date(char *buf, time_t thetime, int Format) +void webcit_fmt_date(char *buf, size_t siz, time_t thetime, int Format) { struct tm tm; struct tm today_tm; @@ -67,6 +75,7 @@ void webcit_fmt_date(char *buf, time_t thetime, int Format) * show the month and day, and the time * older than 6 months, show only the date * DATEFMT_RAWDATE: show full date, regardless of age + * DATEFMT_LOCALEDATE: show full date as prefered for the locale */ switch (Format) { @@ -75,28 +84,31 @@ void webcit_fmt_date(char *buf, time_t thetime, int Format) &&(tm.tm_mon == today_tm.tm_mon) &&(tm.tm_mday == today_tm.tm_mday)) { if (time_format == WC_TIMEFORMAT_24) - wc_strftime(buf, 32, "%k:%M", &tm); + wc_strftime(buf, siz, "%k:%M", &tm); else - wc_strftime(buf, 32, "%l:%M%p", &tm); + wc_strftime(buf, siz, "%l:%M%p", &tm); } else if (today_timet - thetime < 15552000) { if (time_format == WC_TIMEFORMAT_24) - wc_strftime(buf, 32, "%b %d %k:%M", &tm); + wc_strftime(buf, siz, "%b %d %k:%M", &tm); else - wc_strftime(buf, 32, "%b %d %l:%M%p", &tm); + wc_strftime(buf, siz, "%b %d %l:%M%p", &tm); } else { - wc_strftime(buf, 32, "%b %d %Y", &tm); + wc_strftime(buf, siz, "%b %d %Y", &tm); } break; case DATEFMT_FULL: if (time_format == WC_TIMEFORMAT_24) - wc_strftime(buf, 32, "%a %b %d %Y %T %Z", &tm); + wc_strftime(buf, siz, "%a %b %d %Y %T %Z", &tm); else - wc_strftime(buf, 32, "%a %b %d %Y %r %Z", &tm); + wc_strftime(buf, siz, "%a %b %d %Y %r %Z", &tm); break; case DATEFMT_RAWDATE: - wc_strftime(buf, 32, "%a %b %d %Y", &tm); + wc_strftime(buf, siz, "%a %b %d %Y", &tm); + break; + case DATEFMT_LOCALEDATE: + wc_strftime(buf, siz, "%x", &tm); break; } } @@ -106,10 +118,10 @@ void webcit_fmt_date(char *buf, time_t thetime, int Format) * Try to guess whether the user will prefer 12 hour or 24 hour time based on the locale. */ long guess_calhourformat(void) { - char buf[32]; + char buf[64]; struct tm tm; memset(&tm, 0, sizeof tm); - wc_strftime(buf, 32, "%X", &tm); + wc_strftime(buf, 64, "%X", &tm); if (buf[strlen(buf)-1] == 'M') { return 12; } @@ -150,7 +162,7 @@ int get_time_format_cached (void) * buf the output buffer * thetime time to format into buf */ -void fmt_time(char *buf, time_t thetime) +void fmt_time(char *buf, size_t siz, time_t thetime) { struct tm *tm; int hour; @@ -166,12 +178,12 @@ void fmt_time(char *buf, time_t thetime) hour = hour - 12; if (time_format == WC_TIMEFORMAT_24) { - sprintf(buf, "%d:%02d", + snprintf(buf, siz, "%d:%02d", tm->tm_hour, tm->tm_min ); } else { - sprintf(buf, "%d:%02d%s", + snprintf(buf, siz, "%d:%02d%s", hour, tm->tm_min, ((tm->tm_hour > 12) ? "pm" : "am") ); }