Home | History | Annotate | Download | only in dbus
      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