[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:11156] Re: Slink-JP Y2K problem (Re: Y2K squash party at this weekend (Re: Re: 書籍))
At Thu, 16 Dec 1999 17:50:46 +0900,
Atsuhito Kohda <kohda@xxxxxxxxxxxxxxxxxxxx> wrote:
> > というわけで ざっとですけど ひととおり(*)チェックしました。
> > http://www.debian.or.jp/y2k/ にあります。
>
> Y2K 問題といわれても理解できてないのですが(^^;
> mnews と tkdesk-ja がリストにあるようです。どう
> したら良いのでしょうか?
>
> mnews は PL5 のドキュメントに確かに PL4 までは
> 対応してないと書いてあった記憶はあります。
> 問答無用で PL5 を作るのでしょうか?
そうです。upstream で fix されてればそれで作りなおしてください。
> tkdesk は 1.2 になってますが対応してるのかどうか
> 知りません。slink の tcl/tk は 7.6/4.2-ja だった
> と思いますが、これで作れるかどうかも判ってません
> が、緊急事態なんでしょうか?
tkdesk-ja は表示が変になるだけのような感じなので
それほど critical ではないかも…
ちなみに slink-jp の tkdesk-ja のソースを見ると
libdesk/dsk_ls.c;
char *file_time (filetime)
time_t filetime;
{
time_t curtime;
struct tm *filetmp, *curtmp, filetm, curtm;
static char timestr[32];
time (&curtime);
filetmp = gmtime (&filetime);
filetm.tm_year = filetmp->tm_year;
filetm.tm_yday = filetmp->tm_yday;
curtmp = gmtime (&curtime);
curtm.tm_year = curtmp->tm_year;
curtm.tm_yday = curtmp->tm_yday;
strncpy (timestr, ctime (&filetime) + 4, 12);
if ((filetm.tm_year == curtm.tm_year &&
(curtm.tm_yday - filetm.tm_yday) < 182) ||
(filetm.tm_year == curtm.tm_year - 1 &&
filetm.tm_yday > (182 + curtm.tm_yday)))
timestr[12] = '\0';
else {
timestr[6] = '\0';
strcat (timestr, " 19"); /* <-- [1] */
strcat (timestr, itoa (filetm.tm_year));
}
return timestr;
} /* file_time */
[1] のところで何もかんがえずに 19 にしてます。
gmtime(3)は 2000年は tm_year を 100 にしますから (tm_yearは1900年からの年数)
2000 年は 19100 となりますね。
# しかも 182日後?
libdesk/misc.c;
int dsk_localtime_Cmd (clientData, interp, argc, argv)
ClientData clientData;
Tcl_Interp *interp;
int argc;
char *argv[];
{
time_t t;
struct tm *ts;
char buf[10];
t = time (NULL);
ts = localtime (&t);
sprintf (buf, "%02d ", ts->tm_sec);
Tcl_AppendResult (interp, "sec ", buf, NULL);
sprintf (buf, "%02d ", ts->tm_min);
Tcl_AppendResult (interp, "min ", buf, NULL);
sprintf (buf, "%02d ", ts->tm_hour);
Tcl_AppendResult (interp, "hour ", buf, NULL);
sprintf (buf, "%d ", ts->tm_mday);
Tcl_AppendResult (interp, "mday ", buf, NULL);
sprintf (buf, "%d ", ts->tm_mon);
Tcl_AppendResult (interp, "mon ", buf, NULL);
sprintf (buf, "%d ", ts->tm_year % 100); /* <-- [2] */
Tcl_AppendResult (interp, "year ", buf, NULL);
sprintf (buf, "%d ", ts->tm_wday);
Tcl_AppendResult (interp, "wday ", buf, NULL);
sprintf (buf, "%d ", ts->tm_yday);
Tcl_AppendResult (interp, "yday ", buf, NULL);
sprintf (buf, "%d ", ts->tm_isdst);
Tcl_AppendResult (interp, "isdst ", buf, NULL);
return (TCL_OK);
} /* dsk_localtime_Cmd */
[2] のところで 100 でわったあまりにしているので
2000年になると 00 になります。桁数が問題ではないのなら
ここは ts->tm_year + 1900 を使った方がよいと思います。
# この結果がどう使われているかまでは見ていません。
--
鵜飼文敏