__quad_t在<bits/types.h>中定义的,加了大文件编译选项后会被替换成long long,
但是如下面的一条语句中,没有加入强制类型转换:
__quad_t offset_ll = ULONG_MAX*2 + LONG_MAX;
导致右值只在UL精度计算,所以传给offset_ll的值没有超过ULONG_MAX;
加入即可解决,
__quad_t offset_ll = (__quad_t) ULONG_MAX*2 + LONG_MAX;
机器32-bits,已加编译选项包括:
-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D__GLIBC_HAVE_LONG_LONG