[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:19860] Re: [Y2K] mnews-1.22
From: Hideaki YOSHIFUJI (吉藤英明) <yoshfuji@xxxxxxxxxxxxxxxxx>
Subject: [debian-users:19856] [Y2K] mnews-1.22
Date: Sat, 1 Jan 2000 09:51:21 +0900
> mnews-1.22 に RFC822 な2桁年の日付を与えるとうまく動作しません。
> これは src/mnews.c の convert_article_date() に問題があるためです。
> 以下のパッチで修正できます。
パッチだけみて判断しているので、ぼけかましてたら蹴ってください。
> dates = next_param(dates);
> *year = atoi(dates); /* 年 */
> - if ((*year > 0) && (*year < 1000)) {
> - *year += 1900;
> + if ((*year >= 0) && (*year < 1000)) {
> + *year += (*year < 100) ? 2000 : 1900;
> }
もともとのは、
*yearが(整数だと仮定して)1以上999以下のときに1900を加える、その他はそのまま
ですよね。そのため、*yearが0のときは0のまま、だと。
0 -> 0
1 -> 1901
…
99 -> 1999
100 -> 2000
…
999 -> 2899
1000 -> 1000
…
1999 -> 1999
2000 -> 2000
パッチは、
*yearが0以上99以下のときに2000を加える、100以上999以下のときに1900を
加える、それ以外はそのまま、ですね。
0 -> 2000
1 -> 2001
…
99 -> 2099
100 -> 2000
…
999 -> 2899
1000 -> 1000
…
1999 -> 1999
2000 -> 2000
前者は2000年の「RFC822 な2桁年の日付」である“00”を与えると、うまく
動かないようですし、後者は、1999年の「RFC822 な2桁年の日付」である
“99”を与えるとだめな感じがします。
日付の年の部分は2桁か4桁しかありえず、1970年以前のメイルを扱う可能性が
ないとすれば、こうなるかな。
if ((*year >= 0) && (*year < 100)) {
*year += (*year < 70) ? 2000 : 1900;
}
--
喜瀬“冬猫”浩@南国沖縄