D-Bus  1.4.10
dbus-string.h
1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2 /* dbus-string.h String utility class (internal to D-Bus implementation)
3  *
4  * Copyright (C) 2002, 2003 Red Hat, Inc.
5  * Copyright (C) 2006 Ralf Habacker <ralf.habacker@freenet.de>
6  *
7  * Licensed under the Academic Free License version 2.1
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22  *
23  */
24 
25 #ifndef DBUS_STRING_H
26 #define DBUS_STRING_H
27 
28 #include <dbus/dbus-macros.h>
29 #include <dbus/dbus-types.h>
30 #include <dbus/dbus-memory.h>
31 
32 #include <stdarg.h>
33 
35 
40 typedef struct DBusString DBusString;
41 
42 struct DBusString
43 {
44 #if defined(DBUS_WIN) && defined(_DEBUG)
45  const char *dummy1;
46 #else
47  const void *dummy1;
48 #endif
49  int dummy2;
50  int dummy3;
51  int dummy4;
52  unsigned int dummy5 : 1;
53  unsigned int dummy6 : 1;
54  unsigned int dummy7 : 1;
55  unsigned int dummy8 : 3;
56 };
57 
58 #ifdef DBUS_DISABLE_ASSERT
59 /* Some simple inlining hacks; the current linker is not smart enough
60  * to inline non-exported symbols across files in the library.
61  * Note that these break type safety (due to the casts)
62  */
63 #define _dbus_string_get_data(s) ((char*)(((DBusString*)(s))->dummy1))
64 #define _dbus_string_get_length(s) (((DBusString*)(s))->dummy2)
65 #define _dbus_string_set_byte(s, i, b) ((((unsigned char*)(((DBusString*)(s))->dummy1))[(i)]) = (unsigned char) (b))
66 #define _dbus_string_get_byte(s, i) (((const unsigned char*)(((DBusString*)(s))->dummy1))[(i)])
67 #define _dbus_string_get_const_data(s) ((const char*)(((DBusString*)(s))->dummy1))
68 #define _dbus_string_get_const_data_len(s,start,len) (((const char*)(((DBusString*)(s))->dummy1)) + (start))
69 #endif
70 
73  const char *value);
75  const char *value,
76  int len);
78  int allocate_size);
79 void _dbus_string_free (DBusString *str);
80 void _dbus_string_lock (DBusString *str);
82  int max_waste);
83 #ifndef _dbus_string_get_data
85 #endif /* _dbus_string_get_data */
86 #ifndef _dbus_string_get_const_data
87 const char* _dbus_string_get_const_data (const DBusString *str);
88 #endif /* _dbus_string_get_const_data */
90  int start,
91  int len);
92 #ifndef _dbus_string_get_const_data_len
93 const char* _dbus_string_get_const_data_len (const DBusString *str,
94  int start,
95  int len);
96 #endif
97 #ifndef _dbus_string_set_byte
99  int i,
100  unsigned char byte);
101 #endif
102 #ifndef _dbus_string_get_byte
103 unsigned char _dbus_string_get_byte (const DBusString *str,
104  int start);
105 #endif /* _dbus_string_get_byte */
107  int i,
108  int n_bytes,
109  unsigned char byte);
111  int i,
112  unsigned char byte);
114  char **data_return);
115 dbus_bool_t _dbus_string_steal_data_len (DBusString *str,
116  char **data_return,
117  int start,
118  int len);
120  char **data_return);
121 dbus_bool_t _dbus_string_copy_data_len (const DBusString *str,
122  char **data_return,
123  int start,
124  int len);
125 void _dbus_string_copy_to_buffer (const DBusString *str,
126  char *buffer,
127  int len);
129  char *buffer,
130  int avail_len);
131 #ifndef _dbus_string_get_length
132 int _dbus_string_get_length (const DBusString *str);
133 #endif /* !_dbus_string_get_length */
134 
136  int additional_length);
138  int length_to_remove);
140  int length);
142  int alignment);
144  int extra_bytes);
146  const char *buffer);
148  const char *buffer,
149  int len);
151  long value);
153  unsigned long value);
154 dbus_bool_t _dbus_string_append_double (DBusString *str,
155  double value);
157  unsigned char byte);
158 dbus_bool_t _dbus_string_append_unichar (DBusString *str,
159  dbus_unichar_t ch);
160 dbus_bool_t _dbus_string_append_4_aligned (DBusString *str,
161  const unsigned char octets[4]);
162 dbus_bool_t _dbus_string_append_8_aligned (DBusString *str,
163  const unsigned char octets[8]);
165  const char *format,
166  ...) _DBUS_GNUC_PRINTF (2, 3);
168  const char *format,
169  va_list args);
171  int insert_at,
172  const unsigned char octets[2]);
174  int insert_at,
175  const unsigned char octets[4]);
177  int insert_at,
178  const unsigned char octets[8]);
180  int *insert_at,
181  int alignment);
183  int start,
184  int len);
186  int start,
187  DBusString *dest,
188  int insert_at);
190  int start,
191  DBusString *dest,
192  int insert_at);
194  int start,
195  int len,
196  DBusString *dest,
197  int insert_at);
199  int start,
200  int len,
201  DBusString *dest,
202  int insert_at);
204  int start,
205  int len,
206  DBusString *dest,
207  int replace_at,
208  int replace_len);
210  unsigned char byte,
211  DBusString *tail);
212 void _dbus_string_get_unichar (const DBusString *str,
213  int start,
214  dbus_unichar_t *ch_return,
215  int *end_return);
217  int start,
218  long *value_return,
219  int *end_return);
221  int start,
222  unsigned long *value_return,
223  int *end_return);
224 dbus_bool_t _dbus_string_parse_double (const DBusString *str,
225  int start,
226  double *value,
227  int *end_return);
229  int start,
230  const char *substr,
231  int *found);
233  int start,
234  int *found,
235  int *found_len);
237  int start,
238  int end,
239  const char *substr,
240  int *found);
242  int start,
243  unsigned char byte,
244  int *found);
246  int start,
247  int *found);
248 void _dbus_string_skip_blank (const DBusString *str,
249  int start,
250  int *end);
251 void _dbus_string_skip_white (const DBusString *str,
252  int start,
253  int *end);
255  int end,
256  int *start);
258  const DBusString *b);
260  const char *c_str);
262  const DBusString *b,
263  int len);
265  int a_start,
266  int a_len,
267  const DBusString *b,
268  int b_start);
269 dbus_bool_t _dbus_string_starts_with_c_str (const DBusString *a,
270  const char *c_str);
272  const char *c_str);
274  DBusString *dest);
275 void _dbus_string_delete_first_word (DBusString *str);
276 void _dbus_string_delete_leading_blanks (DBusString *str);
279  int byte);
281  int start,
282  DBusString *dest,
283  int insert_at);
285  int start,
286  int *end_return,
287  DBusString *dest,
288  int insert_at);
289 void _dbus_string_tolower_ascii (const DBusString *str,
290  int start,
291  int len);
292 void _dbus_string_toupper_ascii (const DBusString *str,
293  int start,
294  int len);
296  int start,
297  int len);
299  int start,
300  int len);
302  int start,
303  int len);
304 void _dbus_string_zero (DBusString *str);
305 
306 
312 #define _DBUS_STRING_ALLOCATION_PADDING 8
313 
321 #define _DBUS_STRING_DEFINE_STATIC(name, str) \
322  static const char _dbus_static_string_##name[] = str; \
323  static const DBusString name = { _dbus_static_string_##name, \
324  sizeof(_dbus_static_string_##name), \
325  sizeof(_dbus_static_string_##name) + \
326  _DBUS_STRING_ALLOCATION_PADDING, \
327  sizeof(_dbus_static_string_##name), \
328  TRUE, TRUE, FALSE, 0 }
329 
331 
332 #endif /* DBUS_STRING_H */