[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
$DateLocal$
From: |
鯉江英隆 |
Subject: |
$DateLocal$ |
Date: |
Fri, 15 Jun 2001 13:29:37 +0900 |
I implement $DateLocal$ keyword expansion using strftime().
Is this a bad idea?
--
KOIE Hidetaka <address@hidden>
Index: rcs.c
===================================================================
RCS file: /home2/cvsroot/ccvs/src/rcs.c,v
retrieving revision 1.248
diff -p -u -b -B -r1.248 rcs.c
--- rcs.c 7 Jun 2001 19:10:26 -0000 1.248
+++ rcs.c 15 Jun 2001 04:22:26 -0000
@@ -3355,6 +3355,7 @@ static const struct rcs_keyword keywords
{
{ KEYWORD_INIT ("Author") },
{ KEYWORD_INIT ("Date") },
+ { KEYWORD_INIT ("DateLocal") },
{ KEYWORD_INIT ("Header") },
{ KEYWORD_INIT ("Id") },
{ KEYWORD_INIT ("Locker") },
@@ -3370,6 +3371,7 @@ enum keyword
{
KEYWORD_AUTHOR = 0,
KEYWORD_DATE,
+ KEYWORD_DATELOCAL,
KEYWORD_HEADER,
KEYWORD_ID,
KEYWORD_LOCKER,
@@ -3400,6 +3402,44 @@ printable_date (rcs_date)
return xstrdup (buf);
}
+static char *
+printable_date_local (rcs_date)
+ const char *rcs_date;
+{
+ int year, mon, mday, hour, min, sec;
+ char buf[100];
+
+ (void) sscanf (rcs_date, SDATEFORM, &year, &mon, &mday, &hour, &min,
+ &sec);
+ if (year < 1900)
+ year += 1900;
+
+ {
+ time_t t;
+ struct tm gmt, local;
+ struct tm tm;
+ struct tm *ptm;
+
+ t = 0;
+ gmt = *gmtime(&t);
+ local = *localtime(&t);
+
+ memset(&tm, 0, sizeof tm);
+ tm.tm_year = year - 1900 + (local.tm_year - gmt.tm_year);
+ tm.tm_mon = mon - 1 + (local.tm_mon - gmt.tm_mon);
+ tm.tm_mday = mday + (local.tm_mday - gmt.tm_mday);
+ tm.tm_hour = hour + (local.tm_hour - gmt.tm_hour);
+ tm.tm_min = min + (local.tm_min - gmt.tm_min);
+ tm.tm_sec = sec + (local.tm_sec - gmt.tm_sec);
+ t = mktime(&tm);
+ ptm = localtime(&t);
+ if (strftime (buf, sizeof buf, "%Y/%m/%d %H:%M:%S %Z", ptm) == 0)
+ return printable_date (rcs_date);
+ }
+
+ return xstrdup (buf);
+}
+
/* Escape the characters in a string so that it can be included in an
RCS value. */
@@ -3601,6 +3641,11 @@ expand_keywords (rcs, ver, name, log, lo
case KEYWORD_DATE:
value = printable_date (ver->date);
+ free_value = 1;
+ break;
+
+ case KEYWORD_DATELOCAL:
+ value = printable_date_local (ver->date);
free_value = 1;
break;