List Archive

Thread

Thread Index

Message

From: Dieter Baron <dillo%dillo.at@localhost>
To: Boaz Stolk <bstolk%aweta.nl@localhost>
Subject: Re: Seek error when libzip is compiled with CMake
Date: Mon, 25 Jan 2016 11:20:42 +0100

> On 22 Jan 2016, at 18:06 , Boaz Stolk <bstolk%aweta.nl@localhost> wrote:
> 
> 
> Hi,
> 
> I think I found the reason and a possible solution.
> 
> zipconf.h defines ZIP_INT64_MIN as -0x8000000000000000LL, but comparing a 
> positive zip_int64_t for smaller than (<) ZIP_INT64_MIN always evaluates to 
> true!?

That sounds broken. Could you try the attached program? Compile it with the 
same compiler/flags that the cmake generated Makefile uses.

For me, it prints OK: 5 >= -9223372036854775808.

Also, can you send me the generated Makefile and config.h?

yours,
dillo

> 
> This is exactly what is going on in _zip_fseek() at 
> http://hg.nih.at/libzip/file/5a752916f919/lib/zip_source_filep.c#l490 
> 
> If I cast ZIP_FSEEK_MIN to (zip_int64_t) here everything seems to work as 
> expected.
> 
> I think it may be related to something like this: 
> http://stackoverflow.com/questions/8511598/large-negative-integer-literals 
> 
> I've also first tried your suggestion with largefile support, but that 
> doesn't fix it. Also if I remove the AC_SYS_LARGEFILE from configure.ac and 
> recompile using configure generated Makefiles the issue doesn't occur. 
> However there must be a compiler setting, flag or generated file that is 
> different from cmake, I'm just not able to find it..
> 
> This is the code I found on the Internet to define the appropriate 
> _LARGE_FILES or _FILE_OFFSET_BITS:  
> https://github.com/ufz/tiff/blob/master/cmake/Modules/AutoconfHelper.cmake#L126
>  (only the ac_sys_largefile function)
> 
> Regards,
> Boaz
> 
> 
> -----Original Message-----
> From: Thomas Klausner [mailto:tk%giga.or.at@localhost] 
> Sent: 20 January 2016 23:24
> To: Boaz Stolk
> Cc: libzip-discuss%nih.at@localhost
> Subject: Re: Seek error when libzip is compiled with CMake
> 
> On Wed, Jan 20, 2016 at 03:42:25PM +0000, Boaz Stolk wrote:
>> I am encountering the following issue when libzip is compiled with the 
>> Makefiles that CMake has generated.
>> 
>> When I do a zip_fopen_index on an (successfully opened archive), 
>> zip_fopen_index returns NULL and the error is: Seek error: Value too large 
>> for defined data type.
>> 
>> Note that this does *not* occur when I build libzip using autoconf / 
>> configure.
>> 
>> System:
>> CentOS 6.6 (Final)
>> Kernel Linux 2.6.32-504.16.2.el6.x86_64
> 
> The intention was to provide CMake for Windows and let the other systems that 
> can deal with it use the configure script, that's why you see problems like 
> this.
> 
> In this particular case, I think autoconf is smart enough to test for various 
> #defines that might be necessary to get proper large file support (see 
> --enable-largefile). I think it tries _FILE_OFFSET_BITS and _LARGE_FILES. I 
> guess one or both might be needed on CentOS?
> 
> If you are interested in this, perhaps you can come up with a patch for the 
> cmake files that checks for these as well?
> 
> Thanks,
> Thomas
> 
> --
> This message has been scanned for viruses and dangerous content by 
> MailScanner, and is believed to be clean.
> 

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Made by MHonArc.