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 unsigned int dummy_bit1 : 1;
00052 unsigned int dummy_bit2 : 1;
00053 unsigned int dummy_bit3 : 1;
00054 unsigned int dummy_bits : 3;
00055 };
00056
00057 #ifdef DBUS_DISABLE_ASSERT
00058
00059
00060
00061
00062 #define _dbus_string_get_data(s) ((char*)(((DBusString*)(s))->dummy1))
00063 #define _dbus_string_get_length(s) (((DBusString*)(s))->dummy2)
00064 #define _dbus_string_set_byte(s, i, b) ((((unsigned char*)(((DBusString*)(s))->dummy1))[(i)]) = (unsigned char) (b))
00065 #define _dbus_string_get_byte(s, i) (((const unsigned char*)(((DBusString*)(s))->dummy1))[(i)])
00066 #define _dbus_string_get_const_data(s) ((const char*)(((DBusString*)(s))->dummy1))
00067 #define _dbus_string_get_const_data_len(s,start,len) (((const char*)(((DBusString*)(s))->dummy1)) + (start))
00068 #endif
00069
00070 dbus_bool_t _dbus_string_init (DBusString *str);
00071 void _dbus_string_init_const (DBusString *str,
00072 const char *value);
00073 void _dbus_string_init_const_len (DBusString *str,
00074 const char *value,
00075 int len);
00076 dbus_bool_t _dbus_string_init_preallocated (DBusString *str,
00077 int allocate_size);
00078 void _dbus_string_free (DBusString *str);
00079 void _dbus_string_lock (DBusString *str);
00080 dbus_bool_t _dbus_string_compact (DBusString *str,
00081 int max_waste);
00082 #ifndef _dbus_string_get_data
00083 char* _dbus_string_get_data (DBusString *str);
00084 #endif
00085 #ifndef _dbus_string_get_const_data
00086 const char* _dbus_string_get_const_data (const DBusString *str);
00087 #endif
00088 char* _dbus_string_get_data_len (DBusString *str,
00089 int start,
00090 int len);
00091 #ifndef _dbus_string_get_const_data_len
00092 const char* _dbus_string_get_const_data_len (const DBusString *str,
00093 int start,
00094 int len);
00095 #endif
00096 #ifndef _dbus_string_set_byte
00097 void _dbus_string_set_byte (DBusString *str,
00098 int i,
00099 unsigned char byte);
00100 #endif
00101 #ifndef _dbus_string_get_byte
00102 unsigned char _dbus_string_get_byte (const DBusString *str,
00103 int start);
00104 #endif
00105 dbus_bool_t _dbus_string_insert_bytes (DBusString *str,
00106 int i,
00107 int n_bytes,
00108 unsigned char byte);
00109 dbus_bool_t _dbus_string_insert_byte (DBusString *str,
00110 int i,
00111 unsigned char byte);
00112 dbus_bool_t _dbus_string_steal_data (DBusString *str,
00113 char **data_return);
00114 dbus_bool_t _dbus_string_steal_data_len (DBusString *str,
00115 char **data_return,
00116 int start,
00117 int len);
00118 dbus_bool_t _dbus_string_copy_data (const DBusString *str,
00119 char **data_return);
00120 dbus_bool_t _dbus_string_copy_data_len (const DBusString *str,
00121 char **data_return,
00122 int start,
00123 int len);
00124 void _dbus_string_copy_to_buffer (const DBusString *str,
00125 char *buffer,
00126 int len);
00127 void _dbus_string_copy_to_buffer_with_nul (const DBusString *str,
00128 char *buffer,
00129 int avail_len);
00130 #ifndef _dbus_string_get_length
00131 int _dbus_string_get_length (const DBusString *str);
00132 #endif
00133
00134 dbus_bool_t _dbus_string_lengthen (DBusString *str,
00135 int additional_length);
00136 void _dbus_string_shorten (DBusString *str,
00137 int length_to_remove);
00138 dbus_bool_t _dbus_string_set_length (DBusString *str,
00139 int length);
00140 dbus_bool_t _dbus_string_align_length (DBusString *str,
00141 int alignment);
00142 dbus_bool_t _dbus_string_alloc_space (DBusString *str,
00143 int extra_bytes);
00144 dbus_bool_t _dbus_string_append (DBusString *str,
00145 const char *buffer);
00146 dbus_bool_t _dbus_string_append_len (DBusString *str,
00147 const char *buffer,
00148 int len);
00149 dbus_bool_t _dbus_string_append_int (DBusString *str,
00150 long value);
00151 dbus_bool_t _dbus_string_append_uint (DBusString *str,
00152 unsigned long value);
00153 dbus_bool_t _dbus_string_append_byte (DBusString *str,
00154 unsigned char byte);
00155 dbus_bool_t _dbus_string_append_printf (DBusString *str,
00156 const char *format,
00157 ...) _DBUS_GNUC_PRINTF (2, 3);
00158 dbus_bool_t _dbus_string_append_printf_valist (DBusString *str,
00159 const char *format,
00160 va_list args);
00161 dbus_bool_t _dbus_string_insert_2_aligned (DBusString *str,
00162 int insert_at,
00163 const unsigned char octets[2]);
00164 dbus_bool_t _dbus_string_insert_4_aligned (DBusString *str,
00165 int insert_at,
00166 const unsigned char octets[4]);
00167 dbus_bool_t _dbus_string_insert_8_aligned (DBusString *str,
00168 int insert_at,
00169 const unsigned char octets[8]);
00170 dbus_bool_t _dbus_string_insert_alignment (DBusString *str,
00171 int *insert_at,
00172 int alignment);
00173 void _dbus_string_delete (DBusString *str,
00174 int start,
00175 int len);
00176 dbus_bool_t _dbus_string_move (DBusString *source,
00177 int start,
00178 DBusString *dest,
00179 int insert_at);
00180 dbus_bool_t _dbus_string_copy (const DBusString *source,
00181 int start,
00182 DBusString *dest,
00183 int insert_at);
00184 dbus_bool_t _dbus_string_move_len (DBusString *source,
00185 int start,
00186 int len,
00187 DBusString *dest,
00188 int insert_at);
00189 dbus_bool_t _dbus_string_copy_len (const DBusString *source,
00190 int start,
00191 int len,
00192 DBusString *dest,
00193 int insert_at);
00194 dbus_bool_t _dbus_string_replace_len (const DBusString *source,
00195 int start,
00196 int len,
00197 DBusString *dest,
00198 int replace_at,
00199 int replace_len);
00200 dbus_bool_t _dbus_string_split_on_byte (DBusString *source,
00201 unsigned char byte,
00202 DBusString *tail);
00203 dbus_bool_t _dbus_string_parse_int (const DBusString *str,
00204 int start,
00205 long *value_return,
00206 int *end_return);
00207 dbus_bool_t _dbus_string_parse_uint (const DBusString *str,
00208 int start,
00209 unsigned long *value_return,
00210 int *end_return);
00211 dbus_bool_t _dbus_string_find (const DBusString *str,
00212 int start,
00213 const char *substr,
00214 int *found);
00215 dbus_bool_t _dbus_string_find_eol (const DBusString *str,
00216 int start,
00217 int *found,
00218 int *found_len);
00219 dbus_bool_t _dbus_string_find_to (const DBusString *str,
00220 int start,
00221 int end,
00222 const char *substr,
00223 int *found);
00224 dbus_bool_t _dbus_string_find_byte_backward (const DBusString *str,
00225 int start,
00226 unsigned char byte,
00227 int *found);
00228 dbus_bool_t _dbus_string_find_blank (const DBusString *str,
00229 int start,
00230 int *found);
00231 void _dbus_string_skip_blank (const DBusString *str,
00232 int start,
00233 int *end);
00234 void _dbus_string_skip_white (const DBusString *str,
00235 int start,
00236 int *end);
00237 void _dbus_string_skip_white_reverse (const DBusString *str,
00238 int end,
00239 int *start);
00240 dbus_bool_t _dbus_string_equal (const DBusString *a,
00241 const DBusString *b);
00242 dbus_bool_t _dbus_string_equal_c_str (const DBusString *a,
00243 const char *c_str);
00244 dbus_bool_t _dbus_string_equal_len (const DBusString *a,
00245 const DBusString *b,
00246 int len);
00247 dbus_bool_t _dbus_string_equal_substring (const DBusString *a,
00248 int a_start,
00249 int a_len,
00250 const DBusString *b,
00251 int b_start);
00252 dbus_bool_t _dbus_string_starts_with_c_str (const DBusString *a,
00253 const char *c_str);
00254 dbus_bool_t _dbus_string_ends_with_c_str (const DBusString *a,
00255 const char *c_str);
00256 dbus_bool_t _dbus_string_pop_line (DBusString *source,
00257 DBusString *dest);
00258 void _dbus_string_delete_first_word (DBusString *str);
00259 void _dbus_string_delete_leading_blanks (DBusString *str);
00260 void _dbus_string_chop_white (DBusString *str);
00261 dbus_bool_t _dbus_string_append_byte_as_hex (DBusString *str,
00262 int byte);
00263 dbus_bool_t _dbus_string_hex_encode (const DBusString *source,
00264 int start,
00265 DBusString *dest,
00266 int insert_at);
00267 dbus_bool_t _dbus_string_hex_decode (const DBusString *source,
00268 int start,
00269 int *end_return,
00270 DBusString *dest,
00271 int insert_at);
00272 void _dbus_string_tolower_ascii (const DBusString *str,
00273 int start,
00274 int len);
00275 void _dbus_string_toupper_ascii (const DBusString *str,
00276 int start,
00277 int len);
00278 dbus_bool_t _dbus_string_validate_ascii (const DBusString *str,
00279 int start,
00280 int len);
00281 dbus_bool_t _dbus_string_validate_utf8 (const DBusString *str,
00282 int start,
00283 int len);
00284 dbus_bool_t _dbus_string_validate_nul (const DBusString *str,
00285 int start,
00286 int len);
00287 void _dbus_string_zero (DBusString *str);
00288
00289
00295 #define _DBUS_STRING_ALLOCATION_PADDING 8
00296
00304 #define _DBUS_STRING_DEFINE_STATIC(name, str) \
00305 static const char _dbus_static_string_##name[] = str; \
00306 static const DBusString name = { _dbus_static_string_##name, \
00307 sizeof(_dbus_static_string_##name), \
00308 sizeof(_dbus_static_string_##name) + \
00309 _DBUS_STRING_ALLOCATION_PADDING, \
00310 TRUE, TRUE, FALSE, 0 }
00311
00312 DBUS_END_DECLS
00313
00314 #endif