Have autoconf check whether enums are signed.

Fixes bug 7727; fix on 0.2.4.10-alpha.
This commit is contained in:
Nick Mathewson 2013-02-07 16:29:32 -05:00
parent 0e597471af
commit 41200b4770
4 changed files with 11 additions and 2 deletions

View File

@ -2,3 +2,6 @@
- Use Ville Laurikari's implementation of AX_CHECK_SIGN() to determine
the signs of types during autoconf. This is better than our old
approach, which didn't work when cross-compiling.
- Detect the sign of enum values, rather than assuming that MSC is the
only compiler where enum types are all signed. Fix for bug 7727;
bugfix on 0.2.4.10-alpha.

View File

@ -984,6 +984,12 @@ if test "$tor_cv_size_t_signed" = yes; then
AC_MSG_ERROR([You have a signed size_t; that's grossly nonconformant.])
fi
AX_CHECK_SIGN([enum always],
[ AC_DEFINE(ENUM_VALS_ARE_SIGNED, 1, [Define if enum is always signed]) ],
[ : ], [
enum always { AAA, BBB, CCC };
])
AC_CHECK_SIZEOF(socklen_t, , [AC_INCLUDES_DEFAULT()
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>

View File

@ -136,8 +136,7 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
#define DBL_TO_U64(x) ((uint64_t) (x))
#endif
#if defined(_MSC_VER)
/* XXXX024 we should instead have a more general check for "Is enum signed?"*/
#ifdef ENUM_VALS_ARE_SIGNED
#define ENUM_BF(t) unsigned
#else
/** Wrapper for having a bitfield of an enumerated type. Where possible, we

View File

@ -256,3 +256,4 @@
#define CURVE25519_ENABLED
#define USE_CURVE25519_DONNA
#define ENUM_VALS_ARE_SIGNED 1