Skip to content

Insufficient definitions in platform endianness detection #143

Closed
@cmumford

Description

Original issue 137 created by mike.volokhov on 2013-01-05T09:21:29.000Z:

There is some mess across platforms in how they define endianness, especially in number of underscores in definition prefix, i.e. __BYTE_ORDER vs _BYTE_ORDER and so on.

The port/port_posix.h tries to handle it, but on some platforms, perticularly, on NetBSD 6.x, compiler fails with the following error:

c++ -O2 -I/usr/pkg/include -I. -I./include -fno-builtin-memcmp -D_REENTRANT -DOS_NETBSD -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -DNDEBUG -c db/builder.cc -o db/builder.o
In file included from ./port/port.h:14:0,
from ./db/filename.h:14,
from db/builder.cc:7:
./port/port_posix.h:67:35: error: '__BYTE_ORDER' was not declared in this scope
./port/port_posix.h:67:35: error: '__LITTLE_ENDIAN' was not declared in this scope
gmake: *** [db/builder.o] Error 1

Exactly the same case exists for FreeBSD before it was handled in Issue 98 (https://code.google.com/p/leveldb/issues/detail?id=98).

I'd like to suggest the following patch so the endianness detection could be handled a little bit more gracefully:

--- port/port_posix.h.orig 2012-12-27 18:32:31.000000000 +0000
+++ port/port_posix.h
@@ -7,6 +7,13 @@
#ifndef STORAGE_LEVELDB_PORT_PORT_POSIX_H_
#define STORAGE_LEVELDB_PORT_PORT_POSIX_H_

+#ifndef __BYTE_ORDER
+#define __BYTE_ORDER _BYTE_ORDER
+#endif
+#ifndef __LITTLE_ENDIAN
+#define __LITTLE_ENDIAN _LITTLE_ENDIAN
+#endif
+
#undef PLATFORM_IS_LITTLE_ENDIAN
#if defined(OS_MACOSX)
#include <machine/endian.h>

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions