[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;
    }
-- 
喜瀬“冬猫”浩@南国沖縄