Thomas Jollans wrote:
On 07/21/2010 05:29 PM, Holger brunck wrote:
Something like the "file" utility for linux would be very helpfull.

Any help is appreciated.
You're going to have to describe in detail what's in the file before
anybody can help.
We are creating inside our buildsystem for an embedded system  a cram filesystem
image. Later on inside our build process we have to check the endianness,
because it could be Little Endian or big endian (arm or ppc).

The output of the "file" tool is for a little endian cramfs image:
<ourImage>: Linux Compressed ROM File System data, little endian size 1875968
version #2 sorted_dirs CRC 0x8721dfc0, edition 0, 462 blocks, 10 files

It would be possible to execute
ret = os.system("file <ourImage> | grep "little endian")
and evaluate the return code.
But I don't like to evaluate a piped system command. If there is an way without
using the os.system command this would be great.

Files don't, as such, have a detectable endianess. 0x23 0x41 could mean
either 0x4123 or 0x2341 - there's no way of knowing.

The "file" utility also doensn't really know about endianess (well,
maybe it does swap bytes here and there, but that's an implementation
detail) - it just knows about file types. It knows what a little-endian
cramfs image looks like, and what a big-endian cramfs image looks like.
And as they're different, it can tell them apart.

If you're only interested in a couple of file types, it shouldn't be too
difficult to read the first few bytes/words with the struct module and
apply your own heuristics. Open the files in question in a hex editor
and try to figure out how to tell them apart!

If you have control over the file format then you could ensure that
there's a double-byte value such as 0xFF00 at a certain offset. That
will tell you the endianness of the file.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to