Coverage report for dbus/dbus-signature.c.gcov
-: 0:Source:dbus-signature.c
-: 0:Graph:.libs/dbus-signature.gcno
-: 0:Data:.libs/dbus-signature.gcda
-: 0:Runs:11820
-: 0:Programs:5
-: 1:/* -*- mode: C; c-file-style: "gnu" -*- */
-: 2:/* dbus-signature.c Routines for reading recursive type signatures
-: 3: *
-: 4: * Copyright (C) 2005 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-: 21: *
-: 22: */
-: 23:
-: 24:#include "dbus-signature.h"
-: 25:#include "dbus-marshal-recursive.h"
-: 26:#include "dbus-marshal-basic.h"
-: 27:#include "dbus-internals.h"
-: 28:#include "dbus-test.h"
-: 29:
-: 30:typedef struct
-: 31:{
-: 32: const char *pos;
-: 33: unsigned int finished : 1;
-: 34: unsigned int in_array : 1;
-: 35:} DBusSignatureRealIter;
-: 36:
-: 37:/**
-: 38: * @defgroup DBusSignature Type signature parsing
-: 39: * @ingroup DBus
-: 40: * @brief Parsing D-BUS type signatures
-: 41: * @{
-: 42: */
-: 43:
-: 44:/**
-: 45: * Initializes a #DBusSignatureIter for reading a type signature. This
-: 46: * function is not safe to use on invalid signatures; be sure to
-: 47: * validate potentially invalid signatures with dbus_signature_validate
-: 48: * before using this function.
-: 49: *
-: 50: * @param iter pointer to an iterator to initialize
-: 51: * @param signature the type signature
-: 52: */
-: 53:void
-: 54:dbus_signature_iter_init (DBusSignatureIter *iter,
-: 55: const char *signature)
function dbus_signature_iter_init called 542 returned 100% blocks executed 100%
542: 56:{
542: 57: DBusSignatureRealIter *real_iter = (DBusSignatureRealIter *) iter;
-: 58:
542: 59: real_iter->pos = signature;
542: 60: real_iter->finished = FALSE;
542: 61: real_iter->in_array = FALSE;
542: 62:}
-: 63:
-: 64:/**
-: 65: * Returns the current type pointed to by the iterator.
-: 66: * If the iterator is pointing at a type code such as 's', then
-: 67: * it will be returned directly.
-: 68: *
-: 69: * However, when the parser encounters a container type start
-: 70: * character such as '(' for a structure, the corresponding type for
-: 71: * the container will be returned, e.g. DBUS_TYPE_STRUCT, not '('.
-: 72: * In this case, you should initialize a sub-iterator with
-: 73: * dbus_signature_iter_recurse to parse the container type.
-: 74: *
-: 75: * @param iter pointer to an iterator
-: 76: * @returns current type (e.g. DBUS_TYPE_STRING, DBUS_TYPE_ARRAY)
-: 77: */
-: 78:int
-: 79:dbus_signature_iter_get_current_type (const DBusSignatureIter *iter)
function dbus_signature_iter_get_current_type called 1507 returned 100% blocks executed 100%
1507: 80:{
1507: 81: DBusSignatureRealIter *real_iter = (DBusSignatureRealIter *) iter;
-: 82:
1507: 83: return _dbus_first_type_in_signature_c_str (real_iter->pos, 0);
call 0 returned 100%
-: 84:}
-: 85:
-: 86:/**
-: 87: * Returns the full type signature represented by the current
-: 88: * iterator as a C string.
-: 89: *
-: 90: * @param iter pointer to an iterator
-: 91: * @returns current signature; or NULL on OOM. Should be freed with #dbus_free
-: 92: */
-: 93:char *
-: 94:dbus_signature_iter_get_signature (const DBusSignatureIter *iter)
function dbus_signature_iter_get_signature called 0 returned 0% blocks executed 0%
#####: 95:{
#####: 96: DBusSignatureRealIter *real_iter = (DBusSignatureRealIter *) iter;
-: 97: DBusString str;
-: 98: char *ret;
-: 99: int pos;
-: 100:
#####: 101: if (!_dbus_string_init (&str))
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 102: return NULL;
-: 103:
#####: 104: pos = 0;
#####: 105: _dbus_type_signature_next (real_iter->pos, &pos);
call 0 never executed
-: 106:
#####: 107: if (!_dbus_string_append_len (&str, real_iter->pos, pos))
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 108: return NULL;
#####: 109: if (!_dbus_string_steal_data (&str, &ret))
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 110: ret = NULL;
#####: 111: _dbus_string_free (&str);
call 0 never executed
-: 112:
#####: 113: return ret;
-: 114:}
-: 115:
-: 116:/**
-: 117: * Convenience function for returning the element type of an array;
-: 118: * This function allows you to avoid initializing a sub-iterator and
-: 119: * getting its current type.
-: 120: *
-: 121: * It is an error to invoke this function if the current type of the
-: 122: * iterator is not DBUS_TYPE_ARRAY.
-: 123: *
-: 124: * @param iter pointer to an iterator
-: 125: * @returns current array element type
-: 126: */
-: 127:int
-: 128:dbus_signature_iter_get_element_type (const DBusSignatureIter *iter)
function dbus_signature_iter_get_element_type called 3 returned 100% blocks executed 67%
3: 129:{
3: 130: DBusSignatureRealIter *real_iter = (DBusSignatureRealIter *) iter;
-: 131:
3: 132: _dbus_return_val_if_fail (dbus_signature_iter_get_current_type (iter) == DBUS_TYPE_ARRAY, DBUS_TYPE_INVALID);
call 0 returned 100%
call 1 returned 100%
branch 2 taken 0% (fallthrough)
branch 3 taken 100%
call 4 never executed
call 5 never executed
-: 133:
3: 134: return _dbus_first_type_in_signature_c_str (real_iter->pos, 1);
call 0 returned 100%
-: 135:}
-: 136:
-: 137:/**
-: 138: * Skip to the next value on this "level". e.g. the next field in a
-: 139: * struct, the next value in an array. Returns FALSE at the end of the
-: 140: * current container.
-: 141: *
-: 142: * @param iter the iterator
-: 143: * @returns FALSE if nothing more to read at or below this level
-: 144: */
-: 145:dbus_bool_t
-: 146:dbus_signature_iter_next (DBusSignatureIter *iter)
function dbus_signature_iter_next called 118 returned 100% blocks executed 80%
118: 147:{
118: 148: DBusSignatureRealIter *real_iter = (DBusSignatureRealIter *) iter;
-: 149:
118: 150: if (real_iter->finished)
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
#####: 151: return FALSE;
-: 152: else
-: 153: {
-: 154: int pos;
-: 155:
118: 156: if (real_iter->in_array)
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
-: 157: {
#####: 158: real_iter->finished = TRUE;
#####: 159: return FALSE;
-: 160: }
-: 161:
118: 162: pos = 0;
118: 163: _dbus_type_signature_next (real_iter->pos, &pos);
call 0 returned 100%
118: 164: real_iter->pos += pos;
-: 165:
118: 166: if (*real_iter->pos == DBUS_STRUCT_END_CHAR
branch 0 taken 86% (fallthrough)
branch 1 taken 14%
branch 2 taken 1% (fallthrough)
branch 3 taken 99%
-: 167: || *real_iter->pos == DBUS_DICT_ENTRY_END_CHAR)
-: 168: {
18: 169: real_iter->finished = TRUE;
18: 170: return FALSE;
-: 171: }
-: 172:
100: 173: return *real_iter->pos != DBUS_TYPE_INVALID;
-: 174: }
-: 175:}
-: 176:
-: 177:/**
-: 178: * Initialize a new iterator pointing to the first type current
-: 179: * container. It's an error to call this if the current type is a
-: 180: * non-container (i.e. if dbus_type_is_container returns FALSE).
-: 181: *
-: 182: * @param iter the current interator
-: 183: * @param subiter an iterator to initialize pointing to the first child
-: 184: */
-: 185:void
-: 186:dbus_signature_iter_recurse (const DBusSignatureIter *iter,
-: 187: DBusSignatureIter *subiter)
function dbus_signature_iter_recurse called 238 returned 100% blocks executed 80%
238: 188:{
238: 189: DBusSignatureRealIter *real_iter = (DBusSignatureRealIter *) iter;
238: 190: DBusSignatureRealIter *real_sub_iter = (DBusSignatureRealIter *) subiter;
-: 191:
238: 192: _dbus_return_if_fail (dbus_type_is_container (dbus_signature_iter_get_current_type (iter)));
call 0 returned 100%
call 1 returned 100%
call 2 returned 100%
branch 3 taken 0% (fallthrough)
branch 4 taken 100%
call 5 never executed
call 6 never executed
-: 193:
238: 194: *real_sub_iter = *real_iter;
238: 195: real_sub_iter->in_array = FALSE;
238: 196: real_sub_iter->pos++;
-: 197:
238: 198: if (dbus_signature_iter_get_current_type (iter) == DBUS_TYPE_ARRAY)
call 0 returned 100%
branch 1 taken 65% (fallthrough)
branch 2 taken 35%
155: 199: real_sub_iter->in_array = TRUE;
-: 200:}
-: 201:
-: 202:/**
-: 203: * Check a type signature for validity.
-: 204: *
-: 205: * @param signature a potentially invalid type signature
-: 206: * @param error error return
-: 207: * @returns TRUE iif signature is valid
-: 208: */
-: 209:dbus_bool_t
-: 210:dbus_signature_validate (const char *signature,
-: 211: DBusError *error)
-: 212:
function dbus_signature_validate called 158 returned 100% blocks executed 100%
158: 213:{
-: 214: DBusString str;
-: 215:
158: 216: _dbus_string_init_const (&str, signature);
call 0 returned 100%
158: 217: if (_dbus_validate_signature (&str, 0, _dbus_string_get_length (&str)))
call 0 returned 100%
call 1 returned 100%
branch 2 taken 94% (fallthrough)
branch 3 taken 6%
148: 218: return TRUE;
10: 219: dbus_set_error (error, DBUS_ERROR_INVALID_SIGNATURE, "Corrupt type signature");
call 0 returned 100%
10: 220: return FALSE;
-: 221:}
-: 222:
-: 223:/**
-: 224: * Check that a type signature is both valid and contains exactly
-: 225: * one complete type.
-: 226: *
-: 227: * @param signature a potentially invalid type signature
-: 228: * @param error error return
-: 229: * @returns TRUE iif signature is valid and has exactly one complete type
-: 230: */
-: 231:dbus_bool_t
-: 232:dbus_signature_validate_single (const char *signature,
-: 233: DBusError *error)
function dbus_signature_validate_single called 3 returned 100% blocks executed 92%
3: 234:{
-: 235: DBusSignatureIter iter;
-: 236:
3: 237: if (!dbus_signature_validate (signature, error))
call 0 returned 100%
branch 1 taken 0% (fallthrough)
branch 2 taken 100%
#####: 238: return FALSE;
-: 239:
3: 240: dbus_signature_iter_init (&iter, signature);
call 0 returned 100%
3: 241: if (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_INVALID)
call 0 returned 100%
branch 1 taken 67% (fallthrough)
branch 2 taken 33%
1: 242: goto lose;
2: 243: if (!dbus_signature_iter_next (&iter))
call 0 returned 100%
branch 1 taken 50% (fallthrough)
branch 2 taken 50%
1: 244: return TRUE;
2: 245: lose:
2: 246: dbus_set_error (error, DBUS_ERROR_INVALID_SIGNATURE, "Exactly one complete type required in signature");
call 0 returned 100%
2: 247: return FALSE;
-: 248:}
-: 249:
-: 250:/** macro that checks whether a typecode is a container type */
-: 251:#define TYPE_IS_CONTAINER(typecode) \
-: 252: ((typecode) == DBUS_TYPE_STRUCT || \
-: 253: (typecode) == DBUS_TYPE_DICT_ENTRY || \
-: 254: (typecode) == DBUS_TYPE_VARIANT || \
-: 255: (typecode) == DBUS_TYPE_ARRAY)
-: 256:
-: 257:/**
-: 258: * A "container type" can contain basic types, or nested
-: 259: * container types. #DBUS_TYPE_INVALID is not a container type.
-: 260: * This function will crash if passed a typecode that isn't
-: 261: * in dbus-protocol.h
-: 262: *
-: 263: * @returns #TRUE if type is a container
-: 264: */
-: 265:dbus_bool_t
-: 266:dbus_type_is_container (int typecode)
function dbus_type_is_container called 1315741 returned 100% blocks executed 73%
1315741: 267:{
-: 268: /* only reasonable (non-line-noise) typecodes are allowed */
1315741: 269: _dbus_return_val_if_fail (_dbus_type_is_valid (typecode) || typecode == DBUS_TYPE_INVALID,
call 0 returned 100%
call 1 returned 100%
branch 2 taken 0% (fallthrough)
branch 3 taken 100%
branch 4 never executed
branch 5 never executed
call 6 never executed
call 7 never executed
-: 270: FALSE);
1315741: 271: return TYPE_IS_CONTAINER (typecode);
branch 0 taken 76% (fallthrough)
branch 1 taken 24%
branch 2 taken 99% (fallthrough)
branch 3 taken 1%
branch 4 taken 69% (fallthrough)
branch 5 taken 31%
branch 6 taken 9% (fallthrough)
branch 7 taken 91%
-: 272:}
-: 273:
-: 274:/**
-: 275: * A "basic type" is a somewhat arbitrary concept, but the intent
-: 276: * is to include those types that are fully-specified by a single
-: 277: * typecode, with no additional type information or nested
-: 278: * values. So all numbers and strings are basic types and
-: 279: * structs, arrays, and variants are not basic types.
-: 280: * #DBUS_TYPE_INVALID is not a basic type.
-: 281: *
-: 282: * This function will crash if passed a typecode that isn't
-: 283: * in dbus-protocol.h
-: 284: *
-: 285: * @returns #TRUE if type is basic
-: 286: */
-: 287:dbus_bool_t
-: 288:dbus_type_is_basic (int typecode)
function dbus_type_is_basic called 11529477 returned 100% blocks executed 75%
11529477: 289:{
-: 290: /* only reasonable (non-line-noise) typecodes are allowed */
11529477: 291: _dbus_return_val_if_fail (_dbus_type_is_valid (typecode) || typecode == DBUS_TYPE_INVALID,
call 0 returned 100%
call 1 returned 100%
branch 2 taken 0% (fallthrough)
branch 3 taken 100%
branch 4 never executed
branch 5 never executed
call 6 never executed
call 7 never executed
-: 292: FALSE);
-: 293:
-: 294: /* everything that isn't invalid or a container */
11529477: 295: return !(typecode == DBUS_TYPE_INVALID || TYPE_IS_CONTAINER (typecode));
branch 0 taken 100% (fallthrough)
branch 1 taken 0%
branch 2 taken 99% (fallthrough)
branch 3 taken 1%
branch 4 taken 99% (fallthrough)
branch 5 taken 1%
branch 6 taken 99% (fallthrough)
branch 7 taken 1%
branch 8 taken 99% (fallthrough)
branch 9 taken 1%
-: 296:}
-: 297:
-: 298:/**
-: 299: * Tells you whether values of this type can change length if you set
-: 300: * them to some other value. For this purpose, you assume that the
-: 301: * first byte of the old and new value would be in the same location,
-: 302: * so alignment padding is not a factor.
-: 303: *
-: 304: * This function is useful to determine whether #dbus_message_iter_get_fixed_array
-: 305: * may be used.
-: 306: *
-: 307: * @returns #FALSE if the type can occupy different lengths
-: 308: */
-: 309:dbus_bool_t
-: 310:dbus_type_is_fixed (int typecode)
function dbus_type_is_fixed called 67112 returned 100% blocks executed 100%
67112: 311:{
67112: 312: switch (typecode)
branch 0 taken 5%
branch 1 taken 95%
-: 313: {
-: 314: case DBUS_TYPE_BYTE:
-: 315: case DBUS_TYPE_BOOLEAN:
-: 316: case DBUS_TYPE_INT16:
-: 317: case DBUS_TYPE_UINT16:
-: 318: case DBUS_TYPE_INT32:
-: 319: case DBUS_TYPE_UINT32:
-: 320: case DBUS_TYPE_INT64:
-: 321: case DBUS_TYPE_UINT64:
-: 322: case DBUS_TYPE_DOUBLE:
3589: 323: return TRUE;
-: 324: default:
63523: 325: return FALSE;
-: 326: }
-: 327:}
-: 328:
-: 329:#ifdef DBUS_BUILD_TESTS
-: 330:
-: 331:/**
-: 332: * @ingroup DBusSignatureInternals
-: 333: * Unit test for DBusSignature.
-: 334: *
-: 335: * @returns #TRUE on success.
-: 336: */
-: 337:dbus_bool_t
-: 338:_dbus_signature_test (void)
function _dbus_signature_test called 1 returned 100% blocks executed 100%
1: 339:{
-: 340: DBusSignatureIter iter;
-: 341: DBusSignatureIter subiter;
-: 342: DBusSignatureIter subsubiter;
-: 343: DBusSignatureIter subsubsubiter;
-: 344: const char *sig;
-: 345:
1: 346: _dbus_assert (sizeof (DBusSignatureIter) >= sizeof (DBusSignatureRealIter));
call 0 returned 100%
-: 347:
1: 348: sig = "";
1: 349: _dbus_assert (dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
1: 350: _dbus_assert (!dbus_signature_validate_single (sig, NULL));
call 0 returned 100%
call 1 returned 100%
1: 351: dbus_signature_iter_init (&iter, sig);
call 0 returned 100%
1: 352: _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_INVALID);
call 0 returned 100%
call 1 returned 100%
-: 353:
1: 354: sig = DBUS_TYPE_STRING_AS_STRING;
1: 355: _dbus_assert (dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
1: 356: _dbus_assert (dbus_signature_validate_single (sig, NULL));
call 0 returned 100%
call 1 returned 100%
1: 357: dbus_signature_iter_init (&iter, sig);
call 0 returned 100%
1: 358: _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_STRING);
call 0 returned 100%
call 1 returned 100%
-: 359:
1: 360: sig = DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_BYTE_AS_STRING;
1: 361: _dbus_assert (dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
1: 362: dbus_signature_iter_init (&iter, sig);
call 0 returned 100%
1: 363: _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_STRING);
call 0 returned 100%
call 1 returned 100%
1: 364: _dbus_assert (dbus_signature_iter_next (&iter));
call 0 returned 100%
call 1 returned 100%
1: 365: _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_BYTE);
call 0 returned 100%
call 1 returned 100%
-: 366:
1: 367: sig = DBUS_TYPE_UINT16_AS_STRING
-: 368: DBUS_STRUCT_BEGIN_CHAR_AS_STRING
-: 369: DBUS_TYPE_STRING_AS_STRING
-: 370: DBUS_TYPE_UINT32_AS_STRING
-: 371: DBUS_TYPE_VARIANT_AS_STRING
-: 372: DBUS_TYPE_DOUBLE_AS_STRING
-: 373: DBUS_STRUCT_END_CHAR_AS_STRING;
1: 374: _dbus_assert (dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
1: 375: dbus_signature_iter_init (&iter, sig);
call 0 returned 100%
1: 376: _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_UINT16);
call 0 returned 100%
call 1 returned 100%
1: 377: _dbus_assert (dbus_signature_iter_next (&iter));
call 0 returned 100%
call 1 returned 100%
1: 378: _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_STRUCT);
call 0 returned 100%
call 1 returned 100%
1: 379: dbus_signature_iter_recurse (&iter, &subiter);
call 0 returned 100%
1: 380: _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_STRING);
call 0 returned 100%
call 1 returned 100%
1: 381: _dbus_assert (dbus_signature_iter_next (&subiter));
call 0 returned 100%
call 1 returned 100%
1: 382: _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_UINT32);
call 0 returned 100%
call 1 returned 100%
1: 383: _dbus_assert (dbus_signature_iter_next (&subiter));
call 0 returned 100%
call 1 returned 100%
1: 384: _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_VARIANT);
call 0 returned 100%
call 1 returned 100%
1: 385: _dbus_assert (dbus_signature_iter_next (&subiter));
call 0 returned 100%
call 1 returned 100%
1: 386: _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_DOUBLE);
call 0 returned 100%
call 1 returned 100%
-: 387:
1: 388: sig = DBUS_TYPE_UINT16_AS_STRING
-: 389: DBUS_STRUCT_BEGIN_CHAR_AS_STRING
-: 390: DBUS_TYPE_UINT32_AS_STRING
-: 391: DBUS_TYPE_BYTE_AS_STRING
-: 392: DBUS_TYPE_ARRAY_AS_STRING
-: 393: DBUS_TYPE_ARRAY_AS_STRING
-: 394: DBUS_TYPE_DOUBLE_AS_STRING
-: 395: DBUS_STRUCT_BEGIN_CHAR_AS_STRING
-: 396: DBUS_TYPE_BYTE_AS_STRING
-: 397: DBUS_STRUCT_END_CHAR_AS_STRING
-: 398: DBUS_STRUCT_END_CHAR_AS_STRING;
1: 399: _dbus_assert (dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
1: 400: dbus_signature_iter_init (&iter, sig);
call 0 returned 100%
1: 401: _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_UINT16);
call 0 returned 100%
call 1 returned 100%
1: 402: _dbus_assert (dbus_signature_iter_next (&iter));
call 0 returned 100%
call 1 returned 100%
1: 403: _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_STRUCT);
call 0 returned 100%
call 1 returned 100%
1: 404: dbus_signature_iter_recurse (&iter, &subiter);
call 0 returned 100%
1: 405: _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_UINT32);
call 0 returned 100%
call 1 returned 100%
1: 406: _dbus_assert (dbus_signature_iter_next (&subiter));
call 0 returned 100%
call 1 returned 100%
1: 407: _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_BYTE);
call 0 returned 100%
call 1 returned 100%
1: 408: _dbus_assert (dbus_signature_iter_next (&subiter));
call 0 returned 100%
call 1 returned 100%
1: 409: _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_ARRAY);
call 0 returned 100%
call 1 returned 100%
1: 410: _dbus_assert (dbus_signature_iter_get_element_type (&subiter) == DBUS_TYPE_ARRAY);
call 0 returned 100%
call 1 returned 100%
-: 411:
1: 412: dbus_signature_iter_recurse (&subiter, &subsubiter);
call 0 returned 100%
1: 413: _dbus_assert (dbus_signature_iter_get_current_type (&subsubiter) == DBUS_TYPE_ARRAY);
call 0 returned 100%
call 1 returned 100%
1: 414: _dbus_assert (dbus_signature_iter_get_element_type (&subsubiter) == DBUS_TYPE_DOUBLE);
call 0 returned 100%
call 1 returned 100%
-: 415:
1: 416: dbus_signature_iter_recurse (&subsubiter, &subsubsubiter);
call 0 returned 100%
1: 417: _dbus_assert (dbus_signature_iter_get_current_type (&subsubsubiter) == DBUS_TYPE_DOUBLE);
call 0 returned 100%
call 1 returned 100%
1: 418: _dbus_assert (dbus_signature_iter_next (&subiter));
call 0 returned 100%
call 1 returned 100%
1: 419: _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_STRUCT);
call 0 returned 100%
call 1 returned 100%
1: 420: dbus_signature_iter_recurse (&subiter, &subsubiter);
call 0 returned 100%
1: 421: _dbus_assert (dbus_signature_iter_get_current_type (&subsubiter) == DBUS_TYPE_BYTE);
call 0 returned 100%
call 1 returned 100%
-: 422:
1: 423: sig = DBUS_TYPE_ARRAY_AS_STRING
-: 424: DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
-: 425: DBUS_TYPE_INT16_AS_STRING
-: 426: DBUS_TYPE_STRING_AS_STRING
-: 427: DBUS_DICT_ENTRY_END_CHAR_AS_STRING
-: 428: DBUS_TYPE_VARIANT_AS_STRING;
1: 429: _dbus_assert (dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
1: 430: _dbus_assert (!dbus_signature_validate_single (sig, NULL));
call 0 returned 100%
call 1 returned 100%
1: 431: dbus_signature_iter_init (&iter, sig);
call 0 returned 100%
1: 432: _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_ARRAY);
call 0 returned 100%
call 1 returned 100%
1: 433: _dbus_assert (dbus_signature_iter_get_element_type (&iter) == DBUS_TYPE_DICT_ENTRY);
call 0 returned 100%
call 1 returned 100%
-: 434:
1: 435: dbus_signature_iter_recurse (&iter, &subiter);
call 0 returned 100%
1: 436: dbus_signature_iter_recurse (&subiter, &subsubiter);
call 0 returned 100%
1: 437: _dbus_assert (dbus_signature_iter_get_current_type (&subsubiter) == DBUS_TYPE_INT16);
call 0 returned 100%
call 1 returned 100%
1: 438: _dbus_assert (dbus_signature_iter_next (&subsubiter));
call 0 returned 100%
call 1 returned 100%
1: 439: _dbus_assert (dbus_signature_iter_get_current_type (&subsubiter) == DBUS_TYPE_STRING);
call 0 returned 100%
call 1 returned 100%
1: 440: _dbus_assert (!dbus_signature_iter_next (&subsubiter));
call 0 returned 100%
call 1 returned 100%
-: 441:
1: 442: _dbus_assert (dbus_signature_iter_next (&iter));
call 0 returned 100%
call 1 returned 100%
1: 443: _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_VARIANT);
call 0 returned 100%
call 1 returned 100%
1: 444: _dbus_assert (!dbus_signature_iter_next (&iter));
call 0 returned 100%
call 1 returned 100%
-: 445:
1: 446: sig = DBUS_TYPE_DICT_ENTRY_AS_STRING;
1: 447: _dbus_assert (!dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
-: 448:
1: 449: sig = DBUS_TYPE_ARRAY_AS_STRING;
1: 450: _dbus_assert (!dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
-: 451:
1: 452: sig = DBUS_TYPE_UINT32_AS_STRING
-: 453: DBUS_TYPE_ARRAY_AS_STRING;
1: 454: _dbus_assert (!dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
-: 455:
1: 456: sig = DBUS_TYPE_ARRAY_AS_STRING
-: 457: DBUS_TYPE_DICT_ENTRY_AS_STRING;
1: 458: _dbus_assert (!dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
-: 459:
1: 460: sig = DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING;
1: 461: _dbus_assert (!dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
-: 462:
1: 463: sig = DBUS_DICT_ENTRY_END_CHAR_AS_STRING;
1: 464: _dbus_assert (!dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
-: 465:
1: 466: sig = DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
-: 467: DBUS_TYPE_INT32_AS_STRING;
1: 468: _dbus_assert (!dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
-: 469:
1: 470: sig = DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
-: 471: DBUS_TYPE_INT32_AS_STRING
-: 472: DBUS_TYPE_STRING_AS_STRING;
1: 473: _dbus_assert (!dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
-: 474:
1: 475: sig = DBUS_STRUCT_END_CHAR_AS_STRING
-: 476: DBUS_STRUCT_BEGIN_CHAR_AS_STRING;
1: 477: _dbus_assert (!dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
-: 478:
1: 479: sig = DBUS_STRUCT_BEGIN_CHAR_AS_STRING
-: 480: DBUS_TYPE_BOOLEAN_AS_STRING;
1: 481: _dbus_assert (!dbus_signature_validate (sig, NULL));
call 0 returned 100%
call 1 returned 100%
1: 482: return TRUE;
-: 483:#if 0
-: 484: oom:
-: 485: _dbus_assert_not_reached ("out of memory");
-: 486: return FALSE;
-: 487:#endif
-: 488:}
-: 489:
-: 490:#endif
-: 491:
-: 492:/** @} */ /* end of DBusSignature group */
-: 493: