1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* udis86 - libudis86/udint.h -- definitions for internal use only
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Copyright (c) 2002-2009 Vivek Thampi
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * All rights reserved.
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without modification,
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * are permitted provided that the following conditions are met:
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *     * Redistributions of source code must retain the above copyright notice,
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *       this list of conditions and the following disclaimer.
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above copyright notice,
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *       this list of conditions and the following disclaimer in the documentation
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *       and/or other materials provided with the distribution.
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef _UDINT_H_
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define _UDINT_H_
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifdef HAVE_CONFIG_H
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# include <config.h>
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif /* HAVE_CONFIG_H */
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifdef HAVE_ASSERT_H
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# include <assert.h>
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# define UD_ASSERT(_x) assert(_x)
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# define UD_ASSERT(_x)
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif /* !HAVE_ASSERT_H */
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifdef LOGERR
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  #define UDERR(u, msg) \
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    do { \
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      (u)->error = 1; \
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      fprintf(stderr, "decode-error: %s:%d: %s", \
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)              __FILE__, __LINE__, (msg)); \
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    } while (0)
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  #define UDERR(u, m) \
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    do { \
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      (u)->error = 1; \
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    } while (0)
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif /* !LOGERR */
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define UD_RETURN_ON_ERROR(u) \
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  do { \
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if ((u)->error != 0) { \
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return (u)->error; \
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    } \
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  } while (0)
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define UD_RETURN_WITH_ERROR(u, m) \
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  do { \
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    UDERR(u, m); \
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return (u)->error; \
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  } while (0)
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* printf formatting int64 specifier */
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifdef FMT64
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# undef FMT64
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(_MSC_VER) || defined(__BORLANDC__)
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# define FMT64 "I64"
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# if defined(__APPLE__)
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#  define FMT64 "ll"
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# elif defined(__amd64__) || defined(__x86_64__)
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#  define FMT64 "l"
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# else
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#  define FMT64 "ll"
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# endif /* !x64 */
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif /* _UDINT_H_ */
84