| /////////////////////////////////////////////////////////////////////////////// |
| // |
| /// \file sysdefs.h |
| /// \brief Common includes, definitions, system-specific things etc. |
| /// |
| /// This file is used also by the lzma command line tool, that's why this |
| /// file is separate from common.h. |
| // |
| // Copyright (C) 2007 Lasse Collin |
| // |
| // This library is free software; you can redistribute it and/or |
| // modify it under the terms of the GNU Lesser General Public |
| // License as published by the Free Software Foundation; either |
| // version 2.1 of the License, or (at your option) any later version. |
| // |
| // This library is distributed in the hope that it will be useful, |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| // Lesser General Public License for more details. |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| #ifndef LZMA_SYSDEFS_H |
| #define LZMA_SYSDEFS_H |
| |
| ////////////// |
| // Includes // |
| ////////////// |
| |
| #ifdef HAVE_CONFIG_H |
| # include <config.h> |
| #endif |
| |
| #include <sys/types.h> |
| |
| #ifdef HAVE_INTTYPES_H |
| # include <inttypes.h> |
| #endif |
| |
| #ifdef HAVE_LIMITS_H |
| # include <limits.h> |
| #endif |
| |
| // Be more compatible with systems that have non-conforming inttypes.h. |
| // We assume that int is 32-bit and that long is either 32-bit or 64-bit. |
| // Full Autoconf test could be more correct, but this should work well enough. |
| #ifndef UINT32_C |
| # define UINT32_C(n) n ## U |
| #endif |
| #ifndef UINT32_MAX |
| # define UINT32_MAX UINT32_C(4294967295) |
| #endif |
| #ifndef PRIu32 |
| # define PRIu32 "u" |
| #endif |
| #ifndef PRIX32 |
| # define PRIX32 "X" |
| #endif |
| #if SIZEOF_UNSIGNED_LONG == 4 |
| # ifndef UINT64_C |
| # define UINT64_C(n) n ## ULL |
| # endif |
| # ifndef PRIu64 |
| # define PRIu64 "llu" |
| # endif |
| # ifndef PRIX64 |
| # define PRIX64 "llX" |
| # endif |
| #else |
| # ifndef UINT64_C |
| # define UINT64_C(n) n ## UL |
| # endif |
| # ifndef PRIu64 |
| # define PRIu64 "lu" |
| # endif |
| # ifndef PRIX64 |
| # define PRIX64 "lX" |
| # endif |
| #endif |
| #ifndef UINT64_MAX |
| # define UINT64_MAX UINT64_C(18446744073709551615) |
| #endif |
| #ifndef SIZE_MAX |
| # if SIZEOF_SIZE_T == 4 |
| # define SIZE_MAX UINT32_MAX |
| # else |
| # define SIZE_MAX UINT64_MAX |
| # endif |
| #endif |
| |
| #include <stdlib.h> |
| |
| #ifdef HAVE_STDBOOL_H |
| # include <stdbool.h> |
| #else |
| # if ! HAVE__BOOL |
| typedef unsigned char _Bool; |
| # endif |
| # define bool _Bool |
| # define false 0 |
| # define true 1 |
| # define __bool_true_false_are_defined 1 |
| #endif |
| |
| #ifdef HAVE_ASSERT_H |
| # include <assert.h> |
| #else |
| # ifdef NDEBUG |
| # define assert(x) |
| # else |
| // TODO: Pretty bad assert() macro. |
| # define assert(x) (!(x) && abort()) |
| # endif |
| #endif |
| |
| #ifdef HAVE_STRING_H |
| # include <string.h> |
| #endif |
| |
| #ifdef HAVE_STRINGS_H |
| # include <strings.h> |
| #endif |
| |
| #ifdef HAVE_MEMORY_H |
| # include <memory.h> |
| #endif |
| |
| #include "lzma.h" |
| |
| |
| //////////// |
| // Macros // |
| //////////// |
| |
| #ifndef HAVE_MEMCPY |
| # define memcpy(dest, src, n) bcopy(src, dest, n) |
| #endif |
| |
| #ifndef HAVE_MEMMOVE |
| # define memmove(dest, src, n) bcopy(src, dest, n) |
| #endif |
| |
| #ifdef HAVE_MEMSET |
| # define memzero(s, n) memset(s, 0, n) |
| #else |
| # define memzero(s, n) bzero(s, n) |
| #endif |
| |
| #ifndef MIN |
| # define MIN(x, y) ((x) < (y) ? (x) : (y)) |
| #endif |
| |
| #ifndef MAX |
| # define MAX(x, y) ((x) > (y) ? (x) : (y)) |
| #endif |
| |
| #ifndef ARRAY_SIZE |
| # define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) |
| #endif |
| |
| #endif |