You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

222 lines
5.4 KiB

1 year ago
/*
** Zabbix
** Copyright (C) 2001-2023 Zabbix SIA
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program 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 General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**/
#ifndef ZABBIX_TYPES_H
#define ZABBIX_TYPES_H
#include "zbxsysinc.h"
#if defined(_WINDOWS)
# define ZBX_THREAD_LOCAL __declspec(thread)
#else
# if defined(HAVE_THREAD_LOCAL) && (defined(__GNUC__) || defined(__clang__) || defined(__MINGW32__))
# define ZBX_THREAD_LOCAL __thread
# else
# error "C compiler is not compatible with agent2 assembly"
# endif
#endif
#if defined(_WINDOWS)
# include <strsafe.h>
# ifndef __UINT64_C
# define __UINT64_C(x) x
# endif
# ifndef __INT64_C
# define __INT64_C(x) x
# endif
# define zbx_uint64_t unsigned __int64
# define ZBX_FS_UI64 "%I64u"
# define ZBX_FS_UO64 "%I64o"
# define ZBX_FS_UX64 "%I64x"
# define zbx_int64_t __int64
# define ZBX_FS_I64 "%I64d"
# define ZBX_FS_O64 "%I64o"
# define ZBX_FS_X64 "%I64x"
# define snprintf _snprintf
# define alloca _alloca
# ifndef uint32_t
typedef unsigned __int32 zbx_uint32_t;
# else
typedef uint32_t zbx_uint32_t;
# endif
# define strcasecmp lstrcmpiA
# if defined(__INT_MAX__) && __INT_MAX__ == 2147483647
typedef int ssize_t;
# else
typedef long ssize_t;
# endif
typedef DWORD zbx_syserror_t;
#else /* _WINDOWS */
# ifndef __UINT64_C
# ifdef UINT64_C
# define __UINT64_C(c) (UINT64_C(c))
# else
# define __UINT64_C(c) (c ## ULL)
# endif
# endif
# ifndef __INT64_C
# ifdef INT64_C
# define __INT64_C(c) (INT64_C(c))
# else
# define __INT64_C(c) (c ## LL)
# endif
# endif
# define zbx_uint64_t uint64_t
# if __WORDSIZE == 64 || defined(__64BIT__)
# if defined(__APPLE__) && defined(__MACH__) /* OS X */
# define ZBX_FS_UI64 "%llu"
# define ZBX_FS_UO64 "%llo"
# define ZBX_FS_UX64 "%llx"
# else
# define ZBX_FS_UI64 "%lu"
# define ZBX_FS_UO64 "%lo"
# define ZBX_FS_UX64 "%lx"
# endif
# else
# ifdef HAVE_LONG_LONG_QU
# define ZBX_FS_UI64 "%qu"
# define ZBX_FS_UO64 "%qo"
# define ZBX_FS_UX64 "%qx"
# else
# define ZBX_FS_UI64 "%llu"
# define ZBX_FS_UO64 "%llo"
# define ZBX_FS_UX64 "%llx"
# endif
# endif
# define zbx_int64_t int64_t
# if __WORDSIZE == 64 || defined(__64BIT__)
# if defined(__APPLE__) && defined(__MACH__) /* OS X */
# define ZBX_FS_I64 "%lld"
# define ZBX_FS_O64 "%llo"
# define ZBX_FS_X64 "%llx"
# else
# define ZBX_FS_I64 "%ld"
# define ZBX_FS_O64 "%lo"
# define ZBX_FS_X64 "%lx"
# endif
# else
# ifdef HAVE_LONG_LONG_QU
# define ZBX_FS_I64 "%qd"
# define ZBX_FS_O64 "%qo"
# define ZBX_FS_X64 "%qx"
# else
# define ZBX_FS_I64 "%lld"
# define ZBX_FS_O64 "%llo"
# define ZBX_FS_X64 "%llx"
# endif
# endif
typedef uint32_t zbx_uint32_t;
typedef int zbx_syserror_t;
#endif /* _WINDOWS */
#if defined(_WINDOWS)
# define zbx_stat(path, buf) __zbx_stat(path, buf)
# define zbx_fstat(fd, buf) _fstat64(fd, buf)
typedef __int64 zbx_offset_t;
# define zbx_lseek(fd, offset, whence) _lseeki64(fd, (zbx_offset_t)(offset), whence)
#elif defined(__MINGW32__)
# define zbx_stat(path, buf) __zbx_stat(path, buf)
# define zbx_fstat(fd, buf) _fstat64(fd, buf)
typedef off64_t zbx_offset_t;
# define zbx_lseek(fd, offset, whence) lseek64(fd, (zbx_offset_t)(offset), whence)
#else
# define zbx_stat(path, buf) stat(path, buf)
# define zbx_fstat(fd, buf) fstat(fd, buf)
typedef off_t zbx_offset_t;
# define zbx_lseek(fd, offset, whence) lseek(fd, (zbx_offset_t)(offset), whence)
#endif
#define ZBX_FS_DBL "%lf"
#define ZBX_FS_DBL_EXT(p) "%." #p "lf"
#define ZBX_FS_DBL64 "%.17G"
#ifdef HAVE_ORACLE
# define ZBX_FS_DBL64_SQL ZBX_FS_DBL64 "d"
#else
# define ZBX_FS_DBL64_SQL ZBX_FS_DBL64
#endif
#define ZBX_PTR_SIZE sizeof(void *)
#define ZBX_FS_SIZE_T ZBX_FS_UI64
#define ZBX_FS_SSIZE_T ZBX_FS_I64
#define ZBX_FS_TIME_T ZBX_FS_I64
#define zbx_fs_size_t zbx_uint64_t /* use this type only in calls to printf() for formatting size_t */
#define zbx_fs_ssize_t zbx_int64_t /* use this type only in calls to printf() for formatting ssize_t */
#define zbx_fs_time_t zbx_int64_t /* use this type only in calls to printf() for formatting time_t */
#ifndef S_ISREG
# define S_ISREG(x) (((x) & S_IFMT) == S_IFREG)
#endif
#ifndef S_ISDIR
# define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR)
#endif
typedef struct
{
zbx_uint64_t lo;
zbx_uint64_t hi;
}
zbx_uint128_t;
#define ZBX_SIZE_T_ALIGN8(size) (((size) + 7) & ~(size_t)7)
/* macro to test if a signed value has been assigned to unsigned type (char, short, int, long long) */
#define ZBX_IS_TOP_BIT_SET(x) (0 != ((__UINT64_C(1) << ((sizeof(x) << 3) - 1)) & (x)))
#if defined(_WINDOWS) || defined(__MINGW32__)
#define localtime_r(x, y) localtime_s(y, x)
#endif
typedef struct zbx_variant zbx_variant_t;
#define SUCCEED 0
#define FAIL -1
#define NOTSUPPORTED -2
#define NETWORK_ERROR -3
#define TIMEOUT_ERROR -4
#define AGENT_ERROR -5
#define GATEWAY_ERROR -6
#define CONFIG_ERROR -7
#define SIG_ERROR -8
#endif