5.1 には atoll が無い
急遽、AIX 5.1 な環境で long long を使う必要が湧いて出た。値の範囲が long では足りなくなったためだ。
既存のソースでは atol を使っていたので、安直に atoll にすればよいかと思ったが、これがうまくない。無いみたいなのだ。
AIX5100-09 % oslevel -r 5100-09 AIX5100-09 % lslpp -hac bos.rte.libc | sort | tail -1 /usr/lib/objrepos:bos.rte.libc:5.1.0.69::COMMIT:COMPLETE:07/09/25:10;04;40 AIX5100-09 % nm /usr/lib/libc.a | grep atol ../../../../../../../src/bos/usr/ccs/lib/libc/atol.c f - .atol T 319216 .watol T 1476716 atol D 262148 12 watol D 280756 12
一方、AIX 5.2 の libc にはちゃんと装備されているようだ。
AIX5200-10 # oslevel -r 5200-10 AIX5200-10 # lslpp -hac bos.rte.libc | sort | tail -1 /usr/lib/objrepos:bos.rte.libc:5.2.0.107::COMMIT:COMPLETE:11/27/08:09;41;08 AIX5200-10 # nm /usr/lib/libc.a | grep atol ../../../../../../../src/bos/usr/ccs/lib/libc/atol.c f - ../../../../../../../src/bos/usr/ccs/lib/libc/atoll.c f - .atol T 305824 .atoll T 818548 .watol T 1473336 atol D 274048 12 atoll D 274060 12 watol D 292824 12
AIX 5.1 は既に EOL なので、今さら libc が更新されるとは考えにくい*1。念のため最終FIX (Post ML9 Bundle) まで確認したが、やはり存在しないものは存在しない。仕方がないので strtoll を用いて書いた。書いてみてからいろいろ探ったら、手もとにあった FreeBSD の libc のソース*2によれば、atoll とは strtoll の wrapper のようだ。テストもうまく通った。
規格に照らしてみれば、atoll は C99 に含まれるようだ。逆に言えば C90 には含まれていない。
要するに 5.2 以上に上げなさい…ということで FA と言えよう。