子子子子子子(ねこのここねこ)はてブロ部

Macネタが主のIT記事と、興味ある展覧会リストや観覧感想などを書いてますよ。自転車ロードレースも好き。

Stacks用アイコンの変更日を未来にする→2038年問題にひっかかる

Dockに入れてあるDownloadsフォルダの表示設定を(Leopardなので)Stacksにしている。Stacksのアイコンは全て重なって見えるので、籠のようなアイコンを最前面にしておけば、視覚的にファイルが籠に入ったように見える。
そんな籠のようなアイコンを提供してくれているのがこちら。
http://susumu.seph.ws/?page_id=11
ここのStack iconsを使う。今回は「 Box lightblue Downloads」というのを使った。

このアイコンの変更日を一番未来にして、「表示順序」を「変更順」にしておけば、このアイコンが最前面に表示される。

さて。ファイルの日付を指定の日時にするには、touchコマンドを使う。

touch -t [[CC]YY]MMDDhhmm[.SS] ファイル名

CCYYMMDDhhmm.SSを2100年のてきとーな日にしておけば、必ず最前面に来てくれるよな…

air:~/Downloads user$ touch -t 21001231235959 \ Box\ lightblue\ Downloads
touch: out of range or illegal time specification: [[CC]YY]MMDDhhmm[.SS]

範囲外?ではもうちょっと近い未来に。

air:~/Downloads user$ touch -t 203712312359 \ Box\ lightblue\ Downloads
air:~/Downloads user$ touch -t 203812312359 \ Box\ lightblue\ Downloads
touch: out of range or illegal time specification: [[CC]YY]MMDDhhmm[.SS]

ふむ。2037年なら大丈夫だけど2038年ならダメ。


そういえばUNIX2038年問題ってのがあったな。
wikipedia:2038年問題

C言語の規格を定めた「ISO/IEC 9899:1999」では、time_t型の範囲や精度はいずれも処理系依存としているが、time_t型は、伝統的には符号つき32ビット整数(signed long int型)であり、最大値は (231 - 1) = 2,147,483,647 となる。つまり、2,147,483,647秒までしか計算できない。
このようなAPIの下で作られたアプリケーションでは、1970年1月1日0時0分0秒から2,147,483,647秒を経過した、2038年1月19日3時14分7秒を越えると、この値がオーバーフローし、負と扱われるため、誤作動する可能性が高い。

これのせいか。

では試しに2038年1月19日3時14分7秒よりも後の3時15分にしてみよう。

air:~/Downloads user$ touch -t 203801190315 \ Box\ lightblue\ Downloads

?エラー無い?
あ、UTC(国際標準時)で2038年1月19日3時14分7秒=JSTで2038年1月19日12時14分7秒か。では

air:~/Downloads user$ touch -t 203801191214.07 \ Box\ lightblue\ Downloads
air:~/Downloads user$ touch -t 203801191214.08 \ Box\ lightblue\ Downloads
touch: out of range or illegal time specification: [[CC]YY]MMDDhhmm[.SS]

ということで、2038年1月19日12時14分8秒になるとエラーになる。

結論。
Leopardは2038年までにはアップグレードしましょう。
あ、そんな頃まで使ってないですかそうですか。