■ 6/1
Dovecot 1.1.16 が出たので、dovecot.jp の更新。1.1.15 から2週間で 1.1.16
のリリース。ちょっとペースが早い気がするけど。
Hopefully the last v1.1 release before v1.2.0.
とのことだけど、あと1つ2つ出そうな気もする。
■ 6/2
ちょっと touch のソースが見たくて。coreutils からファイルをダウンロード
しようとしたら、拡張子 xz のファイルがあった。ちょっと見慣れないので、
調べてみたら、元々 lzma だったものが xz になったらしい。定着するのかは
わからないけど、とりあえず、解凍できる環境を作ってみようかと。
[toyota@dstar]% wget http://tukaani.org/xz/xz-4.999.8beta.tar.gz
[toyota@dstar]% tar xfz xz-4.999.8beta.tar.gz
[toyota@dstar]% cd xz-4.999.8beta
[toyota@dstar]% ./configure --help
[toyota@dstar]% ./configure --prefix=/tmp/xz
[toyota@dstar]% make
[toyota@dstar]% make install
[toyota@dstar]% ls -lo /tmp/xz/bin
total 404
lrwxrwxrwx 1 toyota 2 Jun 2 11:13 lzcat -> xz
lrwxrwxrwx 1 toyota 6 Jun 2 11:13 lzcmp -> lzdiff
-rwxr-xr-x 1 toyota 1912 Jun 2 11:13 lzdiff
lrwxrwxrwx 1 toyota 6 Jun 2 11:13 lzegrep -> lzgrep
lrwxrwxrwx 1 toyota 6 Jun 2 11:13 lzfgrep -> lzgrep
-rwxr-xr-x 1 toyota 3335 Jun 2 11:13 lzgrep
lrwxrwxrwx 1 toyota 6 Jun 2 11:13 lzless -> lzmore
lrwxrwxrwx 1 toyota 2 Jun 2 11:13 lzma -> xz
-rwxr-xr-x 1 toyota 66174 Jun 2 11:13 lzmadec
-rwxr-xr-x 1 toyota 1970 Jun 2 11:13 lzmore
lrwxrwxrwx 1 toyota 2 Jun 2 11:13 unlzma -> xz
lrwxrwxrwx 1 toyota 2 Jun 2 11:13 unxz -> xz
-rwxr-xr-x 1 toyota 141312 Jun 2 11:13 xz
lrwxrwxrwx 1 toyota 2 Jun 2 11:13 xzcat -> xz
-rwxr-xr-x 1 toyota 172596 Jun 2 11:13 xzdec
[toyota@dstar]% ls -lo /tmp/xz/lib
total 940
-rw-r--r-- 1 toyota 591280 Jun 2 11:13 liblzma.a
-rwxr-xr-x 1 toyota 792 Jun 2 11:13 liblzma.la
lrwxrwxrwx 1 toyota 16 Jun 2 11:13 liblzma.so -> liblzma.so.0.0.0
lrwxrwxrwx 1 toyota 16 Jun 2 11:13 liblzma.so.0 -> liblzma.so.0.0.0
-rwxr-xr-x 1 toyota 351448 Jun 2 11:13 liblzma.so.0.0.0
drwxrwxr-x 2 toyota 4096 Jun 2 11:13 pkgconfig
まだ全体的に lzma 色が強いようである。
bzip2 も目にするようになって10年以上経つけど、未だに gzip 形式のファイルが
幅を利かせている。bzip2 と xz と正面衝突しなければ良いのだけど。
■ 6/3
昨日の touch というか、coreutils の話に繋がるのだけど、CentOS 日本語の
man touch をすると -t オプションで閏秒対応と書いてあった。-t の秒指定が、
0 から 61 秒と、2 秒までの閏秒に対応しているようである。試しに、やって
みた。
[toyota@dstar]% touch --version
touch (coreutils) 4.5.3
~snip~
[toyota@dstar]% touch -t 200906030000.00 test
[toyota@dstar]% touch -t 200906030000.59 test
[toyota@dstar]% touch -t 200906030000.60 test
touch: invalid date format `200906030000.60'
駄目みたい。LANG を C に替えて、man touch すると、その記述がなくなって
いたので、古い情報のようである。試しに、比較的古いこのサーバでテストして
みた。
[toyota@kamino]% touch --version
touch (GNU fileutils) 4.0
[toyota@kamino]% touch -t 200906030000.00 test
[toyota@kamino]% touch -t 200906030000.60 test
[toyota@kamino]% touch -t 200906030000.61 test
[toyota@kamino]% touch -t 200906030000.62 test
touch: invalid date format `200906030000.62'
coreutils に含まれる前の fileutils 時代の touch で、これは対応している
みたい。秒を 60 にしたところで、ファイルの日時が 60 になるわけではなく、
1分進んだ日時になるだけなのだけど。
試しに、NetBSD 3.1 の環境でもやってみた。
[toyota@mustafar]% touch -t 200906030000.00 test
[toyota@mustafar]% touch -t 200906030000.60 test
[toyota@mustafar]% touch -t 200906030000.61 test
[toyota@mustafar]% touch -t 200906030000.62 test
[toyota@mustafar]% touch -t 200906030000.99 test
全くのチェック無しのようである。さらに。
[toyota@mustafar]% touch -t 200906310000 foo
とすると、7月1日のファイルになるし。
ということで、coreutils のソースを眺めてみることにした。見ると、posixtime
関数というところで値のチェックをしている。
bool
posixtime (time_t *p, const char *s, unsigned int syntax_bits)
{
struct tm tm0;
struct tm tm1;
struct tm const *tm;
time_t t;
if (posix_time_parse (&tm0, s, syntax_bits))
return false;
tm1 = tm0;
tm1.tm_isdst = -1;
t = mktime (&tm1);
if (t != (time_t) -1)
tm = &tm1;
else
{
/* mktime returns -1 for errors, but -1 is also a valid time_t
value. Check whether an error really occurred. */
tm = localtime (&t);
if (! tm)
return false;
}
/* Reject dates like "September 31" and times like "25:61". */
if ((tm0.tm_year ^ tm->tm_year)
| (tm0.tm_mon ^ tm->tm_mon)
| (tm0.tm_mday ^ tm->tm_mday)
| (tm0.tm_hour ^ tm->tm_hour)
| (tm0.tm_min ^ tm->tm_min)
| (tm0.tm_sec ^ tm->tm_sec))
return false;
*p = t;
return true;
}
一度 mktime もしくは localtime に渡して、返ってきた値と比較しているようで
ある。そこで、不一致が発生して、invalid date format になるみたい。POSIX の
規定はどうなってるんだろうなぁ。
■ 6/4
OS って閏秒をどう扱うのだろう、と少し疑問に思って。localtime の返りって
1970年1月1日0時0分0秒(UTC)からの経過秒数、と言われるけど、調べてみると、
実際には閏秒のことは考慮されていないらしく。つまり、実際の経過秒数から
二十数秒遅れている(?)ようで。この辺り、時刻を扱う難しさなのだろうけど。
で、昨日少し触れた mktime の man を見ると、
tm_sec The number of seconds after the minute, normally in the range 0
to 59, but can be up to 61 to allow for leap seconds.
となっていた。結果はなんとなくわかっていたけど、ちょっと実験してみた。
今日は CentOS 4 な環境。
[toyota@dstar]% cat leapsec.c
#include <time.h>
#include <sys/time.h>
int main(){
struct tm tm;
memset(&tm,0,sizeof(struct tm));
tm.tm_sec = 0;
tm.tm_min = 1;
tm.tm_hour = 0;
tm.tm_mday = 4;
tm.tm_mon = 5;
tm.tm_year = 109;
printf("2009/06/04 00:01:00 -> %d\n",mktime(&tm));
printf("tm.tm_min[%d] tm.tm_sec[%d]\n\n",tm.tm_min,tm.tm_sec);
tm.tm_sec = 60;
tm.tm_min = 0;
printf("2009/06/04 00:00:60 -> %d\n",mktime(&tm));
printf("tm.tm_min[%d] tm.tm_sec[%d]\n\n",tm.tm_min,tm.tm_sec);
tm.tm_sec = 61;
tm.tm_min = 0;
printf("2009/06/04 00:00:61 -> %d\n",mktime(&tm));
printf("tm.tm_min[%d] tm.tm_sec[%d]\n\n",tm.tm_min,tm.tm_sec);
tm.tm_sec = 62;
tm.tm_min = 0;
printf("2009/06/04 00:00:62 -> %d\n",mktime(&tm));
printf("tm.tm_min[%d] tm.tm_sec[%d]\n\n",tm.tm_min,tm.tm_sec);
}
こんな感じでソースを書いてみて実行。
[toyota@dstar]% gcc leapsec.c
[toyota@dstar]% ./a.out
2009/06/04 00:01:00 -> 1244041260
tm.tm_min[1] tm.tm_sec[0]
2009/06/04 00:00:60 -> 1244041260
tm.tm_min[1] tm.tm_sec[0]
2009/06/04 00:00:61 -> 1244041261
tm.tm_min[1] tm.tm_sec[1]
2009/06/04 00:00:62 -> 1244041262
tm.tm_min[1] tm.tm_sec[2]
tm.tm_sec に 62 を入れてもエラーにならなかった。99でも大丈夫だったし。
ついでに言えば、6月31日の指定だと、7月1日と同じ値に。関数内部でチェック
してないみたい。この結果は NetBSD 3.1 でも同じ。ちょっと意外だった。
■ 6/5
とあるページを眺めていたら、table に書いてある番号の振り方がおかしかった。
英語のページだったのだけど、こんな感じで。
本当はもっと大きな表だったけど。html 読むのも面倒だし、何でこんな書き方を
わざわざしているのだろう、と top ページに行ってみたら、ペルシャ語と英語の
選択画面が出てきた。で、ペルシャ語を調べてみると、右読み、ということが
わかった。つまり、ペルシャ語のページを英語にしたので、こうなってしまった
みたい。右読み言語の人は、html 書くのも大変なんだろうなぁ、と思った日で
あった。
■ 6/6
買うのに3年悩んだエアコンをやっと買った。5万円のデジカメを買うときは、
そんなに悩まないのに。ブレーカーのアンペア数とか、設置場所の高さだとか、
事前に調べないといけないことが意外とあって。ブレーカーのアンペア数は、
ちょうど電気の安全調査が来ていたので覚えていたけど、設置場所の高さとか
室外機までの距離とかは適当。来週工事にやってくる予定。これでやっと、夏を
涼しく過ごせそう。
■ 6/7
先月23日にステンレスパイプの加工について書いたけど、今日はその続きで、
太さを19mmのものでやってみた。やっぱり、直角に曲げると、パイプが潰れて
しまう。熱する範囲が狭いのかと思って、携帯用のガスコンロで暖めてやって
みたけど、結果は同じ。きっちり砂を詰めたけど、個人レベルで熱して曲げる
のは難しいようである。もう1度やってみて、駄目だったら近所の鉄工所に依頼
することにしよう。図面起こすの面倒だけど。
■ 6/8
いつの間にか、DoCoMo 端末は Javascript 対応になったみたいで。なんだか、
何がどこまでできるのかわからないけど、あの狭い画面で本当に必要になるのか
少し疑問。Google Maps とかサクサク動くなら、うれしいかも。ただ、JavaScript
が動くからと言って、買う予定は全くないし、netbook みたいに、スペックが
低くても良いので、安い方がありがたいと私は思う。
■ 6/9
shell script な cgi を書いていて、標準入力からの入力ってどうやるのだろう
と、少し考えてしまった。調べると、read を使えば良いみたいで。とりあえず、
簡単なテストをしてみた。
#!/bin/sh
echo 'Content-type: text/html'
echo
echo '<html><body><pre>'
if [ "x$REQUEST_METHOD" = "xPOST" ]; then
read in
echo $in
fi
echo '</pre></body></html>'
な感じの cgi を作って。
[toyota@kashyyyk]% curl -d "from kashyyyk" http://kamino/cgi-bin/test.cgi
<html><body><pre>
from kashyyyk
</pre></body></html>
良い感じに戻ってきた。これで、ちょっと遊べそう。
■ 6/10
この前実家に帰ったとき、「実家だと携帯電話の電波悪いんだよね」なんて話を
していた。そこで、父が「これ使えないのか?」と白いものを指した。見ると、
そこには、NTT パーソナル時代のホームアンテナ。多分、私が10年近く前に設置
したもので、まだ電源が入っているのである。まだあったことに驚いたのだが、
よく考えると、停波したあとも電波を出すのは電波法あたりにひっかかってる
気がして。ちょっと調べてみたけど、結局わからずじまい。ま、とっとと電源を
落としたけど。これって、他に使い道ないから、単なるゴミにしかならないなぁ、
なんて思いながら、引き出しの奥にしまったりして。
■ 6/11
作業中は BBC Radio1 を聞いている。もちろん、Internet Radio なのだけど。
今日もいつものように聞こうと思ったら、接続できない。ネットワーク障害なの
かもしれないと、しばらく待ってみたのだけど、状況変わらず。仕方なく BBC の
web で確認したけど、何も書かれていないし。ra ファイルの場所を確認したら、
いつの間にか変更されていた。以前は。
rtsp://rmlive.bbc.co.uk/bbc-rbs/rmlive/ev7/live24/radio1/live/r1_dsat_g2.ra
だったのだけど、今見ると。
rtsp://rmlive.bbc.co.uk/bbc-rbs/rmlive/farm/live24/bbc_ami/radio1/radio1_nb_int_live.ra
になっていて。毎回 BBC に接続するのは面倒なので、デスクトップに自作の ram
ファイルを作って、そこからプレイヤーを起動している。そもそもの問題は、
それなのだけど、定期的にアドレスのチェックが必要かもしれないなぁ、なんて
思った。
■ 6/12
7日の続きで。ステンレスパイプの加工を、工場(こうば)にお願いすると、
どのぐらいの値段がするのか調べてみたら、結構な値段がするみたい。いわゆる
カスタムメイドなので、50本ぐらい同じものを作ってもらうと、1/10 ぐらいに
値段が落ちると思うけど。なんとか、3万円ぐらいで収めたいけど、ちょっと
無理な気がしてきた。もう一度、手曲げに挑戦してみようかな。
■ 6/13
今日はエアコンの工事。作業を一部始終見ていた。当初は自分で工事をしようか
なんて考えていたけど、とても面倒なのと、工具が必要なことがわかった。そして
最大の問題は、真空引き。その道具だけでも1万円ぐらいはするらしい。どうせ
道具を買っても、1回か2回しか使わないだろうし。電気屋にお願いする方が、
エコだなぁ、なんて思った。古いエアコンや、ダンボールも引き取ってくれる
から楽だし。
■ 6/14
在留届けが、web からできるらしく。ちょっとやってみた。が。
https://www.ezairyu.mofa.go.jp/RRnet/chui.html
に接続すると、Firefox が「安全な接続ができませんでした」と警告して、接続
できない。curl で証明書を見てみると。
* Server certificate:
* subject: /C=JP/O=Japanese Government/OU=The Ministry of Foreign Affairs
/CN=www.ezairyu.mofa.go.jp
* start date: 2008-04-02 15:00:00 GMT
* expire date: 2011-04-02 14:59:59 GMT
* common name: www.ezairyu.mofa.go.jp (matched)
* issuer: /C=JP/O=Japanese Government/OU=ApplicationCA
日本政府による、いわゆる俺々証明書のようである。在留届 FAQ というところで
確認してみると。
Q22:在留届をインターネットで届出しようとしたところ、「警告」画面が出て
きましたが、どのようにしたら良いでしょうか。
A22:インターネットで在留届を届出するためには、政府の認証局が発行する安
全な通信を行うための証明書(政府認証局自己署名証明書)を取得し、利用する
ブラウザ環境上に登録する必要があります。この証明書は、接続先のホームペー
ジがフィッシングサイトではなく、真の窓口のホームページに間違いないこと
を確認し、届出者と本窓口との間の通信を暗号化するために使用するものです。
WindowsXPやVistaに搭載のブラウザでは、この証明書を自動的に確認し、問題
があると察したときには、警告を発してくれる機能が付属しています。必ず安
全な通信を行うための証明書を事前に取得して登録(インストール)を行って
ください。
証明書ダウンロードの手順はこちらから
だそうで。証明書のダウンロードの手順のページに行って、「証明書のダウン
ロードはこちらから」をクリックしてみた。
Firefox が「安全な接続ができませんでした」と警告。curl で確認してみると。
* Server certificate:
* subject: /C=JP/O=Japanese Government/OU=Ministry of Internal Affairs
and Communications/CN=www.gpki.go.jp
* start date: 2008-08-17 15:00:00 GMT
* expire date: 2011-08-17 14:59:59 GMT
* common name: www.gpki.go.jp (matched)
* issuer: /C=JP/O=Japanese Government/OU=ApplicationCA
ここから俺々のようである。確認のため、政府認証基盤を見たのだけど、日本の
政府として発行しているみた。ただ、警告が出るのもどうかと思うので、証明書を
ダウンロードするために、RSA あたりからの証明書を買って、警告が出ない形で
証明書をダウンロードできるようにもできないものなのかな、と思う。そう言えば
そんな話を昔高木さんがしてた気がする。
■ 6/15
久しぶりに Solaris の Patch をダウンロードしようと、sunsolve に行ってみた
けど、ダウンロードするのに登録が必要になった。なんだか、面倒くさいことに
なっている。理科大のミラーがあったころなんかは、ftp から適当にダウンロード
できたし、すごく快適だったのに。時代なんだろうか。とりあえず、patch は
放置することにして、作業を続けることにした。
■ 6/16
Solaris(10) のネットワークデバイスに IP をもう1つ振る場合。
[root@iego]# /sbin/ifconfig lo0:0 127.0.0.2
[root@iego]# /sbin/ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.2 netmask ff000000
となってしまう。これが Linux(2.4) だったら。
[root@kamino]# /sbin/ifconfig lo:0 127.0.0.2
[root@kamino]# /sbin/ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2091 errors:0 dropped:0 overruns:0 frame:0
TX packets:2091 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:206488 (201.6 kb) TX bytes:206488 (201.6 kb)
lo:0 Link encap:Local Loopback
inet addr:127.0.0.2 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
なんだけど。Solaris の場合は 0 は、ついてないものと同じになってしまうよう
なので。
[root@iego]# /sbin/ifconfig lo0:1 plumb
[root@iego]# /sbin/ifconfig lo0:1 127.0.0.2
[root@iego]# /sbin/ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
lo0:1: flags=2001000848<LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.2 netmask ff000000
1から始まりになる。ま、Linux の場合でも 0 を避けて使えば混乱することは
ないけど。
ついでに、NetBSD 3.1 の場合は。
[root@mustafar]# /sbin/ifconfig lo0 alias 127.0.0.2
[root@mustafar]# /sbin/ifconfig -a
lo0: flags=8009<UP,LOOPBACK,MULTICAST> mtu 33192
inet 127.0.0.1 netmask 0xff000000
inet alias 127.0.0.2 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
となる。それぞれに慣れてないと、間違えそうだ。
■ 6/17
2日に coreutils のソースを拾ってきた。で、今日ちょっと眺めていたら、tac
なんて聞きなれないコマンドが入っていた。見てみると…。単なる cat の逆で、
ファイルの最終行から cat されるだけのコマンドだった。これ、一体何に使うの
だろうか。ログを新しい順に並べるには良いのかもしれないけど。あとは、shuf
コマンドという、ランダムに行を表示させるのもちょっと新鮮。ビンゴ大会で
使えるかも。そんな状況でコマンド叩くのもおかしい気もするけど。
■ 6/18
Solaris で Apache もモジュールをコンパイルしていて、見慣れないエラーが
出た。調べてみると、どうやら .a ファイルが見つからないらしく。そもそも、
必要ない気がしたけど、調べてみた。原因は ar コマンドの実装にあるようで。
[toyota@hoth]$ uname -s -r
SunOS 5.10
[toyota@hoth]$ ar cru test.a
[toyota@hoth]$ ls
これで、ファイルが作られない。一方、Linux では。
[toyota@kessel]$ uname -s -r
Linux 2.4.35
[toyota@kessel]$ ar cru test.a
[toyota@kessel]$ ls
test.a
中身が8バイトの ar ヘッダのみのファイルを作ってくれる。NetBSD 3.1 なんか
でも同じようにファイルが作られる。一応、sparc な Solaris10 と Solaris9
でやってみたけど、ar の結果は同じ。Makefile いじらないとなぁ。
■ 6/19
家のメールをしばらく読まずに放置していたら、3000件以上溜まってしまって。
ま、9割以上は SPAM なんだけど。Thunderbird は相変わらず SPAM 判定能力が
少し弱い感じなので、一応全ての Subject は目を通すことにしている。1時間
以上かかって、やっと読み終えて。面倒なので、全部 Gmail に投げてしまおうか
本気で考えてしまった。ま、障害のときのために、色々なところに分散させる、
ということも重要なので、それはやめといたけど。
■ 6/20
家で使っている2番機の PC が起動しない。OS の起動途中で再起動してしまう。
Safe Mode も起動しない。熱のせいかと、本体のファンを最大回転で起動して
みたけど、状況変わらず。何度か、やっていると、うまく起動したように見えて、
青背景の IRQL_NOT_LESS_OR_EQUAL が出る状態。バラして、デバイスを順番に
外してやってみないと駄目そう。その前に、knoppix で起動できるのか、やって
みるつもりだけど、面倒だなぁ。
■ 6/21
昨日、PC の OS が動かなくなったため、skype ができなくなった。TV を見る
のと Skype (での会話)専用で使っていたので、あまり影響ないと思ったけど、
そんな日に限って Skype で話す必要が出てきて。どうしたものかな、と考えて
先日買ってほぼ放置状態の Eee PC 900A で Skype をしてみた。Linux ベースの
Skype 2.0 なので、エモーティコンがうまく表示されなかったり、日本語入力が
できないので、日本語チャットができなかったけど、会話はほとんど問題なく。
ちょっと意外だった。Skype 専用機にしてしまおうかな。
■ 6/22
web での html 応答をコマンドで取得して、パイプで別のコマンドに渡す必要が
あって。いつもなら curl コマンドを使うのだけど、生憎 curl コマンドが入って
いない。make するの面倒なので、wget でできるか調べてみた。オプション -O に
- を渡すと、標準出力になるらしい。それだと、余計なメッセージが入るので、
-q も渡してあげて、こんな感じになった。
[toyota@geonosis]% wget -q -O - "http://www.google.co.jp/" | less
本当は less じゃないけど。curl じゃなくても、なんとかできて一安心。
■ 6/23
openssl base64 コマンドに。
-pass <arg> pass phrase source
-k key is the next argument
というのがあったので、ちょっと実験してみた。
[toyota@mustafar]% cp /etc/protocols ./
[toyota@mustafar]% openssl base64 -e -in protocols -out ptest
[toyota@mustafar]% openssl base64 -e -pass pass:test -in protocols -out ptest_p
[toyota@mustafar]% openssl base64 -e -k test -in protocols -out ptest_k
[toyota@mustafar]% ls -l
-rw-r--r-- 1 toyota toyota 5834 6月 23 11:13 protocols
-rw-rw-r-- 1 toyota toyota 7902 6月 23 11:23 ptest
-rw-rw-r-- 1 toyota toyota 7902 6月 23 11:23 ptest_k
-rw-rw-r-- 1 toyota toyota 7902 6月 23 11:23 ptest_p
[toyota@mustafar]% diff3 ptest ptest_k ptest_p
[toyota@mustafar]% echo $?
0
変化なし、である。多分、他の cipher と組み合わせて使うのかな。RFC3548 を
見る限り、暗号化なんでなさそうだし。ちょっと残念。
■ 6/24
strlcpy がない OS のとき、OpenBSD 由来の strlcpy 関数を使っていた。以下の
ようなもの。
size_t
strlcpy(char *dst, const char *src, size_t siz)
{
char *d = dst;
const char *s = src;
size_t n = siz;
/* Copy as many bytes as will fit */
if (n != 0) {
while (--n != 0) {
if ((*d++ = *s++) == '\0')
break;
}
}
/* Not enough room in dst, add NUL and traverse rest of src */
if (n == 0) {
if (siz != 0)
*d = '\0'; /* NUL-terminate dst */
while (*s++)
;
}
return(s - src - 1); /* count does not include NUL */
}
今日、libpcap のソースを見ていたら、pcap-int.h で別な実装を見つけた。
#ifndef HAVE_STRLCPY
#define strlcpy(x, y, z) \
(strncpy((x), (y), (z)), \
((z) <= 0 ? 0 : ((x)[(z) - 1] = '\0')), \
strlen((y)))
#endif
strncpy を使っているので、すっきりしている。どのぐらい確実なものなのか
ちょっとわからないけど、今度使ってみようかな。
■ 6/25
私は普段 tcsh を使っている。今日、fc というコマンドを使っている人がいて、
初めて聞いた感じのコマンドだったので、調べてみた。どうやら、Linux では
コマンドとしては存在してなく、bash なんかのシェルに含まれているコマンド。
Solaris では、/bin と /usr/bin に fc コマンドがあった。この Solaris の
fc コマンド、えらくサイズが小さいので見てみたら。
#!/bin/ksh -p
#
#ident "@(#)alias.sh 1.2 00/02/15 SMI"
#
# Copyright (c) 1995 by Sun Microsystems, Inc.
#
cmd=`basename $0`
$cmd "$@"
という感じ。コマンドのヒストリを見たり、編集したりするコマンドだけど、
使いそうで、使わない気がする。とりあえず、何かのときには使えるように、
覚えておくことにしよう。
■ 6/26
20日に書いた、2番機 PC が故障した続きで。本腰を入れて分解してみようと
思い、とりあえず PC の電源を入れたら。あっさり動いてしまった。3時間ほど
起動し続けても特に問題なし。先週あれだけ何度も再起動かけたのに。この先、
同じ現象がでるかもしれないので、単純に喜んで良いのかもわからず。しばらく
様子見である。
■ 6/27
この web サーバが置いてあるマンションで、フレッツ光のマンションタイプを
始めるとかで、張り紙があった。で、少し調べてみたけど、今の USEN の VDSL
方式より値段が上がるようだし、テレビサービスも特に必要ないと思われるし、
あまりメリットがないようである。来週 NTT 東の説明会があるみたいなので、
何を売りにして営業するのか、聞きに行こうかな。
■ 6/28
dovecot 1.2.rc7 が出たようで。月曜日か水曜日に v1.2.0 のリリースをする、
という話である。どこまで本気かわからないけど、1.1 の翻訳が全然進んでない
ので、とっとと時間を見つけて終わらせて、 1.2 の翻訳を始めたい。年内は、
無理かもしれないけど。
■ 6/29
http ヘッダの Location が複数ある場合、ブラウザはどれを優先するのか、と
いう疑問があったので、ちょっとやってみた。
[toyota@zonama]% cat location.cgi
#!/bin/sh
echo "Status: 302 Redirect"
echo "Location: /index.html"
echo "Location: /test.html"
echo
な感じの場合、Firefox では後側の test.html が優先された。他のブラウザでも
同じ。少し気になったので、curl で Apache の応答を見てみた。
[toyota@zonama]% curl -vvv "http://localhost/cgi-bin/location.cgi"
* About to connect() to localhost:80
* Connected to localhost (127.0.0.1) port 80
> GET /cgi-bin/location.cgi HTTP/1.1
User-Agent: curl/7.19.5 (i686-pc-linux-gnu) libcurl/7.19.5 OpenSSL/0.9.8k
Host: localhost
Pragma: no-cache
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
< HTTP/1.1 302 Redirect
< Date: Mon, 29 Jun 2009 08:24:45 GMT
< Server: Apache/2.0.59 (Unix) mod_ssl/2.0.59 OpenSSL/0.9.8k
< Location: /test.html
< Content-Length: 0
< Content-Type: text/plain
* Connection #0 left intact
* Closing connection #0
ということで、ブラウザの選択ではなく、Apache の選択みたいである。意外と
Apache って色々なお仕事してるんだ。
■ 6/30
六曜を出すプログラムを書こうかと、少し調べてみた。が、旧暦を求めなければ
ならない。旧暦が出れば、六曜は簡単に出せるのだけど、旧暦を求めるのが大変。
なんか、ちょっと書き始めたけど、誰かが作ったのを流用した方が早そうだった
ので、すぐにあきらめる。月の満ち欠けを計算したり、閏月の計算をしたり、
昔の人は手計算でやっていたのだから、ちょっと関心してしまう。
|