2012年2月20日月曜日

PHP FUSEで2GB超のファイル容量を正しく報告できない件について


激しく環境依存ぽいんで、アレですけれども。。

■検証環境
CentOS6.2 + FUSE 2.8.7

■現象
2GB超のファイルをlsしたりstatしたりするとオーバーフローっぽい値が表示される。

■修正内容(手抜き)
fuse.c
(修正前)int value = Z_LVAL_PP(entry);
(修正後)long value = Z_LVAL_PP(entry);

※2個所あります。だいたい前者だけで大丈夫だと思いますが。
PHP_FUSE_API int php_fuse_getattr(const char * path, struct stat * st) 内
PHP_FUSE_API int php_fuse_statfs(const char * path, struct statfs * st) 内

いかにも対症療法ですが、正しくはどうすればいいんでしょうね。。
Z_LVAL_Pも同様のようですが、とりあえず動いたんで、これで…^^; スミマセン


あ、あと、これもかな。。違うかな。。
(修正前)st->st_size = (size_t)value;
(修正後)st->st_size = (off_t)value;

0 件のコメント: