00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef DBUS_STRING_H
00026 #define DBUS_STRING_H
00027
00028 #include <dbus/dbus-macros.h>
00029 #include <dbus/dbus-types.h>
00030 #include <dbus/dbus-memory.h>
00031
00032 #include <stdarg.h>
00033
00034 DBUS_BEGIN_DECLS
00035
00040 typedef struct DBusString DBusString;
00041
00042 struct DBusString
00043 {
00044 #if defined(DBUS_WIN) && defined(_DEBUG)
00045 const char *dummy1;
00046 #else
00047 const void *dummy1;
00048 #endif
00049 int dummy2;
00050 int dummy3;
00051 int dummy4;
00052 unsigned int dummy5 : 1;
00053 unsigned int dummy6 : 1;
00054 unsigned int dummy7 : 1;
00055 unsigned int dummy8 : 3;
00056 };
00057
00058 #ifdef DBUS_DISABLE_ASSERT
00059
00060
00061
00062
00063 #define _dbus_string_get_data(s) ((char*)(((DBusString*)(s))->dummy1))
00064 #define _dbus_string_get_length(s) (((DBusString*)(s))->dummy2)
00065 #define _dbus_string_set_byte(s, i, b) ((((unsigned char*)(((DBusString*)(s))->dummy1))[(i)]) = (unsigned char) (b))
00066 #define _dbus_string_get_byte(s, i) (((const unsigned char*)(((DBusString*)(s))->dummy1))[(i)])
00067 #define _dbus_string_get_const_data(s) ((const char*)(((DBusString*)(s))->dummy1))
00068 #define _dbus_string_get_const_data_len(s,start,len) (((const char*)(((DBusString*)(s))->dummy1)) + (start))
00069 #endif
00070
00071 dbus_bool_t _dbus_string_init (DBusString *str);
00072 void _dbus_string_init_const (DBusString *str,
00073 const char *value);
00074 void _dbus_string_init_const_len (DBusString *str,
00075 const char *value,
00076 int len);
00077 dbus_bool_t _dbus_string_init_preallocated (DBusString *str,
00078 int allocate_size);
00079 void _dbus_string_free (DBusString *str);
00080 void _dbus_string_lock (DBusString *str);
00081 dbus_bool_t _dbus_string_compact (DBusString *str,
00082 int max_waste);
00083 #ifndef _dbus_string_get_data
00084 char* _dbus_string_get_data (DBusString *str);
00085 #endif
00086 #ifndef _dbus_string_get_const_data
00087 const char* _dbus_string_get_const_data (const DBusString *str);
00088 #endif
00089 char* _dbus_string_get_data_len (DBusString *str,
00090 int start,
00091 int len);
00092 #ifndef _dbus_string_get_const_data_len
00093 const char* _dbus_string_get_const_data_len (const DBusString *str,
00094 int start,
00095 int len);
00096 #endif
00097 #ifndef _dbus_string_set_byte
00098 void _dbus_string_set_byte (DBusString *str,
00099 int i,
00100 unsigned char byte);
00101 #endif
00102 #ifndef _dbus_string_get_byte
00103 unsigned char _dbus_string_get_byte (const DBusString *str,
00104 int start);
00105 #endif
00106 dbus_bool_t _dbus_string_insert_bytes (DBusString *str,
00107 int i,
00108 int n_bytes,
00109 unsigned char byte);
00110 dbus_bool_t _dbus_string_insert_byte (DBusString *str,
00111 int i,
00112 unsigned char byte);
00113 dbus_bool_t _dbus_string_steal_data (DBusString *str,
00114 char **data_return);
00115 dbus_bool_t _dbus_string_steal_data_len (DBusString *str,
00116 char **data_return,
00117 int start,
00118 int len);
00119 dbus_bool_t _dbus_string_copy_data (const DBusString *str,
00120 char **data_return);
00121 dbus_bool_t _dbus_string_copy_data_len (const DBusString *str,
00122 char **data_return,
00123 int start,
00124 int len);
00125 void _dbus_string_copy_to_buffer (const DBusString *str,
00126 char *buffer,
00127 int len);
00128 void _dbus_string_copy_to_buffer_with_nul (const DBusString *str,
00129 char *buffer,
00130 int avail_len);
00131 #ifndef _dbus_string_get_length
00132 int _dbus_string_get_length (const DBusString *str);
00133 #endif
00134
00135 dbus_bool_t _dbus_string_lengthen (DBusString *str,
00136 int additional_length);
00137 void _dbus_string_shorten (DBusString *str,
00138 int length_to_remove);
00139 dbus_bool_t _dbus_string_set_length (DBusString *str,
00140 int length);
00141 dbus_bool_t _dbus_string_align_length (DBusString *str,
00142 int alignment);
00143 dbus_bool_t _dbus_string_alloc_space (DBusString *str,
00144 int extra_bytes);
00145 dbus_bool_t _dbus_string_append (DBusString *str,
00146 const char *buffer);
00147 dbus_bool_t _dbus_string_append_len (DBusString *str,
00148 const char *buffer,
00149 int len);
00150 dbus_bool_t _dbus_string_append_int (DBusString *str,
00151 long value);
00152 dbus_bool_t _dbus_string_append_uint (DBusString *str,
00153 unsigned long value);
00154 dbus_bool_t _dbus_string_append_double (DBusString *str,
00155 double value);
00156 dbus_bool_t _dbus_string_append_byte (DBusString *str,
00157 unsigned char byte);
00158 dbus_bool_t _dbus_string_append_unichar (DBusString *str,
00159 dbus_unichar_t ch);
00160 dbus_bool_t _dbus_string_append_4_aligned (DBusString *str,
00161 const unsigned char octets[4]);
00162 dbus_bool_t _dbus_string_append_8_aligned (DBusString *str,
00163 const unsigned char octets[8]);
00164 dbus_bool_t _dbus_string_append_printf (DBusString *str,
00165 const char *format,
00166 ...) _DBUS_GNUC_PRINTF (2, 3);
00167 dbus_bool_t _dbus_string_append_printf_valist (DBusString *str,
00168 const char *format,
00169 va_list args);
00170 dbus_bool_t _dbus_string_insert_2_aligned (DBusString *str,
00171 int insert_at,
00172 const unsigned char octets[2]);
00173 dbus_bool_t _dbus_string_insert_4_aligned (DBusString *str,
00174 int insert_at,
00175 const unsigned char octets[4]);
00176 dbus_bool_t _dbus_string_insert_8_aligned (DBusString *str,
00177 int insert_at,
00178 const unsigned char octets[8]);
00179 dbus_bool_t _dbus_string_insert_alignment (DBusString *str,
00180 int *insert_at,
00181 int alignment);
00182 void _dbus_string_delete (DBusString *str,
00183 int start,
00184 int len);
00185 dbus_bool_t _dbus_string_move (DBusString *source,
00186 int start,
00187 DBusString *dest,
00188 int insert_at);
00189 dbus_bool_t _dbus_string_copy (const DBusString *source,
00190 int start,
00191 DBusString *dest,
00192 int insert_at);
00193 dbus_bool_t _dbus_string_move_len (DBusString *source,
00194 int start,
00195 int len,
00196 DBusString *dest,
00197 int insert_at);
00198 dbus_bool_t _dbus_string_copy_len (const DBusString *source,
00199 int start,
00200 int len,
00201 DBusString *dest,
00202 int insert_at);
00203 dbus_bool_t _dbus_string_replace_len (const DBusString *source,
00204 int start,
00205 int len,
00206 DBusString *dest,
00207 int replace_at,
00208 int replace_len);
00209 dbus_bool_t _dbus_string_split_on_byte (DBusString *source,
00210 unsigned char byte,
00211 DBusString *tail);
00212 void _dbus_string_get_unichar (const DBusString *str,
00213 int start,
00214 dbus_unichar_t *ch_return,
00215 int *end_return);
00216 dbus_bool_t _dbus_string_parse_int (const DBusString *str,
00217 int start,
00218 long *value_return,
00219 int *end_return);
00220 dbus_bool_t _dbus_string_parse_uint (const DBusString *str,
00221 int start,
00222 unsigned long *value_return,
00223 int *end_return);
00224 dbus_bool_t _dbus_string_parse_double (const DBusString *str,
00225 int start,
00226 double *value,
00227 int *end_return);
00228 dbus_bool_t _dbus_string_find (const DBusString *str,
00229 int start,
00230 const char *substr,
00231 int *found);
00232 dbus_bool_t _dbus_string_find_eol (const DBusString *str,
00233 int start,
00234 int *found,
00235 int *found_len);
00236 dbus_bool_t _dbus_string_find_to (const DBusString *str,
00237 int start,
00238 int end,
00239 const char *substr,
00240 int *found);
00241 dbus_bool_t _dbus_string_find_byte_backward (const DBusString *str,
00242 int start,
00243 unsigned char byte,
00244 int *found);
00245 dbus_bool_t _dbus_string_find_blank (const DBusString *str,
00246 int start,
00247 int *found);
00248 void _dbus_string_skip_blank (const DBusString *str,
00249 int start,
00250 int *end);
00251 void _dbus_string_skip_white (const DBusString *str,
00252 int start,
00253 int *end);
00254 void _dbus_string_skip_white_reverse (const DBusString *str,
00255 int end,
00256 int *start);
00257 dbus_bool_t _dbus_string_equal (const DBusString *a,
00258 const DBusString *b);
00259 dbus_bool_t _dbus_string_equal_c_str (const DBusString *a,
00260 const char *c_str);
00261 dbus_bool_t _dbus_string_equal_len (const DBusString *a,
00262 const DBusString *b,
00263 int len);
00264 dbus_bool_t _dbus_string_equal_substring (const DBusString *a,
00265 int a_start,
00266 int a_len,
00267 const DBusString *b,
00268 int b_start);
00269 dbus_bool_t _dbus_string_starts_with_c_str (const DBusString *a,
00270 const char *c_str);
00271 dbus_bool_t _dbus_string_ends_with_c_str (const DBusString *a,
00272 const char *c_str);
00273 dbus_bool_t _dbus_string_pop_line (DBusString *source,
00274 DBusString *dest);
00275 void _dbus_string_delete_first_word (DBusString *str);
00276 void _dbus_string_delete_leading_blanks (DBusString *str);
00277 void _dbus_string_chop_white (DBusString *str);
00278 dbus_bool_t _dbus_string_append_byte_as_hex (DBusString *str,
00279 int byte);
00280 dbus_bool_t _dbus_string_hex_encode (const DBusString *source,
00281 int start,
00282 DBusString *dest,
00283 int insert_at);
00284 dbus_bool_t _dbus_string_hex_decode (const DBusString *source,
00285 int start,
00286 int *end_return,
00287 DBusString *dest,
00288 int insert_at);
00289 void _dbus_string_tolower_ascii (const DBusString *str,
00290 int start,
00291 int len);
00292 void _dbus_string_toupper_ascii (const DBusString *str,
00293 int start,
00294 int len);
00295 dbus_bool_t _dbus_string_validate_ascii (const DBusString *str,
00296 int start,
00297 int len);
00298 dbus_bool_t _dbus_string_validate_utf8 (const DBusString *str,
00299 int start,
00300 int len);
00301 dbus_bool_t _dbus_string_validate_nul (const DBusString *str,
00302 int start,
00303 int len);
00304 void _dbus_string_zero (DBusString *str);
00305
00306
00312 #define _DBUS_STRING_ALLOCATION_PADDING 8
00313
00321 #define _DBUS_STRING_DEFINE_STATIC(name, str) \
00322 static const char _dbus_static_string_##name[] = str; \
00323 static const DBusString name = { _dbus_static_string_##name, \
00324 sizeof(_dbus_static_string_##name), \
00325 sizeof(_dbus_static_string_##name) + \
00326 _DBUS_STRING_ALLOCATION_PADDING, \
00327 sizeof(_dbus_static_string_##name), \
00328 TRUE, TRUE, FALSE, 0 }
00329
00330 DBUS_END_DECLS
00331
00332 #endif