1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 /* dbus-types.h types such as dbus_bool_t 3 * 4 * Copyright (C) 2002 Red Hat Inc. 5 * 6 * Licensed under the Academic Free License version 2.1 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 * 22 */ 23 #if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION) 24 #error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents." 25 #endif 26 27 #ifndef DBUS_TYPES_H 28 #define DBUS_TYPES_H 29 30 #include <stddef.h> 31 #include <dbus/dbus-arch-deps.h> 32 33 typedef dbus_uint32_t dbus_unichar_t; 34 /* boolean size must be fixed at 4 bytes due to wire protocol! */ 35 typedef dbus_uint32_t dbus_bool_t; 36 37 /* Normally docs are in .c files, but there isn't a .c file for this. */ 38 /** 39 * @defgroup DBusTypes Basic types 40 * @ingroup DBus 41 * @brief dbus_bool_t, dbus_int32_t, etc. 42 * 43 * Typedefs for common primitive types. 44 * 45 * @{ 46 */ 47 48 /** 49 * @typedef dbus_bool_t 50 * 51 * A boolean, valid values are #TRUE and #FALSE. 52 */ 53 54 /** 55 * @typedef dbus_uint32_t 56 * 57 * A 32-bit unsigned integer on all platforms. 58 */ 59 60 /** 61 * @typedef dbus_int32_t 62 * 63 * A 32-bit signed integer on all platforms. 64 */ 65 66 /** 67 * @typedef dbus_uint16_t 68 * 69 * A 16-bit unsigned integer on all platforms. 70 */ 71 72 /** 73 * @typedef dbus_int16_t 74 * 75 * A 16-bit signed integer on all platforms. 76 */ 77 78 79 /** 80 * @typedef dbus_uint64_t 81 * 82 * A 64-bit unsigned integer on all platforms that support it. 83 * If supported, #DBUS_HAVE_INT64 will be defined. 84 * 85 * C99 requires a 64-bit type and most likely all interesting 86 * compilers support one. GLib for example flat-out requires 87 * a 64-bit type. 88 * 89 * You probably want to just assume #DBUS_HAVE_INT64 is always defined. 90 */ 91 92 /** 93 * @typedef dbus_int64_t 94 * 95 * A 64-bit signed integer on all platforms that support it. 96 * If supported, #DBUS_HAVE_INT64 will be defined. 97 * 98 * C99 requires a 64-bit type and most likely all interesting 99 * compilers support one. GLib for example flat-out requires 100 * a 64-bit type. 101 * 102 * You probably want to just assume #DBUS_HAVE_INT64 is always defined. 103 */ 104 105 /** 106 * @def DBUS_HAVE_INT64 107 * 108 * Defined if 64-bit integers are available. Will be defined 109 * on any platform you care about, unless you care about 110 * some truly ancient UNIX, or some bizarre embedded platform. 111 * 112 * C99 requires a 64-bit type and most likely all interesting 113 * compilers support one. GLib for example flat-out requires 114 * a 64-bit type. 115 * 116 * You should feel comfortable ignoring this macro and just using 117 * int64 unconditionally. 118 * 119 */ 120 121 /** 122 * @def DBUS_INT64_CONSTANT 123 * 124 * Declare a 64-bit signed integer constant. The macro 125 * adds the necessary "LL" or whatever after the integer, 126 * giving a literal such as "325145246765LL" 127 */ 128 129 /** 130 * @def DBUS_UINT64_CONSTANT 131 * 132 * Declare a 64-bit unsigned integer constant. The macro 133 * adds the necessary "ULL" or whatever after the integer, 134 * giving a literal such as "325145246765ULL" 135 */ 136 137 /** 138 * An 8-byte struct you could use to access int64 without having 139 * int64 support 140 */ 141 typedef struct 142 { 143 dbus_uint32_t first32; /**< first 32 bits in the 8 bytes (beware endian issues) */ 144 dbus_uint32_t second32; /**< second 32 bits in the 8 bytes (beware endian issues) */ 145 } DBus8ByteStruct; 146 147 /** 148 * A simple value union that lets you access bytes as if they 149 * were various types; useful when dealing with basic types via 150 * void pointers and varargs. 151 * 152 * This union also contains a pointer member (which can be used 153 * to retrieve a string from dbus_message_iter_get_basic(), for 154 * instance), so on future platforms it could conceivably be larger 155 * than 8 bytes. 156 */ 157 typedef union 158 { 159 unsigned char bytes[8]; /**< as 8 individual bytes */ 160 dbus_int16_t i16; /**< as int16 */ 161 dbus_uint16_t u16; /**< as int16 */ 162 dbus_int32_t i32; /**< as int32 */ 163 dbus_uint32_t u32; /**< as int32 */ 164 dbus_bool_t bool_val; /**< as boolean */ 165 #ifdef DBUS_HAVE_INT64 166 dbus_int64_t i64; /**< as int64 */ 167 dbus_uint64_t u64; /**< as int64 */ 168 #endif 169 DBus8ByteStruct eight; /**< as 8-byte struct */ 170 double dbl; /**< as double */ 171 unsigned char byt; /**< as byte */ 172 char *str; /**< as char* (string, object path or signature) */ 173 int fd; /**< as Unix file descriptor */ 174 } DBusBasicValue; 175 176 /** @} */ 177 178 #endif /* DBUS_TYPES_H */ 179