Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | jt@toerring.de (Jens Thoms Toerring) |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: porting from 32-bit to 64-bit with fine-tooth comb? |
| Date | 2015-02-08 00:59 +0000 |
| Organization | Freie Universitaet Berlin |
| Message-ID | <cjnqn5Fbn5tU1@mid.uni-berlin.de> (permalink) |
| References | <8c0baf78-2ed4-4012-8a87-df42391b5e75@googlegroups.com> |
mbjorn@y7mail.com wrote:
> I got this in a mailing list for a FOSS package that I use:
> "Another thing to note when running old code on 64-bit platforms is to
> inspect the struct definitions that are used directly to store or read
> binary data. There's no standard way to guarantee compatibility but
> gcc has a "packed" pragma which should do the right thing combined
> with explicit padding where needed,"
> Is this a problem, that different word lengths can screw up
> structures? Can unsigned int, for example, change length going from
> a 32-bit system to 64?
There are at least three potential problems.
a) The size of on int on machine A (used for writing the file)
may differ from the size of and an int (and any other types
not explicit about their sizes) on machine B (used for rea-
ding the file.
b) The endianess of machine A can differ from that of machine B.
Thus, even if all the types have the exact same sizes, what
gets read in on B can be quite different from what has been
written on A.
c) Structure padding: the compiler is allowed to insert as
much padding as it likes between members of the structure.
Even the exact same compiler could, at least in principle,
use different amounts pf padding dependent on the settings
of some compiler switch - thus even a program on machine A,
compiled with different settings or with a different compiler,
may not be able to correctly read the file written on machine
A itself.
gcc's 'packed' flag may help in some situations (if machine A
and B have the same sizes for all relevamt types and the same
endianess and both programs are cpmpiled with gcc). But then
you've still have to consider alignment issues - members of
such a structure may need to be written to and read from by
using memcpy() since an attempt to access a member that is
now badly aligned due to the 'packed' attribute any other
way may result in a bus error.
Morale: don't attempt to store structures an binary blobs in
a file if you want to be able to read that data back with any-
thing else than the exact same program that wrote it. Learned
it the hard way nearly 20 years ago;-)
Best regards, Jens
--
\ Jens Thoms Toerring ___ jt@toerring.de
\__________________________ http://toerring.de
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
porting from 32-bit to 64-bit with fine-tooth comb? mbjorn@y7mail.com - 2015-02-07 15:33 -0800
Re: porting from 32-bit to 64-bit with fine-tooth comb? wssimms@gmail.com - 2015-02-07 16:56 -0800
Re: porting from 32-bit to 64-bit with fine-tooth comb? jt@toerring.de (Jens Thoms Toerring) - 2015-02-08 00:59 +0000
Re: porting from 32-bit to 64-bit with fine-tooth comb? Keith Thompson <kst-u@mib.org> - 2015-02-07 17:22 -0800
Re: porting from 32-bit to 64-bit with fine-tooth comb? jt@toerring.de (Jens Thoms Toerring) - 2015-02-08 01:43 +0000
Re: porting from 32-bit to 64-bit with fine-tooth comb? raltbos@xs4all.nl (Richard Bos) - 2015-02-08 16:16 +0000
Re: porting from 32-bit to 64-bit with fine-tooth comb? Richard Damon <Richard@Damon-Family.org> - 2015-02-07 20:02 -0500
Re: porting from 32-bit to 64-bit with fine-tooth comb? glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-02-08 02:18 +0000
Re: porting from 32-bit to 64-bit with fine-tooth comb? Bartc <bc@freeuk.com> - 2015-02-08 11:08 +0000
Re: porting from 32-bit to 64-bit with fine-tooth comb? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2015-02-09 21:20 +0000
Re: porting from 32-bit to 64-bit with fine-tooth comb? Nobody <nobody@nowhere.invalid> - 2015-02-09 21:35 +0000
Re: porting from 32-bit to 64-bit with fine-tooth comb? Lőrinczy Zsigmond <nospam@for.me> - 2015-04-03 16:07 +0200
Re: porting from 32-bit to 64-bit with fine-tooth comb? James Kuyper <jameskuyper@verizon.net> - 2015-04-03 11:21 -0400
Re: porting from 32-bit to 64-bit with fine-tooth comb? Barry Schwarz <schwarzb@dqel.com> - 2015-04-03 09:36 -0700
Re: porting from 32-bit to 64-bit with fine-tooth comb? Lőrinczy Zsigmond <nospam@for.me> - 2015-04-03 19:10 +0200
Re: porting from 32-bit to 64-bit with fine-tooth comb? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2015-04-04 21:05 +0000
Re: porting from 32-bit to 64-bit with fine-tooth comb? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-04-04 23:13 -0700
Re: porting from 32-bit to 64-bit with fine-tooth comb? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2015-04-11 04:19 +0000
Re: porting from 32-bit to 64-bit with fine-tooth comb? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-04-10 23:53 -0700
Re: porting from 32-bit to 64-bit with fine-tooth comb? Richard Damon <Richard@Damon-Family.org> - 2015-04-11 10:54 -0400
Re: porting from 32-bit to 64-bit with fine-tooth comb? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2015-04-11 15:59 +0000
csiph-web