Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
BSD/Linux-like <endian.h> for MacOS X
#ifndef __FINK_ENDIANDEV_PKG_ENDIAN_H__
#define __FINK_ENDIANDEV_PKG_ENDIAN_H__ 1
/** compatibility header for endian.h
* This is a simple compatibility shim to convert
* BSD/Linux endian macros to the Mac OS X equivalents.
* It is public domain.
* */
#ifndef __APPLE__
#warning "This header file (endian.h) is MacOS X specific.\n"
#endif /* __APPLE__ */
#include <libkern/OSByteOrder.h>
#define htobe16(x) OSSwapHostToBigInt16(x)
#define htole16(x) OSSwapHostToLittleInt16(x)
#define be16toh(x) OSSwapBigToHostInt16(x)
#define le16toh(x) OSSwapLittleToHostInt16(x)
#define htobe32(x) OSSwapHostToBigInt32(x)
#define htole32(x) OSSwapHostToLittleInt32(x)
#define be32toh(x) OSSwapBigToHostInt32(x)
#define le32toh(x) OSSwapLittleToHostInt32(x)
#define htobe64(x) OSSwapHostToBigInt64(x)
#define htole64(x) OSSwapHostToLittleInt64(x)
#define be64toh(x) OSSwapBigToHostInt64(x)
#define le64toh(x) OSSwapLittleToHostInt64(x)
#endif /* __FINK_ENDIANDEV_PKG_ENDIAN_H__ */
@SamuelMarks

This comment has been minimized.

Copy link

@SamuelMarks SamuelMarks commented Nov 8, 2013

From LevelDB's port_posix.h:

#if defined(OS_MACOSX)
  #include <machine/endian.h>
#elif defined(OS_SOLARIS)
  #include <sys/isa_defs.h>
  #ifdef _LITTLE_ENDIAN
    #define LITTLE_ENDIAN
  #else
    #define BIG_ENDIAN
  #endif
#elif defined(OS_FREEBSD) || defined(OS_OPENBSD) || defined(OS_NETBSD) ||\
      defined(OS_DRAGONFLYBSD)
  #include <sys/types.h>
  #include <sys/endian.h>
#else
  #include <endian.h>
#endif
@ploxiln

This comment has been minimized.

Copy link

@ploxiln ploxiln commented Jan 12, 2015

@SamuelMarks while mac os X does have machine/endian.h, and does define those symbols, the linker can't find them, and I can't for the life of me figure out what library to link in for them on os x.

@ploxiln

This comment has been minimized.

Copy link

@ploxiln ploxiln commented Jan 12, 2015

I take that back - somehow I confused myself - while Mac OS X does have machine/endian.h, it doesn't define be32toh()

@dendisuhubdy

This comment has been minimized.

Copy link

@dendisuhubdy dendisuhubdy commented Jul 9, 2015

I made this solution

sudo vi /usr/include/endian.h

ifndef FINK_ENDIANDEV_PKG_ENDIAN_H

define FINK_ENDIANDEV_PKG_ENDIAN_H 1

/** compatibility header for endian.h

  • This is a simple compatibility shim to convert
  • BSD/Linux endian macros to the Mac OS X equivalents.
  • It is public domain.
  • */

ifndef APPLE

#warning "This header file (endian.h) is MacOS X specific.\n"

endif /* APPLE */

include <libkern/OSByteOrder.h>

define htobe16(x) OSSwapHostToBigInt16(x)

define htole16(x) OSSwapHostToLittleInt16(x)

define be16toh(x) OSSwapBigToHostInt16(x)

define le16toh(x) OSSwapLittleToHostInt16(x)

define htobe32(x) OSSwapHostToBigInt32(x)

define htole32(x) OSSwapHostToLittleInt32(x)

define be32toh(x) OSSwapBigToHostInt32(x)

define le32toh(x) OSSwapLittleToHostInt32(x)

define htobe64(x) OSSwapHostToBigInt64(x)

define htole64(x) OSSwapHostToLittleInt64(x)

define be64toh(x) OSSwapBigToHostInt64(x)

define le64toh(x) OSSwapLittleToHostInt64(x)

endif /* FINK_ENDIANDEV_PKG_ENDIAN_H */

then I compiled my project, it worked pretty well (although still some warnings)

@maxtortime

This comment has been minimized.

Copy link

@maxtortime maxtortime commented Jun 8, 2016

Thank you, this header file resolves my problem.
If you use http://create.stephan-brumme.com/hash-library/#keccak library in OSX,
please use this header file.

@923310233

This comment has been minimized.

Copy link

@923310233 923310233 commented Mar 9, 2019

牛逼

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.