Monty Taylor <[email protected]> writes: > Kristian Nielsen wrote: >> Philip Herron <[email protected]> writes: >> >>>> @@ -149,11 +149,11 @@ >>>> while (1) >>>> { >>>> off_t length; >>>> - char *buffer= NULL; >>>> + char *buffer=(char*)malloc(sizeof(char)); >>>> char *temp_buffer; >>>> >>>> /* Read the size */ >>>> - if (read(file, &length, sizeof(uint64_t)) != sizeof(uint64_t)) >>>> + if (read(file, &length, sizeof(uint32_t)) != sizeof(uint32_t)) >>>> break; >>>>
>> Well, long is 32 bit on 32-bit Linux, but 64 bit on 64-bit linux. So this is >> going to fail on 64-bit (big-endian for sure, and probably also >> little-endian). >> >> And surely the actual size of the number to read depends not on whatever >> sizeof(off_t) is, but on what is actually in the file being read? So why not >> read the value into a tmp variable of correct size (uint32_t or uint64_t >> depending on file format), and afterwards assign to length (checking for >> overflow if needed)? > > Actually... off_t is the appropriate type for file reading/writing. It > is not necessarily just typedef'd to long. It depends on some > pre-processor macros and some other things... but for proper > large-file support, it is correct to use off_t and let the standard > library do the things it needs to do to accomplish this. (On 32-bit > linux it should _not_ be typedef'd to long, for instance- if it is, > please let me know so we can re-define things we need to as part of > configure) Actually... it seems this code is for reading events from a binary log. So I assume this file format is supposed to be portable between different architectures (replication from x86 32-bit to sparc 64-bit eg.)? If so, reading and writing the raw bytes out of variable length, regardless of type, is just wrong. It's not portable among different machines (eg big- vs. little-endian). Sorry if I misunderstood what is being discussed... - Kristian. _______________________________________________ Mailing list: https://launchpad.net/~drizzle-discuss Post to : [email protected] Unsubscribe : https://launchpad.net/~drizzle-discuss More help : https://help.launchpad.net/ListHelp

