mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-06-13 10:08:48 +02:00
* configure.in (LT_CURRENT, LT_AGE): increment current and age to reflect addition of interfaces. * doc/dbus-specification.xml: describe a new org.freedesktop.DBus.Peer.GetMachineId method * dbus/dbus-string.c (_dbus_string_skip_white_reverse): new function (_dbus_string_skip_white, _dbus_string_skip_blank): use new DBUS_IS_ASCII_BLANK, DBUS_IS_ASCII_WHITE macros and fix assertion at end of skip_white (_dbus_string_chop_white): new function * bus/connection.c (bus_connections_setup_connection): call dbus_connection_set_route_peer_messages. * dbus/dbus-connection.c (_dbus_connection_peer_filter_unlocked_no_update): modify to support a GetMachineId method. Also, support a new flag to let the bus pass peer methods through to apps on the bus, which can be set with dbus_connection_set_route_peer_messages. Finally, handle and return an error for anything unknown on the Peer interface, which will allow us to extend the Peer interface in the future without fear that we're now intercepting something apps were wanting to see. * tools/dbus-uuidgen.c: a thin wrapper around the functions in dbus/dbus-uuidgen.c * dbus/dbus-uuidgen.c: implement the bulk of the dbus-uuidgen binary here, since most of the code is already in libdbus * dbus/dbus-sysdeps.c (_dbus_read_local_machine_uuid): read the uuid from the system config file * dbus/dbus-internals.c (_dbus_generate_uuid, _dbus_uuid_encode) (_dbus_read_uuid_file_without_creating) (_dbus_create_uuid_file_exclusively, _dbus_read_uuid_file): new uuid-related functions, partly factored out from dbus-server.c * dbus/dbus-sysdeps.c (_dbus_error_from_errno): convert EEXIST to DBUS_ERROR_FILE_EXISTS instead of EEXIST * dbus/dbus-protocol.h (DBUS_ERROR_FILE_EXISTS): add file exists error * tools/dbus-cleanup-sockets.1: explain what the point of this thing is a bit more * autogen.sh (run_configure): add --config-cache to default configure args * dbus/dbus-internals.h (_DBUS_ASSERT_ERROR_IS_SET): disable the error set/clear assertions when DBUS_DISABLE_CHECKS is defined * tools/dbus-launch.c (main): if xdisplay hasn't been opened, don't try to save address, fixes crash in make check
308 lines
19 KiB
C
308 lines
19 KiB
C
/* -*- mode: C; c-file-style: "gnu" -*- */
|
|
/* dbus-string.h String utility class (internal to D-Bus implementation)
|
|
*
|
|
* Copyright (C) 2002, 2003 Red Hat, Inc.
|
|
*
|
|
* Licensed under the Academic Free License version 2.1
|
|
*
|
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
*/
|
|
|
|
#ifndef DBUS_STRING_H
|
|
#define DBUS_STRING_H
|
|
|
|
#include <config.h>
|
|
|
|
#include <dbus/dbus-memory.h>
|
|
#include <dbus/dbus-types.h>
|
|
#include <dbus/dbus-sysdeps.h>
|
|
|
|
#include <stdarg.h>
|
|
|
|
DBUS_BEGIN_DECLS
|
|
|
|
/**
|
|
* DBusString object
|
|
*/
|
|
struct DBusString
|
|
{
|
|
const void *dummy1; /**< placeholder */
|
|
int dummy2; /**< placeholder */
|
|
int dummy3; /**< placeholder */
|
|
int dummy4; /**< placeholder */
|
|
unsigned int dummy5 : 1; /**< placeholder */
|
|
unsigned int dummy6 : 1; /**< placeholder */
|
|
unsigned int dummy7 : 1; /**< placeholder */
|
|
unsigned int dummy8 : 3; /**< placeholder */
|
|
};
|
|
|
|
#ifdef DBUS_DISABLE_ASSERT
|
|
/* Some simple inlining hacks; the current linker is not smart enough
|
|
* to inline non-exported symbols across files in the library.
|
|
* Note that these break type safety (due to the casts)
|
|
*/
|
|
#define _dbus_string_get_data(s) ((char*)(((DBusString*)(s))->dummy1))
|
|
#define _dbus_string_get_length(s) (((DBusString*)(s))->dummy2)
|
|
#define _dbus_string_set_byte(s, i, b) ((((unsigned char*)(((DBusString*)(s))->dummy1))[(i)]) = (unsigned char) (b))
|
|
#define _dbus_string_get_byte(s, i) (((const unsigned char*)(((DBusString*)(s))->dummy1))[(i)])
|
|
#define _dbus_string_get_const_data(s) ((const char*)(((DBusString*)(s))->dummy1))
|
|
#define _dbus_string_get_const_data_len(s,start,len) (((const char*)(((DBusString*)(s))->dummy1)) + (start))
|
|
#endif
|
|
|
|
dbus_bool_t _dbus_string_init (DBusString *str);
|
|
void _dbus_string_init_const (DBusString *str,
|
|
const char *value);
|
|
void _dbus_string_init_const_len (DBusString *str,
|
|
const char *value,
|
|
int len);
|
|
dbus_bool_t _dbus_string_init_preallocated (DBusString *str,
|
|
int allocate_size);
|
|
void _dbus_string_free (DBusString *str);
|
|
void _dbus_string_lock (DBusString *str);
|
|
#ifndef _dbus_string_get_data
|
|
char* _dbus_string_get_data (DBusString *str);
|
|
#endif /* _dbus_string_get_data */
|
|
#ifndef _dbus_string_get_const_data
|
|
const char* _dbus_string_get_const_data (const DBusString *str);
|
|
#endif /* _dbus_string_get_const_data */
|
|
char* _dbus_string_get_data_len (DBusString *str,
|
|
int start,
|
|
int len);
|
|
#ifndef _dbus_string_get_const_data_len
|
|
const char* _dbus_string_get_const_data_len (const DBusString *str,
|
|
int start,
|
|
int len);
|
|
#endif
|
|
#ifndef _dbus_string_set_byte
|
|
void _dbus_string_set_byte (DBusString *str,
|
|
int i,
|
|
unsigned char byte);
|
|
#endif
|
|
#ifndef _dbus_string_get_byte
|
|
unsigned char _dbus_string_get_byte (const DBusString *str,
|
|
int start);
|
|
#endif /* _dbus_string_get_byte */
|
|
dbus_bool_t _dbus_string_insert_bytes (DBusString *str,
|
|
int i,
|
|
int n_bytes,
|
|
unsigned char byte);
|
|
dbus_bool_t _dbus_string_insert_byte (DBusString *str,
|
|
int i,
|
|
unsigned char byte);
|
|
dbus_bool_t _dbus_string_steal_data (DBusString *str,
|
|
char **data_return);
|
|
dbus_bool_t _dbus_string_steal_data_len (DBusString *str,
|
|
char **data_return,
|
|
int start,
|
|
int len);
|
|
dbus_bool_t _dbus_string_copy_data (const DBusString *str,
|
|
char **data_return);
|
|
dbus_bool_t _dbus_string_copy_data_len (const DBusString *str,
|
|
char **data_return,
|
|
int start,
|
|
int len);
|
|
void _dbus_string_copy_to_buffer (const DBusString *str,
|
|
char *buffer,
|
|
int len);
|
|
#ifndef _dbus_string_get_length
|
|
int _dbus_string_get_length (const DBusString *str);
|
|
#endif /* !_dbus_string_get_length */
|
|
|
|
dbus_bool_t _dbus_string_lengthen (DBusString *str,
|
|
int additional_length);
|
|
void _dbus_string_shorten (DBusString *str,
|
|
int length_to_remove);
|
|
dbus_bool_t _dbus_string_set_length (DBusString *str,
|
|
int length);
|
|
dbus_bool_t _dbus_string_align_length (DBusString *str,
|
|
int alignment);
|
|
dbus_bool_t _dbus_string_alloc_space (DBusString *str,
|
|
int extra_bytes);
|
|
dbus_bool_t _dbus_string_append (DBusString *str,
|
|
const char *buffer);
|
|
dbus_bool_t _dbus_string_append_len (DBusString *str,
|
|
const char *buffer,
|
|
int len);
|
|
dbus_bool_t _dbus_string_append_int (DBusString *str,
|
|
long value);
|
|
dbus_bool_t _dbus_string_append_uint (DBusString *str,
|
|
unsigned long value);
|
|
dbus_bool_t _dbus_string_append_double (DBusString *str,
|
|
double value);
|
|
dbus_bool_t _dbus_string_append_byte (DBusString *str,
|
|
unsigned char byte);
|
|
dbus_bool_t _dbus_string_append_unichar (DBusString *str,
|
|
dbus_unichar_t ch);
|
|
dbus_bool_t _dbus_string_append_4_aligned (DBusString *str,
|
|
const unsigned char octets[4]);
|
|
dbus_bool_t _dbus_string_append_8_aligned (DBusString *str,
|
|
const unsigned char octets[8]);
|
|
dbus_bool_t _dbus_string_append_printf (DBusString *str,
|
|
const char *format,
|
|
...) _DBUS_GNUC_PRINTF (2, 3);
|
|
dbus_bool_t _dbus_string_append_printf_valist (DBusString *str,
|
|
const char *format,
|
|
va_list args);
|
|
dbus_bool_t _dbus_string_insert_2_aligned (DBusString *str,
|
|
int insert_at,
|
|
const unsigned char octets[2]);
|
|
dbus_bool_t _dbus_string_insert_4_aligned (DBusString *str,
|
|
int insert_at,
|
|
const unsigned char octets[4]);
|
|
dbus_bool_t _dbus_string_insert_8_aligned (DBusString *str,
|
|
int insert_at,
|
|
const unsigned char octets[8]);
|
|
dbus_bool_t _dbus_string_insert_alignment (DBusString *str,
|
|
int *insert_at,
|
|
int alignment);
|
|
void _dbus_string_delete (DBusString *str,
|
|
int start,
|
|
int len);
|
|
dbus_bool_t _dbus_string_move (DBusString *source,
|
|
int start,
|
|
DBusString *dest,
|
|
int insert_at);
|
|
dbus_bool_t _dbus_string_copy (const DBusString *source,
|
|
int start,
|
|
DBusString *dest,
|
|
int insert_at);
|
|
dbus_bool_t _dbus_string_move_len (DBusString *source,
|
|
int start,
|
|
int len,
|
|
DBusString *dest,
|
|
int insert_at);
|
|
dbus_bool_t _dbus_string_copy_len (const DBusString *source,
|
|
int start,
|
|
int len,
|
|
DBusString *dest,
|
|
int insert_at);
|
|
dbus_bool_t _dbus_string_replace_len (const DBusString *source,
|
|
int start,
|
|
int len,
|
|
DBusString *dest,
|
|
int replace_at,
|
|
int replace_len);
|
|
void _dbus_string_get_unichar (const DBusString *str,
|
|
int start,
|
|
dbus_unichar_t *ch_return,
|
|
int *end_return);
|
|
dbus_bool_t _dbus_string_parse_int (const DBusString *str,
|
|
int start,
|
|
long *value_return,
|
|
int *end_return);
|
|
dbus_bool_t _dbus_string_parse_uint (const DBusString *str,
|
|
int start,
|
|
unsigned long *value_return,
|
|
int *end_return);
|
|
dbus_bool_t _dbus_string_parse_double (const DBusString *str,
|
|
int start,
|
|
double *value,
|
|
int *end_return);
|
|
dbus_bool_t _dbus_string_find (const DBusString *str,
|
|
int start,
|
|
const char *substr,
|
|
int *found);
|
|
dbus_bool_t _dbus_string_find_to (const DBusString *str,
|
|
int start,
|
|
int end,
|
|
const char *substr,
|
|
int *found);
|
|
dbus_bool_t _dbus_string_find_byte_backward (const DBusString *str,
|
|
int start,
|
|
unsigned char byte,
|
|
int *found);
|
|
dbus_bool_t _dbus_string_find_blank (const DBusString *str,
|
|
int start,
|
|
int *found);
|
|
void _dbus_string_skip_blank (const DBusString *str,
|
|
int start,
|
|
int *end);
|
|
void _dbus_string_skip_white (const DBusString *str,
|
|
int start,
|
|
int *end);
|
|
void _dbus_string_skip_white_reverse (const DBusString *str,
|
|
int end,
|
|
int *start);
|
|
dbus_bool_t _dbus_string_equal (const DBusString *a,
|
|
const DBusString *b);
|
|
dbus_bool_t _dbus_string_equal_c_str (const DBusString *a,
|
|
const char *c_str);
|
|
dbus_bool_t _dbus_string_equal_len (const DBusString *a,
|
|
const DBusString *b,
|
|
int len);
|
|
dbus_bool_t _dbus_string_equal_substring (const DBusString *a,
|
|
int a_start,
|
|
int a_len,
|
|
const DBusString *b,
|
|
int b_start);
|
|
dbus_bool_t _dbus_string_starts_with_c_str (const DBusString *a,
|
|
const char *c_str);
|
|
dbus_bool_t _dbus_string_ends_with_c_str (const DBusString *a,
|
|
const char *c_str);
|
|
dbus_bool_t _dbus_string_pop_line (DBusString *source,
|
|
DBusString *dest);
|
|
void _dbus_string_delete_first_word (DBusString *str);
|
|
void _dbus_string_delete_leading_blanks (DBusString *str);
|
|
void _dbus_string_chop_white (DBusString *str);
|
|
dbus_bool_t _dbus_string_append_byte_as_hex (DBusString *str,
|
|
int byte);
|
|
dbus_bool_t _dbus_string_hex_encode (const DBusString *source,
|
|
int start,
|
|
DBusString *dest,
|
|
int insert_at);
|
|
dbus_bool_t _dbus_string_hex_decode (const DBusString *source,
|
|
int start,
|
|
int *end_return,
|
|
DBusString *dest,
|
|
int insert_at);
|
|
dbus_bool_t _dbus_string_validate_ascii (const DBusString *str,
|
|
int start,
|
|
int len);
|
|
dbus_bool_t _dbus_string_validate_utf8 (const DBusString *str,
|
|
int start,
|
|
int len);
|
|
dbus_bool_t _dbus_string_validate_nul (const DBusString *str,
|
|
int start,
|
|
int len);
|
|
void _dbus_string_zero (DBusString *str);
|
|
|
|
|
|
/**
|
|
* We allocate 1 byte for nul termination, plus 7 bytes for possible
|
|
* align_offset, so we always need 8 bytes on top of the string's
|
|
* length to be in the allocated block.
|
|
*/
|
|
#define _DBUS_STRING_ALLOCATION_PADDING 8
|
|
|
|
/**
|
|
* Defines a static const variable with type #DBusString called "name"
|
|
* containing the given string literal.
|
|
*
|
|
* @param name the name of the variable
|
|
* @param str the string value
|
|
*/
|
|
#define _DBUS_STRING_DEFINE_STATIC(name, str) \
|
|
static const char _dbus_static_string_##name[] = str; \
|
|
static const DBusString name = { _dbus_static_string_##name, \
|
|
sizeof(_dbus_static_string_##name), \
|
|
sizeof(_dbus_static_string_##name) + \
|
|
_DBUS_STRING_ALLOCATION_PADDING, \
|
|
sizeof(_dbus_static_string_##name), \
|
|
TRUE, TRUE, FALSE, 0 }
|
|
|
|
DBUS_END_DECLS
|
|
|
|
#endif /* DBUS_STRING_H */
|