当偏移太大(大于签名的INT 2^32范围)时,GZSEEK(ZLIB)失败



我正在使用zlib 1.2.11。当我使用GZSEEK的偏移大于签名的INT范围(2^32的一半)时;我得到bytes_read为-1。有什么方法可以使用64位偏移。

这是gzlib.c

的gzseek64定义的摘录。
if (state->mode == GZ_READ) {
        n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ?(unsigned)offset : state->x.have;
        state->x.have -= n;
        state->x.next += n;
        state->x.pos += n;
        offset -= n;
    }

这里n是未签名的int,只能容纳32位...即使我的偏移是64位,n将如何保持该价值。...如果我错了,请纠正我

更多发现:宣布宏Z_LARGE64 ... GZSEEK接受64位偏移,但...当我通过一个大偏移量时,返回的字节是a 大负值,我认为这与 __ int64有关>

Z_LARGE64编译库,然后使用该lib来构建您的应用程序。在应用程序中包括#include "zlib.h"之前的Z_LARGE64。然后使用gzseek64()

最新更新