|
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17 System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64 User : nobody ( 99) PHP Version : 5.2.17 Disable Function : NONE Directory : /proc/21573/root/usr/share/devhelp/books/dbus/api/ |
Upload File : |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>D-Bus: dbus-marshal-recursive.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data Structures</span></a></li>
<li id="current"><a href="files.html"><span>Files</span></a></li>
<li><a href="pages.html"><span>Related Pages</span></a></li>
</ul></div>
<h1>dbus-marshal-recursive.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */</span>
<a name="l00002"></a>00002 <span class="comment">/* dbus-marshal-recursive.c Marshalling routines for recursive types</span>
<a name="l00003"></a>00003 <span class="comment"> *</span>
<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2004, 2005 Red Hat, Inc.</span>
<a name="l00005"></a>00005 <span class="comment"> *</span>
<a name="l00006"></a>00006 <span class="comment"> * Licensed under the Academic Free License version 2.1</span>
<a name="l00007"></a>00007 <span class="comment"> *</span>
<a name="l00008"></a>00008 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
<a name="l00009"></a>00009 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
<a name="l00010"></a>00010 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
<a name="l00011"></a>00011 <span class="comment"> * (at your option) any later version.</span>
<a name="l00012"></a>00012 <span class="comment"> *</span>
<a name="l00013"></a>00013 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
<a name="l00014"></a>00014 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00015"></a>00015 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<a name="l00016"></a>00016 <span class="comment"> * GNU General Public License for more details.</span>
<a name="l00017"></a>00017 <span class="comment"> *</span>
<a name="l00018"></a>00018 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
<a name="l00019"></a>00019 <span class="comment"> * along with this program; if not, write to the Free Software</span>
<a name="l00020"></a>00020 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span>
<a name="l00021"></a>00021 <span class="comment"> *</span>
<a name="l00022"></a>00022 <span class="comment"> */</span>
<a name="l00023"></a>00023
<a name="l00024"></a>00024 <span class="preprocessor">#include "dbus-marshal-recursive.h"</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "dbus-marshal-basic.h"</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "dbus-signature.h"</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "dbus-internals.h"</span>
<a name="l00028"></a>00028
<a name="l00035"></a><a class="code" href="group__DBusMarshal.html#g2055dc20f1e0c13064cebf1fb65b8ce8">00035</a> <span class="preprocessor">#define RECURSIVE_MARSHAL_READ_TRACE 0</span>
<a name="l00036"></a>00036 <span class="preprocessor"></span>
<a name="l00038"></a><a class="code" href="group__DBusMarshal.html#g428a18f23d9a4c59560f03fd2088fe7f">00038</a> <span class="preprocessor">#define RECURSIVE_MARSHAL_WRITE_TRACE 0</span>
<a name="l00039"></a>00039 <span class="preprocessor"></span>
<a name="l00040"></a>00040 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00041"></a>00041 free_fixups (<a class="code" href="structDBusList.html">DBusList</a> **fixups)
<a name="l00042"></a>00042 {
<a name="l00043"></a>00043 <a class="code" href="structDBusList.html">DBusList</a> *link;
<a name="l00044"></a>00044
<a name="l00045"></a>00045 link = <a class="code" href="group__DBusList.html#g1e26ce4fb4acb50593bd5ed2f4eeb3ae">_dbus_list_get_first_link</a> (fixups);
<a name="l00046"></a>00046 <span class="keywordflow">while</span> (link != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00047"></a>00047 {
<a name="l00048"></a>00048 <a class="code" href="structDBusList.html">DBusList</a> *next;
<a name="l00049"></a>00049
<a name="l00050"></a>00050 next = <a class="code" href="group__DBusList.html#gede4ace46d5ee497d75074bfec4490a2">_dbus_list_get_next_link</a> (fixups, link);
<a name="l00051"></a>00051
<a name="l00052"></a>00052 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (link-><a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>);
<a name="l00053"></a>00053 <a class="code" href="group__DBusList.html#g6e824f717125ce40c549d5402e32610f">_dbus_list_free_link</a> (link);
<a name="l00054"></a>00054
<a name="l00055"></a>00055 link = next;
<a name="l00056"></a>00056 }
<a name="l00057"></a>00057
<a name="l00058"></a>00058 *fixups = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l00059"></a>00059 }
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00062"></a>00062 apply_and_free_fixups (<a class="code" href="structDBusList.html">DBusList</a> **fixups,
<a name="l00063"></a>00063 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader)
<a name="l00064"></a>00064 {
<a name="l00065"></a>00065 <a class="code" href="structDBusList.html">DBusList</a> *link;
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l00068"></a>00068 <span class="preprocessor"></span> <span class="keywordflow">if</span> (*fixups)
<a name="l00069"></a>00069 _dbus_verbose (<span class="stringliteral">" %d FIXUPS to apply\n"</span>,
<a name="l00070"></a>00070 <a class="code" href="group__DBusList.html#ga2144a5489bb35b16b2b671488ad597c">_dbus_list_get_length</a> (fixups));
<a name="l00071"></a>00071 <span class="preprocessor">#endif</span>
<a name="l00072"></a>00072 <span class="preprocessor"></span>
<a name="l00073"></a>00073 link = <a class="code" href="group__DBusList.html#g1e26ce4fb4acb50593bd5ed2f4eeb3ae">_dbus_list_get_first_link</a> (fixups);
<a name="l00074"></a>00074 <span class="keywordflow">while</span> (link != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00075"></a>00075 {
<a name="l00076"></a>00076 <a class="code" href="structDBusList.html">DBusList</a> *next;
<a name="l00077"></a>00077
<a name="l00078"></a>00078 next = <a class="code" href="group__DBusList.html#gede4ace46d5ee497d75074bfec4490a2">_dbus_list_get_next_link</a> (fixups, link);
<a name="l00079"></a>00079
<a name="l00080"></a>00080 <span class="keywordflow">if</span> (reader)
<a name="l00081"></a>00081 {
<a name="l00082"></a>00082 <a class="code" href="structDBusArrayLenFixup.html">DBusArrayLenFixup</a> *f;
<a name="l00083"></a>00083
<a name="l00084"></a>00084 f = link-><a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>;
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l00087"></a>00087 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" applying FIXUP to reader %p at pos %d new_len = %d old len %d\n"</span>,
<a name="l00088"></a>00088 reader, f-><a class="code" href="structDBusArrayLenFixup.html#ad03f6087695c9e9b409817ac34c6e2b">len_pos_in_reader</a>, f-><a class="code" href="structDBusArrayLenFixup.html#97cccea61d89992e6ad3a19bd569dd2f">new_len</a>,
<a name="l00089"></a>00089 <a class="code" href="group__DBusMarshal.html#g6dd82a202c19758cbf76dbed2946615d">_dbus_marshal_read_uint32</a> (reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>,
<a name="l00090"></a>00090 f-><a class="code" href="structDBusArrayLenFixup.html#ad03f6087695c9e9b409817ac34c6e2b">len_pos_in_reader</a>,
<a name="l00091"></a>00091 reader-><a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>));
<a name="l00092"></a>00092 <span class="preprocessor">#endif</span>
<a name="l00093"></a>00093 <span class="preprocessor"></span>
<a name="l00094"></a>00094 <a class="code" href="group__DBusMarshal.html#g4bcfb6a664c7e46c7ffc31f96d532a02">_dbus_marshal_set_uint32</a> ((<a class="code" href="structDBusString.html">DBusString</a>*) reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>,
<a name="l00095"></a>00095 f-><a class="code" href="structDBusArrayLenFixup.html#ad03f6087695c9e9b409817ac34c6e2b">len_pos_in_reader</a>,
<a name="l00096"></a>00096 f-><a class="code" href="structDBusArrayLenFixup.html#97cccea61d89992e6ad3a19bd569dd2f">new_len</a>,
<a name="l00097"></a>00097 reader-><a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a>);
<a name="l00098"></a>00098 }
<a name="l00099"></a>00099
<a name="l00100"></a>00100 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (link-><a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>);
<a name="l00101"></a>00101 <a class="code" href="group__DBusList.html#g6e824f717125ce40c549d5402e32610f">_dbus_list_free_link</a> (link);
<a name="l00102"></a>00102
<a name="l00103"></a>00103 link = next;
<a name="l00104"></a>00104 }
<a name="l00105"></a>00105
<a name="l00106"></a>00106 *fixups = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l00107"></a>00107 }
<a name="l00108"></a>00108
<a name="l00112"></a><a class="code" href="structDBusTypeReaderClass.html">00112</a> <span class="keyword">struct </span><a class="code" href="structDBusTypeReaderClass.html">DBusTypeReaderClass</a>
<a name="l00113"></a>00113 {
<a name="l00114"></a><a class="code" href="structDBusTypeReaderClass.html#fd813c32ff4b8b96266efe392dc25a89">00114</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structDBusTypeReaderClass.html#fd813c32ff4b8b96266efe392dc25a89">name</a>;
<a name="l00115"></a><a class="code" href="structDBusTypeReaderClass.html#7cd297c0e03c5204bc41bf305c7688c9">00115</a> <span class="keywordtype">int</span> <a class="code" href="structDBusTypeReaderClass.html#7cd297c0e03c5204bc41bf305c7688c9">id</a>;
<a name="l00116"></a><a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">00116</a> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> <a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">types_only</a>;
<a name="l00117"></a>00117 void (* <a class="code" href="structDBusTypeReaderClass.html#be8f7f4433f8c8eaf0c5f8d445101391">recurse</a>) (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *sub,
<a name="l00118"></a>00118 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *parent);
<a name="l00119"></a>00119 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> (* <a class="code" href="structDBusTypeReaderClass.html#023bc5274f7bf1f45f29822aebae96a1">check_finished</a>) (<span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader);
<a name="l00120"></a>00120 void (* <a class="code" href="structDBusTypeReaderClass.html#1b4a87e6f61339456f2e8d0ce873f379">next</a>) (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l00121"></a>00121 <span class="keywordtype">int</span> current_type);
<a name="l00122"></a>00122 };
<a name="l00123"></a>00123
<a name="l00124"></a>00124 <span class="keyword">static</span> <span class="keywordtype">int</span>
<a name="l00125"></a>00125 element_type_get_alignment (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00126"></a>00126 <span class="keywordtype">int</span> pos)
<a name="l00127"></a>00127 {
<a name="l00128"></a>00128 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g2ba80f227880e442c140bc67653b0abd">_dbus_type_get_alignment</a> (<a class="code" href="group__DBusMarshal.html#g5866a0fd058aed3396402d0456144fd2">_dbus_first_type_in_signature</a> (str, pos));
<a name="l00129"></a>00129 }
<a name="l00130"></a>00130
<a name="l00131"></a>00131 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00132"></a>00132 reader_init (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l00133"></a>00133 <span class="keywordtype">int</span> byte_order,
<a name="l00134"></a>00134 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *type_str,
<a name="l00135"></a>00135 <span class="keywordtype">int</span> type_pos,
<a name="l00136"></a>00136 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *value_str,
<a name="l00137"></a>00137 <span class="keywordtype">int</span> value_pos)
<a name="l00138"></a>00138 {
<a name="l00139"></a>00139 reader-><a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a> = byte_order;
<a name="l00140"></a>00140 reader-><a class="code" href="structDBusTypeReader.html#551e64ee83df38ebda8c3677a91afe1b">finished</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00141"></a>00141 reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a> = type_str;
<a name="l00142"></a>00142 reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a> = type_pos;
<a name="l00143"></a>00143 reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a> = value_str;
<a name="l00144"></a>00144 reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> = value_pos;
<a name="l00145"></a>00145 }
<a name="l00146"></a>00146
<a name="l00147"></a>00147 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00148"></a>00148 base_reader_recurse (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *sub,
<a name="l00149"></a>00149 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *parent)
<a name="l00150"></a>00150 {
<a name="l00151"></a>00151 <span class="comment">/* point subreader at the same place as parent */</span>
<a name="l00152"></a>00152 reader_init (sub,
<a name="l00153"></a>00153 parent-><a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a>,
<a name="l00154"></a>00154 parent-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l00155"></a>00155 parent-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>,
<a name="l00156"></a>00156 parent-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>,
<a name="l00157"></a>00157 parent-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>);
<a name="l00158"></a>00158 }
<a name="l00159"></a>00159
<a name="l00160"></a>00160 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00161"></a>00161 struct_or_dict_entry_types_only_reader_recurse (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *sub,
<a name="l00162"></a>00162 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *parent)
<a name="l00163"></a>00163 {
<a name="l00164"></a>00164 base_reader_recurse (sub, parent);
<a name="l00165"></a>00165
<a name="l00166"></a>00166 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (_dbus_string_get_byte (sub-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l00167"></a>00167 sub-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>) == <a class="code" href="group__DBusProtocol.html#g725657eca93175475e0694b858f51fd6">DBUS_STRUCT_BEGIN_CHAR</a> ||
<a name="l00168"></a>00168 _dbus_string_get_byte (sub-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l00169"></a>00169 sub-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>) == <a class="code" href="group__DBusProtocol.html#gd51b5f7a2e6d927295479dd371f6b353">DBUS_DICT_ENTRY_BEGIN_CHAR</a>);
<a name="l00170"></a>00170
<a name="l00171"></a>00171 sub-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a> += 1;
<a name="l00172"></a>00172 }
<a name="l00173"></a>00173
<a name="l00174"></a>00174 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00175"></a>00175 struct_or_dict_entry_reader_recurse (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *sub,
<a name="l00176"></a>00176 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *parent)
<a name="l00177"></a>00177 {
<a name="l00178"></a>00178 struct_or_dict_entry_types_only_reader_recurse (sub, parent);
<a name="l00179"></a>00179
<a name="l00180"></a>00180 <span class="comment">/* struct and dict entry have 8 byte alignment */</span>
<a name="l00181"></a>00181 sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> = _DBUS_ALIGN_VALUE (sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>, 8);
<a name="l00182"></a>00182 }
<a name="l00183"></a>00183
<a name="l00184"></a>00184 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00185"></a>00185 array_types_only_reader_recurse (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *sub,
<a name="l00186"></a>00186 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *parent)
<a name="l00187"></a>00187 {
<a name="l00188"></a>00188 base_reader_recurse (sub, parent);
<a name="l00189"></a>00189
<a name="l00190"></a>00190 <span class="comment">/* point type_pos at the array element type */</span>
<a name="l00191"></a>00191 sub-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a> += 1;
<a name="l00192"></a>00192
<a name="l00193"></a>00193 <span class="comment">/* Init with values likely to crash things if misused */</span>
<a name="l00194"></a>00194 sub-><a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos = <a class="code" href="group__DBusInternalsUtils.html#g5627db5e165848477e620846f6414db1">_DBUS_INT_MAX</a>;
<a name="l00195"></a>00195 sub-><a class="code" href="structDBusTypeReader.html#930fb8d6c82f269b0a151cfb33df86b3">array_len_offset</a> = 7;
<a name="l00196"></a>00196 }
<a name="l00197"></a>00197
<a name="l00200"></a><a class="code" href="group__DBusMarshal.html#gcca774d24b7d7e790b169f23d3362497">00200</a> <span class="preprocessor">#define ARRAY_READER_LEN_POS(reader) \</span>
<a name="l00201"></a>00201 <span class="preprocessor"> ((reader)->u.array.start_pos - ((int)(reader)->array_len_offset) - 4)</span>
<a name="l00202"></a>00202 <span class="preprocessor"></span>
<a name="l00203"></a>00203 <span class="keyword">static</span> <span class="keywordtype">int</span>
<a name="l00204"></a>00204 array_reader_get_array_len (<span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader)
<a name="l00205"></a>00205 {
<a name="l00206"></a>00206 <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> array_len;
<a name="l00207"></a>00207 <span class="keywordtype">int</span> len_pos;
<a name="l00208"></a>00208
<a name="l00209"></a>00209 len_pos = <a class="code" href="group__DBusMarshal.html#gcca774d24b7d7e790b169f23d3362497">ARRAY_READER_LEN_POS</a> (reader);
<a name="l00210"></a>00210
<a name="l00211"></a>00211 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (_DBUS_ALIGN_VALUE (len_pos, 4) == (<span class="keywordtype">unsigned</span>) len_pos);
<a name="l00212"></a>00212 array_len = _dbus_unpack_uint32 (reader-><a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a>,
<a name="l00213"></a>00213 _dbus_string_get_const_data_len (reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>, len_pos, 4));
<a name="l00214"></a>00214
<a name="l00215"></a>00215 <span class="preprocessor">#if RECURSIVE_MARSHAL_READ_TRACE</span>
<a name="l00216"></a>00216 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" reader %p len_pos %d array len %u len_offset %d\n"</span>,
<a name="l00217"></a>00217 reader, len_pos, array_len, reader-><a class="code" href="structDBusTypeReader.html#930fb8d6c82f269b0a151cfb33df86b3">array_len_offset</a>);
<a name="l00218"></a>00218 <span class="preprocessor">#endif</span>
<a name="l00219"></a>00219 <span class="preprocessor"></span>
<a name="l00220"></a>00220 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (reader-><a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos - len_pos - 4 < 8);
<a name="l00221"></a>00221
<a name="l00222"></a>00222 <span class="keywordflow">return</span> array_len;
<a name="l00223"></a>00223 }
<a name="l00224"></a>00224
<a name="l00225"></a>00225 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00226"></a>00226 array_reader_recurse (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *sub,
<a name="l00227"></a>00227 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *parent)
<a name="l00228"></a>00228 {
<a name="l00229"></a>00229 <span class="keywordtype">int</span> alignment;
<a name="l00230"></a>00230 <span class="keywordtype">int</span> len_pos;
<a name="l00231"></a>00231
<a name="l00232"></a>00232 array_types_only_reader_recurse (sub, parent);
<a name="l00233"></a>00233
<a name="l00234"></a>00234 sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> = _DBUS_ALIGN_VALUE (sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>, 4);
<a name="l00235"></a>00235
<a name="l00236"></a>00236 len_pos = sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>;
<a name="l00237"></a>00237
<a name="l00238"></a>00238 sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> += 4; <span class="comment">/* for the length */</span>
<a name="l00239"></a>00239
<a name="l00240"></a>00240 alignment = element_type_get_alignment (sub-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l00241"></a>00241 sub-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>);
<a name="l00242"></a>00242
<a name="l00243"></a>00243 sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> = _DBUS_ALIGN_VALUE (sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>, alignment);
<a name="l00244"></a>00244
<a name="l00245"></a>00245 sub-><a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos = sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>;
<a name="l00246"></a>00246 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> ((sub-><a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos - (len_pos + 4)) < 8); <span class="comment">/* only 3 bits in array_len_offset */</span>
<a name="l00247"></a>00247 sub-><a class="code" href="structDBusTypeReader.html#930fb8d6c82f269b0a151cfb33df86b3">array_len_offset</a> = sub-><a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos - (len_pos + 4);
<a name="l00248"></a>00248
<a name="l00249"></a>00249 <span class="preprocessor">#if RECURSIVE_MARSHAL_READ_TRACE</span>
<a name="l00250"></a>00250 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type reader %p array start = %d len_offset = %d array len = %d array element type = %s\n"</span>,
<a name="l00251"></a>00251 sub,
<a name="l00252"></a>00252 sub-><a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos,
<a name="l00253"></a>00253 sub-><a class="code" href="structDBusTypeReader.html#930fb8d6c82f269b0a151cfb33df86b3">array_len_offset</a>,
<a name="l00254"></a>00254 array_reader_get_array_len (sub),
<a name="l00255"></a>00255 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (<a class="code" href="group__DBusMarshal.html#g5866a0fd058aed3396402d0456144fd2">_dbus_first_type_in_signature</a> (sub-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l00256"></a>00256 sub-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>)));
<a name="l00257"></a>00257 <span class="preprocessor">#endif</span>
<a name="l00258"></a>00258 <span class="preprocessor"></span>}
<a name="l00259"></a>00259
<a name="l00260"></a>00260 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00261"></a>00261 variant_reader_recurse (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *sub,
<a name="l00262"></a>00262 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *parent)
<a name="l00263"></a>00263 {
<a name="l00264"></a>00264 <span class="keywordtype">int</span> sig_len;
<a name="l00265"></a>00265 <span class="keywordtype">int</span> contained_alignment;
<a name="l00266"></a>00266
<a name="l00267"></a>00267 base_reader_recurse (sub, parent);
<a name="l00268"></a>00268
<a name="l00269"></a>00269 <span class="comment">/* Variant is 1 byte sig length (without nul), signature with nul,</span>
<a name="l00270"></a>00270 <span class="comment"> * padding to 8-boundary, then values</span>
<a name="l00271"></a>00271 <span class="comment"> */</span>
<a name="l00272"></a>00272
<a name="l00273"></a>00273 sig_len = _dbus_string_get_byte (sub-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>, sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>);
<a name="l00274"></a>00274
<a name="l00275"></a>00275 sub-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a> = sub-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>;
<a name="l00276"></a>00276 sub-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a> = sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> + 1;
<a name="l00277"></a>00277
<a name="l00278"></a>00278 sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> = sub-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a> + sig_len + 1;
<a name="l00279"></a>00279
<a name="l00280"></a>00280 contained_alignment = <a class="code" href="group__DBusMarshal.html#g2ba80f227880e442c140bc67653b0abd">_dbus_type_get_alignment</a> (<a class="code" href="group__DBusMarshal.html#g5866a0fd058aed3396402d0456144fd2">_dbus_first_type_in_signature</a> (sub-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l00281"></a>00281 sub-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>));
<a name="l00282"></a>00282
<a name="l00283"></a>00283 sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> = _DBUS_ALIGN_VALUE (sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>, contained_alignment);
<a name="l00284"></a>00284
<a name="l00285"></a>00285 <span class="preprocessor">#if RECURSIVE_MARSHAL_READ_TRACE</span>
<a name="l00286"></a>00286 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type reader %p variant containing '%s'\n"</span>,
<a name="l00287"></a>00287 sub,
<a name="l00288"></a>00288 _dbus_string_get_const_data_len (sub-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l00289"></a>00289 sub-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, 0));
<a name="l00290"></a>00290 <span class="preprocessor">#endif</span>
<a name="l00291"></a>00291 <span class="preprocessor"></span>}
<a name="l00292"></a>00292
<a name="l00293"></a>00293 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00294"></a>00294 array_reader_check_finished (<span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader)
<a name="l00295"></a>00295 {
<a name="l00296"></a>00296 <span class="keywordtype">int</span> end_pos;
<a name="l00297"></a>00297
<a name="l00298"></a>00298 <span class="comment">/* return the array element type if elements remain, and</span>
<a name="l00299"></a>00299 <span class="comment"> * TYPE_INVALID otherwise</span>
<a name="l00300"></a>00300 <span class="comment"> */</span>
<a name="l00301"></a>00301
<a name="l00302"></a>00302 end_pos = reader-><a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos + array_reader_get_array_len (reader);
<a name="l00303"></a>00303
<a name="l00304"></a>00304 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> <= end_pos);
<a name="l00305"></a>00305 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> >= reader-><a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos);
<a name="l00306"></a>00306
<a name="l00307"></a>00307 <span class="keywordflow">return</span> reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> == end_pos;
<a name="l00308"></a>00308 }
<a name="l00309"></a>00309
<a name="l00310"></a>00310 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00311"></a>00311 skip_one_complete_type (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *type_str,
<a name="l00312"></a>00312 <span class="keywordtype">int</span> *type_pos)
<a name="l00313"></a>00313 {
<a name="l00314"></a>00314 <a class="code" href="group__DBusMarshal.html#gf2f5b2f027fa7d24f6179c6dbdf71a83">_dbus_type_signature_next</a> (_dbus_string_get_const_data (type_str),
<a name="l00315"></a>00315 type_pos);
<a name="l00316"></a>00316 }
<a name="l00317"></a>00317
<a name="l00326"></a>00326 <span class="keywordtype">void</span>
<a name="l00327"></a><a class="code" href="group__DBusMarshal.html#gf2f5b2f027fa7d24f6179c6dbdf71a83">00327</a> <a class="code" href="group__DBusMarshal.html#gf2f5b2f027fa7d24f6179c6dbdf71a83">_dbus_type_signature_next</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *type_str,
<a name="l00328"></a>00328 <span class="keywordtype">int</span> *type_pos)
<a name="l00329"></a>00329 {
<a name="l00330"></a>00330 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *p;
<a name="l00331"></a>00331 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *start;
<a name="l00332"></a>00332
<a name="l00333"></a>00333 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (type_str != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00334"></a>00334 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (type_pos != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00335"></a>00335
<a name="l00336"></a>00336 start = type_str;
<a name="l00337"></a>00337 p = start + *type_pos;
<a name="l00338"></a>00338
<a name="l00339"></a>00339 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (*p != <a class="code" href="group__DBusProtocol.html#geab5ea0def3f587a0ed548b77d5c5cea">DBUS_STRUCT_END_CHAR</a>);
<a name="l00340"></a>00340 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (*p != <a class="code" href="group__DBusProtocol.html#g29ad22c7342ead042ae9e55ae20b49f1">DBUS_DICT_ENTRY_END_CHAR</a>);
<a name="l00341"></a>00341
<a name="l00342"></a>00342 <span class="keywordflow">while</span> (*p == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>)
<a name="l00343"></a>00343 ++p;
<a name="l00344"></a>00344
<a name="l00345"></a>00345 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (*p != <a class="code" href="group__DBusProtocol.html#geab5ea0def3f587a0ed548b77d5c5cea">DBUS_STRUCT_END_CHAR</a>);
<a name="l00346"></a>00346 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (*p != <a class="code" href="group__DBusProtocol.html#g29ad22c7342ead042ae9e55ae20b49f1">DBUS_DICT_ENTRY_END_CHAR</a>);
<a name="l00347"></a>00347
<a name="l00348"></a>00348 <span class="keywordflow">if</span> (*p == <a class="code" href="group__DBusProtocol.html#g725657eca93175475e0694b858f51fd6">DBUS_STRUCT_BEGIN_CHAR</a>)
<a name="l00349"></a>00349 {
<a name="l00350"></a>00350 <span class="keywordtype">int</span> depth;
<a name="l00351"></a>00351
<a name="l00352"></a>00352 depth = 1;
<a name="l00353"></a>00353
<a name="l00354"></a>00354 <span class="keywordflow">while</span> (<a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>)
<a name="l00355"></a>00355 {
<a name="l00356"></a>00356 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (*p != <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>);
<a name="l00357"></a>00357
<a name="l00358"></a>00358 ++p;
<a name="l00359"></a>00359
<a name="l00360"></a>00360 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (*p != <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>);
<a name="l00361"></a>00361
<a name="l00362"></a>00362 <span class="keywordflow">if</span> (*p == <a class="code" href="group__DBusProtocol.html#g725657eca93175475e0694b858f51fd6">DBUS_STRUCT_BEGIN_CHAR</a>)
<a name="l00363"></a>00363 depth += 1;
<a name="l00364"></a>00364 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (*p == <a class="code" href="group__DBusProtocol.html#geab5ea0def3f587a0ed548b77d5c5cea">DBUS_STRUCT_END_CHAR</a>)
<a name="l00365"></a>00365 {
<a name="l00366"></a>00366 depth -= 1;
<a name="l00367"></a>00367 <span class="keywordflow">if</span> (depth == 0)
<a name="l00368"></a>00368 {
<a name="l00369"></a>00369 ++p;
<a name="l00370"></a>00370 <span class="keywordflow">break</span>;
<a name="l00371"></a>00371 }
<a name="l00372"></a>00372 }
<a name="l00373"></a>00373 }
<a name="l00374"></a>00374 }
<a name="l00375"></a>00375 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (*p == <a class="code" href="group__DBusProtocol.html#gd51b5f7a2e6d927295479dd371f6b353">DBUS_DICT_ENTRY_BEGIN_CHAR</a>)
<a name="l00376"></a>00376 {
<a name="l00377"></a>00377 <span class="keywordtype">int</span> depth;
<a name="l00378"></a>00378
<a name="l00379"></a>00379 depth = 1;
<a name="l00380"></a>00380
<a name="l00381"></a>00381 <span class="keywordflow">while</span> (<a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>)
<a name="l00382"></a>00382 {
<a name="l00383"></a>00383 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (*p != <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>);
<a name="l00384"></a>00384
<a name="l00385"></a>00385 ++p;
<a name="l00386"></a>00386
<a name="l00387"></a>00387 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (*p != <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>);
<a name="l00388"></a>00388
<a name="l00389"></a>00389 <span class="keywordflow">if</span> (*p == <a class="code" href="group__DBusProtocol.html#gd51b5f7a2e6d927295479dd371f6b353">DBUS_DICT_ENTRY_BEGIN_CHAR</a>)
<a name="l00390"></a>00390 depth += 1;
<a name="l00391"></a>00391 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (*p == <a class="code" href="group__DBusProtocol.html#g29ad22c7342ead042ae9e55ae20b49f1">DBUS_DICT_ENTRY_END_CHAR</a>)
<a name="l00392"></a>00392 {
<a name="l00393"></a>00393 depth -= 1;
<a name="l00394"></a>00394 <span class="keywordflow">if</span> (depth == 0)
<a name="l00395"></a>00395 {
<a name="l00396"></a>00396 ++p;
<a name="l00397"></a>00397 <span class="keywordflow">break</span>;
<a name="l00398"></a>00398 }
<a name="l00399"></a>00399 }
<a name="l00400"></a>00400 }
<a name="l00401"></a>00401 }
<a name="l00402"></a>00402 <span class="keywordflow">else</span>
<a name="l00403"></a>00403 {
<a name="l00404"></a>00404 ++p;
<a name="l00405"></a>00405 }
<a name="l00406"></a>00406
<a name="l00407"></a>00407 *type_pos = (int) (p - start);
<a name="l00408"></a>00408 }
<a name="l00409"></a>00409
<a name="l00410"></a>00410 <span class="keyword">static</span> <span class="keywordtype">int</span>
<a name="l00411"></a>00411 find_len_of_complete_type (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *type_str,
<a name="l00412"></a>00412 <span class="keywordtype">int</span> type_pos)
<a name="l00413"></a>00413 {
<a name="l00414"></a>00414 <span class="keywordtype">int</span> end;
<a name="l00415"></a>00415
<a name="l00416"></a>00416 end = type_pos;
<a name="l00417"></a>00417
<a name="l00418"></a>00418 skip_one_complete_type (type_str, &end);
<a name="l00419"></a>00419
<a name="l00420"></a>00420 <span class="keywordflow">return</span> end - type_pos;
<a name="l00421"></a>00421 }
<a name="l00422"></a>00422
<a name="l00423"></a>00423 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00424"></a>00424 base_reader_next (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l00425"></a>00425 <span class="keywordtype">int</span> current_type)
<a name="l00426"></a>00426 {
<a name="l00427"></a>00427 <span class="keywordflow">switch</span> (current_type)
<a name="l00428"></a>00428 {
<a name="l00429"></a>00429 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#gd2fc8e6c50e0ad927f4249fb9e53ca97">DBUS_TYPE_DICT_ENTRY</a>:
<a name="l00430"></a>00430 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#ge4b22a74b9edb0ec0ff6e0294794d3f9">DBUS_TYPE_STRUCT</a>:
<a name="l00431"></a>00431 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#g4aa7a463ad2bce4e9aa95e3e397ddcf1">DBUS_TYPE_VARIANT</a>:
<a name="l00432"></a>00432 <span class="comment">/* Scan forward over the entire container contents */</span>
<a name="l00433"></a>00433 {
<a name="l00434"></a>00434 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> sub;
<a name="l00435"></a>00435
<a name="l00436"></a>00436 <span class="keywordflow">if</span> (reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">types_only</a> && current_type == <a class="code" href="group__DBusProtocol.html#g4aa7a463ad2bce4e9aa95e3e397ddcf1">DBUS_TYPE_VARIANT</a>)
<a name="l00437"></a>00437 ;
<a name="l00438"></a>00438 <span class="keywordflow">else</span>
<a name="l00439"></a>00439 {
<a name="l00440"></a>00440 <span class="comment">/* Recurse into the struct or variant */</span>
<a name="l00441"></a>00441 <a class="code" href="group__DBusMarshal.html#g082b410820c74b2a6ca816a8e0c91803">_dbus_type_reader_recurse</a> (reader, &sub);
<a name="l00442"></a>00442
<a name="l00443"></a>00443 <span class="comment">/* Skip everything in this subreader */</span>
<a name="l00444"></a>00444 <span class="keywordflow">while</span> (<a class="code" href="group__DBusMarshal.html#g746c09512d4905f2d2fac7ed4c3c63c2">_dbus_type_reader_next</a> (&sub))
<a name="l00445"></a>00445 {
<a name="l00446"></a>00446 <span class="comment">/* nothing */</span>;
<a name="l00447"></a>00447 }
<a name="l00448"></a>00448 }
<a name="l00449"></a>00449 <span class="keywordflow">if</span> (!reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">types_only</a>)
<a name="l00450"></a>00450 reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> = sub.<a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>;
<a name="l00451"></a>00451
<a name="l00452"></a>00452 <span class="comment">/* Now we are at the end of this container; for variants, the</span>
<a name="l00453"></a>00453 <span class="comment"> * subreader's type_pos is totally inapplicable (it's in the</span>
<a name="l00454"></a>00454 <span class="comment"> * value string) but we know that we increment by one past the</span>
<a name="l00455"></a>00455 <span class="comment"> * DBUS_TYPE_VARIANT</span>
<a name="l00456"></a>00456 <span class="comment"> */</span>
<a name="l00457"></a>00457 <span class="keywordflow">if</span> (current_type == <a class="code" href="group__DBusProtocol.html#g4aa7a463ad2bce4e9aa95e3e397ddcf1">DBUS_TYPE_VARIANT</a>)
<a name="l00458"></a>00458 reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a> += 1;
<a name="l00459"></a>00459 <span class="keywordflow">else</span>
<a name="l00460"></a>00460 reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a> = sub.<a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>;
<a name="l00461"></a>00461 }
<a name="l00462"></a>00462 <span class="keywordflow">break</span>;
<a name="l00463"></a>00463
<a name="l00464"></a>00464 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>:
<a name="l00465"></a>00465 {
<a name="l00466"></a>00466 <span class="keywordflow">if</span> (!reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">types_only</a>)
<a name="l00467"></a>00467 <a class="code" href="group__DBusMarshal.html#g8d9c5bcc039d9099df197a125a7259b8">_dbus_marshal_skip_array</a> (reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>,
<a name="l00468"></a>00468 <a class="code" href="group__DBusMarshal.html#g5866a0fd058aed3396402d0456144fd2">_dbus_first_type_in_signature</a> (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l00469"></a>00469 reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a> + 1),
<a name="l00470"></a>00470 reader-><a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a>,
<a name="l00471"></a>00471 &reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>);
<a name="l00472"></a>00472
<a name="l00473"></a>00473 skip_one_complete_type (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>, &reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>);
<a name="l00474"></a>00474 }
<a name="l00475"></a>00475 <span class="keywordflow">break</span>;
<a name="l00476"></a>00476
<a name="l00477"></a>00477 <span class="keywordflow">default</span>:
<a name="l00478"></a>00478 <span class="keywordflow">if</span> (!reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">types_only</a>)
<a name="l00479"></a>00479 <a class="code" href="group__DBusMarshal.html#gfd1ab7e9bd8e74cc41f03c76f4dce2dd">_dbus_marshal_skip_basic</a> (reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>,
<a name="l00480"></a>00480 current_type, reader-><a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a>,
<a name="l00481"></a>00481 &reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>);
<a name="l00482"></a>00482
<a name="l00483"></a>00483 reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a> += 1;
<a name="l00484"></a>00484 <span class="keywordflow">break</span>;
<a name="l00485"></a>00485 }
<a name="l00486"></a>00486 }
<a name="l00487"></a>00487
<a name="l00488"></a>00488 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00489"></a>00489 struct_reader_next (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l00490"></a>00490 <span class="keywordtype">int</span> current_type)
<a name="l00491"></a>00491 {
<a name="l00492"></a>00492 <span class="keywordtype">int</span> t;
<a name="l00493"></a>00493
<a name="l00494"></a>00494 base_reader_next (reader, current_type);
<a name="l00495"></a>00495
<a name="l00496"></a>00496 <span class="comment">/* for STRUCT containers we return FALSE at the end of the struct,</span>
<a name="l00497"></a>00497 <span class="comment"> * for INVALID we return FALSE at the end of the signature.</span>
<a name="l00498"></a>00498 <span class="comment"> * In both cases we arrange for get_current_type() to return INVALID</span>
<a name="l00499"></a>00499 <span class="comment"> * which is defined to happen iff we're at the end (no more next())</span>
<a name="l00500"></a>00500 <span class="comment"> */</span>
<a name="l00501"></a>00501 t = _dbus_string_get_byte (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>);
<a name="l00502"></a>00502 <span class="keywordflow">if</span> (t == <a class="code" href="group__DBusProtocol.html#geab5ea0def3f587a0ed548b77d5c5cea">DBUS_STRUCT_END_CHAR</a>)
<a name="l00503"></a>00503 {
<a name="l00504"></a>00504 reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a> += 1;
<a name="l00505"></a>00505 reader-><a class="code" href="structDBusTypeReader.html#551e64ee83df38ebda8c3677a91afe1b">finished</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00506"></a>00506 }
<a name="l00507"></a>00507 }
<a name="l00508"></a>00508
<a name="l00509"></a>00509 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00510"></a>00510 dict_entry_reader_next (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l00511"></a>00511 <span class="keywordtype">int</span> current_type)
<a name="l00512"></a>00512 {
<a name="l00513"></a>00513 <span class="keywordtype">int</span> t;
<a name="l00514"></a>00514
<a name="l00515"></a>00515 base_reader_next (reader, current_type);
<a name="l00516"></a>00516
<a name="l00517"></a>00517 <span class="comment">/* for STRUCT containers we return FALSE at the end of the struct,</span>
<a name="l00518"></a>00518 <span class="comment"> * for INVALID we return FALSE at the end of the signature.</span>
<a name="l00519"></a>00519 <span class="comment"> * In both cases we arrange for get_current_type() to return INVALID</span>
<a name="l00520"></a>00520 <span class="comment"> * which is defined to happen iff we're at the end (no more next())</span>
<a name="l00521"></a>00521 <span class="comment"> */</span>
<a name="l00522"></a>00522 t = _dbus_string_get_byte (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>);
<a name="l00523"></a>00523 <span class="keywordflow">if</span> (t == <a class="code" href="group__DBusProtocol.html#g29ad22c7342ead042ae9e55ae20b49f1">DBUS_DICT_ENTRY_END_CHAR</a>)
<a name="l00524"></a>00524 {
<a name="l00525"></a>00525 reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a> += 1;
<a name="l00526"></a>00526 reader-><a class="code" href="structDBusTypeReader.html#551e64ee83df38ebda8c3677a91afe1b">finished</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00527"></a>00527 }
<a name="l00528"></a>00528 }
<a name="l00529"></a>00529
<a name="l00530"></a>00530 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00531"></a>00531 array_types_only_reader_next (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l00532"></a>00532 <span class="keywordtype">int</span> current_type)
<a name="l00533"></a>00533 {
<a name="l00534"></a>00534 <span class="comment">/* We have one "element" to be iterated over</span>
<a name="l00535"></a>00535 <span class="comment"> * in each array, which is its element type.</span>
<a name="l00536"></a>00536 <span class="comment"> * So the finished flag indicates whether we've</span>
<a name="l00537"></a>00537 <span class="comment"> * iterated over it yet or not.</span>
<a name="l00538"></a>00538 <span class="comment"> */</span>
<a name="l00539"></a>00539 reader-><a class="code" href="structDBusTypeReader.html#551e64ee83df38ebda8c3677a91afe1b">finished</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00540"></a>00540 }
<a name="l00541"></a>00541
<a name="l00542"></a>00542 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00543"></a>00543 array_reader_next (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l00544"></a>00544 <span class="keywordtype">int</span> current_type)
<a name="l00545"></a>00545 {
<a name="l00546"></a>00546 <span class="comment">/* Skip one array element */</span>
<a name="l00547"></a>00547 <span class="keywordtype">int</span> end_pos;
<a name="l00548"></a>00548
<a name="l00549"></a>00549 end_pos = reader-><a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos + array_reader_get_array_len (reader);
<a name="l00550"></a>00550
<a name="l00551"></a>00551 <span class="preprocessor">#if RECURSIVE_MARSHAL_READ_TRACE</span>
<a name="l00552"></a>00552 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" reader %p array next START start_pos = %d end_pos = %d value_pos = %d current_type = %s\n"</span>,
<a name="l00553"></a>00553 reader,
<a name="l00554"></a>00554 reader-><a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos,
<a name="l00555"></a>00555 end_pos, reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l00556"></a>00556 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (current_type));
<a name="l00557"></a>00557 <span class="preprocessor">#endif</span>
<a name="l00558"></a>00558 <span class="preprocessor"></span>
<a name="l00559"></a>00559 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> < end_pos);
<a name="l00560"></a>00560 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> >= reader-><a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos);
<a name="l00561"></a>00561
<a name="l00562"></a>00562 <span class="keywordflow">switch</span> (<a class="code" href="group__DBusMarshal.html#g5866a0fd058aed3396402d0456144fd2">_dbus_first_type_in_signature</a> (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l00563"></a>00563 reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>))
<a name="l00564"></a>00564 {
<a name="l00565"></a>00565 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#gd2fc8e6c50e0ad927f4249fb9e53ca97">DBUS_TYPE_DICT_ENTRY</a>:
<a name="l00566"></a>00566 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#ge4b22a74b9edb0ec0ff6e0294794d3f9">DBUS_TYPE_STRUCT</a>:
<a name="l00567"></a>00567 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#g4aa7a463ad2bce4e9aa95e3e397ddcf1">DBUS_TYPE_VARIANT</a>:
<a name="l00568"></a>00568 {
<a name="l00569"></a>00569 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> sub;
<a name="l00570"></a>00570
<a name="l00571"></a>00571 <span class="comment">/* Recurse into the struct or variant */</span>
<a name="l00572"></a>00572 <a class="code" href="group__DBusMarshal.html#g082b410820c74b2a6ca816a8e0c91803">_dbus_type_reader_recurse</a> (reader, &sub);
<a name="l00573"></a>00573
<a name="l00574"></a>00574 <span class="comment">/* Skip everything in this element */</span>
<a name="l00575"></a>00575 <span class="keywordflow">while</span> (<a class="code" href="group__DBusMarshal.html#g746c09512d4905f2d2fac7ed4c3c63c2">_dbus_type_reader_next</a> (&sub))
<a name="l00576"></a>00576 {
<a name="l00577"></a>00577 <span class="comment">/* nothing */</span>;
<a name="l00578"></a>00578 }
<a name="l00579"></a>00579
<a name="l00580"></a>00580 <span class="comment">/* Now we are at the end of this element */</span>
<a name="l00581"></a>00581 reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> = sub.value_pos;
<a name="l00582"></a>00582 }
<a name="l00583"></a>00583 <span class="keywordflow">break</span>;
<a name="l00584"></a>00584
<a name="l00585"></a>00585 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>:
<a name="l00586"></a>00586 {
<a name="l00587"></a>00587 <a class="code" href="group__DBusMarshal.html#g8d9c5bcc039d9099df197a125a7259b8">_dbus_marshal_skip_array</a> (reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>,
<a name="l00588"></a>00588 <a class="code" href="group__DBusMarshal.html#g5866a0fd058aed3396402d0456144fd2">_dbus_first_type_in_signature</a> (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l00589"></a>00589 reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a> + 1),
<a name="l00590"></a>00590 reader-><a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a>,
<a name="l00591"></a>00591 &reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>);
<a name="l00592"></a>00592 }
<a name="l00593"></a>00593 <span class="keywordflow">break</span>;
<a name="l00594"></a>00594
<a name="l00595"></a>00595 <span class="keywordflow">default</span>:
<a name="l00596"></a>00596 {
<a name="l00597"></a>00597 <a class="code" href="group__DBusMarshal.html#gfd1ab7e9bd8e74cc41f03c76f4dce2dd">_dbus_marshal_skip_basic</a> (reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>,
<a name="l00598"></a>00598 current_type, reader-><a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a>,
<a name="l00599"></a>00599 &reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>);
<a name="l00600"></a>00600 }
<a name="l00601"></a>00601 <span class="keywordflow">break</span>;
<a name="l00602"></a>00602 }
<a name="l00603"></a>00603
<a name="l00604"></a>00604 <span class="preprocessor">#if RECURSIVE_MARSHAL_READ_TRACE</span>
<a name="l00605"></a>00605 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" reader %p array next END start_pos = %d end_pos = %d value_pos = %d current_type = %s\n"</span>,
<a name="l00606"></a>00606 reader,
<a name="l00607"></a>00607 reader-><a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos,
<a name="l00608"></a>00608 end_pos, reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l00609"></a>00609 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (current_type));
<a name="l00610"></a>00610 <span class="preprocessor">#endif</span>
<a name="l00611"></a>00611 <span class="preprocessor"></span>
<a name="l00612"></a>00612 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> <= end_pos);
<a name="l00613"></a>00613
<a name="l00614"></a>00614 <span class="keywordflow">if</span> (reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> == end_pos)
<a name="l00615"></a>00615 {
<a name="l00616"></a>00616 skip_one_complete_type (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l00617"></a>00617 &reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>);
<a name="l00618"></a>00618 }
<a name="l00619"></a>00619 }
<a name="l00620"></a>00620
<a name="l00621"></a>00621 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="structDBusTypeReaderClass.html">DBusTypeReaderClass</a> body_reader_class = {
<a name="l00622"></a>00622 <span class="stringliteral">"body"</span>, 0,
<a name="l00623"></a>00623 <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>,
<a name="l00624"></a>00624 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <span class="comment">/* body is always toplevel, so doesn't get recursed into */</span>
<a name="l00625"></a>00625 NULL,
<a name="l00626"></a>00626 base_reader_next
<a name="l00627"></a>00627 };
<a name="l00628"></a>00628
<a name="l00629"></a>00629 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="structDBusTypeReaderClass.html">DBusTypeReaderClass</a> body_types_only_reader_class = {
<a name="l00630"></a>00630 <span class="stringliteral">"body types"</span>, 1,
<a name="l00631"></a>00631 <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>,
<a name="l00632"></a>00632 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <span class="comment">/* body is always toplevel, so doesn't get recursed into */</span>
<a name="l00633"></a>00633 NULL,
<a name="l00634"></a>00634 base_reader_next
<a name="l00635"></a>00635 };
<a name="l00636"></a>00636
<a name="l00637"></a>00637 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="structDBusTypeReaderClass.html">DBusTypeReaderClass</a> struct_reader_class = {
<a name="l00638"></a>00638 <span class="stringliteral">"struct"</span>, 2,
<a name="l00639"></a>00639 <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>,
<a name="l00640"></a>00640 struct_or_dict_entry_reader_recurse,
<a name="l00641"></a>00641 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>,
<a name="l00642"></a>00642 struct_reader_next
<a name="l00643"></a>00643 };
<a name="l00644"></a>00644
<a name="l00645"></a>00645 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="structDBusTypeReaderClass.html">DBusTypeReaderClass</a> struct_types_only_reader_class = {
<a name="l00646"></a>00646 <span class="stringliteral">"struct types"</span>, 3,
<a name="l00647"></a>00647 <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>,
<a name="l00648"></a>00648 struct_or_dict_entry_types_only_reader_recurse,
<a name="l00649"></a>00649 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>,
<a name="l00650"></a>00650 struct_reader_next
<a name="l00651"></a>00651 };
<a name="l00652"></a>00652
<a name="l00653"></a>00653 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="structDBusTypeReaderClass.html">DBusTypeReaderClass</a> dict_entry_reader_class = {
<a name="l00654"></a>00654 <span class="stringliteral">"dict_entry"</span>, 4,
<a name="l00655"></a>00655 <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>,
<a name="l00656"></a>00656 struct_or_dict_entry_reader_recurse,
<a name="l00657"></a>00657 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>,
<a name="l00658"></a>00658 dict_entry_reader_next
<a name="l00659"></a>00659 };
<a name="l00660"></a>00660
<a name="l00661"></a>00661 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="structDBusTypeReaderClass.html">DBusTypeReaderClass</a> dict_entry_types_only_reader_class = {
<a name="l00662"></a>00662 <span class="stringliteral">"dict_entry types"</span>, 5,
<a name="l00663"></a>00663 <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>,
<a name="l00664"></a>00664 struct_or_dict_entry_types_only_reader_recurse,
<a name="l00665"></a>00665 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>,
<a name="l00666"></a>00666 dict_entry_reader_next
<a name="l00667"></a>00667 };
<a name="l00668"></a>00668
<a name="l00669"></a>00669 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="structDBusTypeReaderClass.html">DBusTypeReaderClass</a> array_reader_class = {
<a name="l00670"></a>00670 <span class="stringliteral">"array"</span>, 6,
<a name="l00671"></a>00671 <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>,
<a name="l00672"></a>00672 array_reader_recurse,
<a name="l00673"></a>00673 array_reader_check_finished,
<a name="l00674"></a>00674 array_reader_next
<a name="l00675"></a>00675 };
<a name="l00676"></a>00676
<a name="l00677"></a>00677 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="structDBusTypeReaderClass.html">DBusTypeReaderClass</a> array_types_only_reader_class = {
<a name="l00678"></a>00678 <span class="stringliteral">"array types"</span>, 7,
<a name="l00679"></a>00679 <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>,
<a name="l00680"></a>00680 array_types_only_reader_recurse,
<a name="l00681"></a>00681 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>,
<a name="l00682"></a>00682 array_types_only_reader_next
<a name="l00683"></a>00683 };
<a name="l00684"></a>00684
<a name="l00685"></a>00685 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="structDBusTypeReaderClass.html">DBusTypeReaderClass</a> variant_reader_class = {
<a name="l00686"></a>00686 <span class="stringliteral">"variant"</span>, 8,
<a name="l00687"></a>00687 <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>,
<a name="l00688"></a>00688 variant_reader_recurse,
<a name="l00689"></a>00689 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>,
<a name="l00690"></a>00690 base_reader_next
<a name="l00691"></a>00691 };
<a name="l00692"></a>00692
<a name="l00693"></a>00693 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="structDBusTypeReaderClass.html">DBusTypeReaderClass</a> * <span class="keyword">const</span>
<a name="l00694"></a>00694 all_reader_classes[] = {
<a name="l00695"></a>00695 &body_reader_class,
<a name="l00696"></a>00696 &body_types_only_reader_class,
<a name="l00697"></a>00697 &struct_reader_class,
<a name="l00698"></a>00698 &struct_types_only_reader_class,
<a name="l00699"></a>00699 &dict_entry_reader_class,
<a name="l00700"></a>00700 &dict_entry_types_only_reader_class,
<a name="l00701"></a>00701 &array_reader_class,
<a name="l00702"></a>00702 &array_types_only_reader_class,
<a name="l00703"></a>00703 &variant_reader_class
<a name="l00704"></a>00704 };
<a name="l00705"></a>00705
<a name="l00716"></a>00716 <span class="keywordtype">void</span>
<a name="l00717"></a><a class="code" href="group__DBusMarshal.html#g35d70cf69b1196518367e3e68e9b2dd2">00717</a> <a class="code" href="group__DBusMarshal.html#g35d70cf69b1196518367e3e68e9b2dd2">_dbus_type_reader_init</a> (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l00718"></a>00718 <span class="keywordtype">int</span> byte_order,
<a name="l00719"></a>00719 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *type_str,
<a name="l00720"></a>00720 <span class="keywordtype">int</span> type_pos,
<a name="l00721"></a>00721 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *value_str,
<a name="l00722"></a>00722 <span class="keywordtype">int</span> value_pos)
<a name="l00723"></a>00723 {
<a name="l00724"></a>00724 reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a> = &body_reader_class;
<a name="l00725"></a>00725
<a name="l00726"></a>00726 reader_init (reader, byte_order, type_str, type_pos,
<a name="l00727"></a>00727 value_str, value_pos);
<a name="l00728"></a>00728
<a name="l00729"></a>00729 <span class="preprocessor">#if RECURSIVE_MARSHAL_READ_TRACE</span>
<a name="l00730"></a>00730 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type reader %p init type_pos = %d value_pos = %d remaining sig '%s'\n"</span>,
<a name="l00731"></a>00731 reader, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l00732"></a>00732 _dbus_string_get_const_data_len (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, 0));
<a name="l00733"></a>00733 <span class="preprocessor">#endif</span>
<a name="l00734"></a>00734 <span class="preprocessor"></span>}
<a name="l00735"></a>00735
<a name="l00744"></a>00744 <span class="keywordtype">void</span>
<a name="l00745"></a><a class="code" href="group__DBusMarshal.html#g3a5845f555f11c33ebaa71a75abff661">00745</a> <a class="code" href="group__DBusMarshal.html#g3a5845f555f11c33ebaa71a75abff661">_dbus_type_reader_init_types_only</a> (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l00746"></a>00746 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *type_str,
<a name="l00747"></a>00747 <span class="keywordtype">int</span> type_pos)
<a name="l00748"></a>00748 {
<a name="l00749"></a>00749 reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a> = &body_types_only_reader_class;
<a name="l00750"></a>00750
<a name="l00751"></a>00751 reader_init (reader, DBUS_COMPILER_BYTE_ORDER <span class="comment">/* irrelevant */</span>,
<a name="l00752"></a>00752 type_str, type_pos, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusInternalsUtils.html#g5627db5e165848477e620846f6414db1">_DBUS_INT_MAX</a> <span class="comment">/* crashes if we screw up */</span>);
<a name="l00753"></a>00753
<a name="l00754"></a>00754 <span class="preprocessor">#if RECURSIVE_MARSHAL_READ_TRACE</span>
<a name="l00755"></a>00755 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type reader %p init types only type_pos = %d remaining sig '%s'\n"</span>,
<a name="l00756"></a>00756 reader, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>,
<a name="l00757"></a>00757 _dbus_string_get_const_data_len (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, 0));
<a name="l00758"></a>00758 <span class="preprocessor">#endif</span>
<a name="l00759"></a>00759 <span class="preprocessor"></span>}
<a name="l00760"></a>00760
<a name="l00769"></a>00769 <span class="keywordtype">int</span>
<a name="l00770"></a><a class="code" href="group__DBusMarshal.html#gb8e39cb8084247d54d7f272c51622a73">00770</a> <a class="code" href="group__DBusMarshal.html#gb8e39cb8084247d54d7f272c51622a73">_dbus_type_reader_get_current_type</a> (<span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader)
<a name="l00771"></a>00771 {
<a name="l00772"></a>00772 <span class="keywordtype">int</span> t;
<a name="l00773"></a>00773
<a name="l00774"></a>00774 <span class="keywordflow">if</span> (reader-><a class="code" href="structDBusTypeReader.html#551e64ee83df38ebda8c3677a91afe1b">finished</a> ||
<a name="l00775"></a>00775 (reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#023bc5274f7bf1f45f29822aebae96a1">check_finished</a> &&
<a name="l00776"></a>00776 (* reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#023bc5274f7bf1f45f29822aebae96a1">check_finished</a>) (reader)))
<a name="l00777"></a>00777 t = <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>;
<a name="l00778"></a>00778 <span class="keywordflow">else</span>
<a name="l00779"></a>00779 t = <a class="code" href="group__DBusMarshal.html#g5866a0fd058aed3396402d0456144fd2">_dbus_first_type_in_signature</a> (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l00780"></a>00780 reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>);
<a name="l00781"></a>00781
<a name="l00782"></a>00782 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (t != <a class="code" href="group__DBusProtocol.html#geab5ea0def3f587a0ed548b77d5c5cea">DBUS_STRUCT_END_CHAR</a>);
<a name="l00783"></a>00783 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (t != <a class="code" href="group__DBusProtocol.html#g725657eca93175475e0694b858f51fd6">DBUS_STRUCT_BEGIN_CHAR</a>);
<a name="l00784"></a>00784 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (t != <a class="code" href="group__DBusProtocol.html#g29ad22c7342ead042ae9e55ae20b49f1">DBUS_DICT_ENTRY_END_CHAR</a>);
<a name="l00785"></a>00785 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (t != <a class="code" href="group__DBusProtocol.html#gd51b5f7a2e6d927295479dd371f6b353">DBUS_DICT_ENTRY_BEGIN_CHAR</a>);
<a name="l00786"></a>00786
<a name="l00787"></a>00787 <span class="preprocessor">#if 0</span>
<a name="l00788"></a>00788 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type reader %p current type_pos = %d type = %s\n"</span>,
<a name="l00789"></a>00789 reader, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>,
<a name="l00790"></a>00790 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (t));
<a name="l00791"></a>00791 <span class="preprocessor">#endif</span>
<a name="l00792"></a>00792 <span class="preprocessor"></span>
<a name="l00793"></a>00793 <span class="keywordflow">return</span> t;
<a name="l00794"></a>00794 }
<a name="l00795"></a>00795
<a name="l00804"></a>00804 <span class="keywordtype">int</span>
<a name="l00805"></a><a class="code" href="group__DBusMarshal.html#g6e5439f7ca5ee8a1ce943ddab7611d0d">00805</a> <a class="code" href="group__DBusMarshal.html#g6e5439f7ca5ee8a1ce943ddab7611d0d">_dbus_type_reader_get_element_type</a> (<span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader)
<a name="l00806"></a>00806 {
<a name="l00807"></a>00807 <span class="keywordtype">int</span> element_type;
<a name="l00808"></a>00808
<a name="l00809"></a>00809 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (<a class="code" href="group__DBusMarshal.html#gb8e39cb8084247d54d7f272c51622a73">_dbus_type_reader_get_current_type</a> (reader) == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>);
<a name="l00810"></a>00810
<a name="l00811"></a>00811 element_type = <a class="code" href="group__DBusMarshal.html#g5866a0fd058aed3396402d0456144fd2">_dbus_first_type_in_signature</a> (reader->type_str,
<a name="l00812"></a>00812 reader->type_pos + 1);
<a name="l00813"></a>00813
<a name="l00814"></a>00814 <span class="keywordflow">return</span> element_type;
<a name="l00815"></a>00815 }
<a name="l00816"></a>00816
<a name="l00821"></a>00821 <span class="keywordtype">int</span>
<a name="l00822"></a><a class="code" href="group__DBusMarshal.html#g2a8ab1152821950b1fe29e000954981c">00822</a> <a class="code" href="group__DBusMarshal.html#g2a8ab1152821950b1fe29e000954981c">_dbus_type_reader_get_value_pos</a> (<span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader)
<a name="l00823"></a>00823 {
<a name="l00824"></a>00824 <span class="keywordflow">return</span> reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>;
<a name="l00825"></a>00825 }
<a name="l00826"></a>00826
<a name="l00836"></a>00836 <span class="keywordtype">void</span>
<a name="l00837"></a><a class="code" href="group__DBusMarshal.html#gc87315d74386314ec3b148ef737626d2">00837</a> <a class="code" href="group__DBusMarshal.html#gc87315d74386314ec3b148ef737626d2">_dbus_type_reader_read_raw</a> (<span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l00838"></a>00838 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> **value_location)
<a name="l00839"></a>00839 {
<a name="l00840"></a>00840 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">types_only</a>);
<a name="l00841"></a>00841
<a name="l00842"></a>00842 *value_location = _dbus_string_get_const_data_len (reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>,
<a name="l00843"></a>00843 reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l00844"></a>00844 0);
<a name="l00845"></a>00845 }
<a name="l00846"></a>00846
<a name="l00853"></a>00853 <span class="keywordtype">void</span>
<a name="l00854"></a><a class="code" href="group__DBusMarshal.html#ga54355ee98d6721d7a29b5ae7d92eb9a">00854</a> <a class="code" href="group__DBusMarshal.html#ga54355ee98d6721d7a29b5ae7d92eb9a">_dbus_type_reader_read_basic</a> (<span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l00855"></a>00855 <span class="keywordtype">void</span> *value)
<a name="l00856"></a>00856 {
<a name="l00857"></a>00857 <span class="keywordtype">int</span> t;
<a name="l00858"></a>00858
<a name="l00859"></a>00859 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">types_only</a>);
<a name="l00860"></a>00860
<a name="l00861"></a>00861 t = <a class="code" href="group__DBusMarshal.html#gb8e39cb8084247d54d7f272c51622a73">_dbus_type_reader_get_current_type</a> (reader);
<a name="l00862"></a>00862
<a name="l00863"></a>00863 <a class="code" href="group__DBusMarshal.html#gb331e099fa8cf3d94cf33ad7b20c81ae">_dbus_marshal_read_basic</a> (reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>,
<a name="l00864"></a>00864 reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l00865"></a>00865 t, value,
<a name="l00866"></a>00866 reader-><a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a>,
<a name="l00867"></a>00867 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00868"></a>00868
<a name="l00869"></a>00869
<a name="l00870"></a>00870 <span class="preprocessor">#if RECURSIVE_MARSHAL_READ_TRACE</span>
<a name="l00871"></a>00871 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type reader %p read basic type_pos = %d value_pos = %d remaining sig '%s'\n"</span>,
<a name="l00872"></a>00872 reader, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l00873"></a>00873 _dbus_string_get_const_data_len (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, 0));
<a name="l00874"></a>00874 <span class="preprocessor">#endif</span>
<a name="l00875"></a>00875 <span class="preprocessor"></span>}
<a name="l00876"></a>00876
<a name="l00883"></a>00883 <span class="keywordtype">int</span>
<a name="l00884"></a><a class="code" href="group__DBusMarshal.html#g7def93d676d528c261aa274cea41c29d">00884</a> <a class="code" href="group__DBusMarshal.html#g7def93d676d528c261aa274cea41c29d">_dbus_type_reader_get_array_length</a> (<span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader)
<a name="l00885"></a>00885 {
<a name="l00886"></a>00886 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">types_only</a>);
<a name="l00887"></a>00887 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a> == &array_reader_class);
<a name="l00888"></a>00888
<a name="l00889"></a>00889 <span class="keywordflow">return</span> array_reader_get_array_len (reader);
<a name="l00890"></a>00890 }
<a name="l00891"></a>00891
<a name="l00907"></a>00907 <span class="keywordtype">void</span>
<a name="l00908"></a><a class="code" href="group__DBusMarshal.html#ge9a65c05e58ace9c83352f65af2fe745">00908</a> <a class="code" href="group__DBusMarshal.html#ge9a65c05e58ace9c83352f65af2fe745">_dbus_type_reader_read_fixed_multi</a> (<span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l00909"></a>00909 <span class="keywordtype">void</span> *value,
<a name="l00910"></a>00910 <span class="keywordtype">int</span> *n_elements)
<a name="l00911"></a>00911 {
<a name="l00912"></a>00912 <span class="keywordtype">int</span> element_type;
<a name="l00913"></a>00913 <span class="keywordtype">int</span> end_pos;
<a name="l00914"></a>00914 <span class="keywordtype">int</span> remaining_len;
<a name="l00915"></a>00915 <span class="keywordtype">int</span> alignment;
<a name="l00916"></a>00916 <span class="keywordtype">int</span> total_len;
<a name="l00917"></a>00917
<a name="l00918"></a>00918 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">types_only</a>);
<a name="l00919"></a>00919 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a> == &array_reader_class);
<a name="l00920"></a>00920
<a name="l00921"></a>00921 element_type = <a class="code" href="group__DBusMarshal.html#g5866a0fd058aed3396402d0456144fd2">_dbus_first_type_in_signature</a> (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l00922"></a>00922 reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>);
<a name="l00923"></a>00923
<a name="l00924"></a>00924 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (element_type != <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>); <span class="comment">/* why we don't use get_current_type() */</span>
<a name="l00925"></a>00925 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (<a class="code" href="group__DBusSignature.html#g435ffc74ae015cc193175f5b864872bc">dbus_type_is_fixed</a> (element_type));
<a name="l00926"></a>00926
<a name="l00927"></a>00927 alignment = <a class="code" href="group__DBusMarshal.html#g2ba80f227880e442c140bc67653b0abd">_dbus_type_get_alignment</a> (element_type);
<a name="l00928"></a>00928
<a name="l00929"></a>00929 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> >= reader-><a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos);
<a name="l00930"></a>00930
<a name="l00931"></a>00931 total_len = array_reader_get_array_len (reader);
<a name="l00932"></a>00932 end_pos = reader-><a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos + total_len;
<a name="l00933"></a>00933 remaining_len = end_pos - reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>;
<a name="l00934"></a>00934
<a name="l00935"></a>00935 <span class="preprocessor">#if RECURSIVE_MARSHAL_READ_TRACE</span>
<a name="l00936"></a>00936 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"end_pos %d total_len %d remaining_len %d value_pos %d\n"</span>,
<a name="l00937"></a>00937 end_pos, total_len, remaining_len, reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>);
<a name="l00938"></a>00938 <span class="preprocessor">#endif</span>
<a name="l00939"></a>00939 <span class="preprocessor"></span>
<a name="l00940"></a>00940 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (remaining_len <= total_len);
<a name="l00941"></a>00941
<a name="l00942"></a>00942 <span class="keywordflow">if</span> (remaining_len == 0)
<a name="l00943"></a>00943 *(<span class="keyword">const</span> <a class="code" href="unionDBusBasicValue.html">DBusBasicValue</a>**) value = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l00944"></a>00944 <span class="keywordflow">else</span>
<a name="l00945"></a>00945 *(<span class="keyword">const</span> <a class="code" href="unionDBusBasicValue.html">DBusBasicValue</a>**) value =
<a name="l00946"></a>00946 (<span class="keywordtype">void</span>*) _dbus_string_get_const_data_len (reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>,
<a name="l00947"></a>00947 reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l00948"></a>00948 remaining_len);
<a name="l00949"></a>00949
<a name="l00950"></a>00950 *n_elements = remaining_len / alignment;
<a name="l00951"></a>00951 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> ((remaining_len % alignment) == 0);
<a name="l00952"></a>00952
<a name="l00953"></a>00953 <span class="preprocessor">#if RECURSIVE_MARSHAL_READ_TRACE</span>
<a name="l00954"></a>00954 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type reader %p read fixed array type_pos = %d value_pos = %d remaining sig '%s'\n"</span>,
<a name="l00955"></a>00955 reader, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l00956"></a>00956 _dbus_string_get_const_data_len (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, 0));
<a name="l00957"></a>00957 <span class="preprocessor">#endif</span>
<a name="l00958"></a>00958 <span class="preprocessor"></span>}
<a name="l00959"></a>00959
<a name="l00972"></a>00972 <span class="keywordtype">void</span>
<a name="l00973"></a><a class="code" href="group__DBusMarshal.html#g082b410820c74b2a6ca816a8e0c91803">00973</a> <a class="code" href="group__DBusMarshal.html#g082b410820c74b2a6ca816a8e0c91803">_dbus_type_reader_recurse</a> (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l00974"></a>00974 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *sub)
<a name="l00975"></a>00975 {
<a name="l00976"></a>00976 <span class="keywordtype">int</span> t;
<a name="l00977"></a>00977
<a name="l00978"></a>00978 t = <a class="code" href="group__DBusMarshal.html#g5866a0fd058aed3396402d0456144fd2">_dbus_first_type_in_signature</a> (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>);
<a name="l00979"></a>00979
<a name="l00980"></a>00980 <span class="keywordflow">switch</span> (t)
<a name="l00981"></a>00981 {
<a name="l00982"></a>00982 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#ge4b22a74b9edb0ec0ff6e0294794d3f9">DBUS_TYPE_STRUCT</a>:
<a name="l00983"></a>00983 <span class="keywordflow">if</span> (reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">types_only</a>)
<a name="l00984"></a>00984 sub-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a> = &struct_types_only_reader_class;
<a name="l00985"></a>00985 <span class="keywordflow">else</span>
<a name="l00986"></a>00986 sub-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a> = &struct_reader_class;
<a name="l00987"></a>00987 <span class="keywordflow">break</span>;
<a name="l00988"></a>00988 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#gd2fc8e6c50e0ad927f4249fb9e53ca97">DBUS_TYPE_DICT_ENTRY</a>:
<a name="l00989"></a>00989 <span class="keywordflow">if</span> (reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">types_only</a>)
<a name="l00990"></a>00990 sub-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a> = &dict_entry_types_only_reader_class;
<a name="l00991"></a>00991 <span class="keywordflow">else</span>
<a name="l00992"></a>00992 sub-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a> = &dict_entry_reader_class;
<a name="l00993"></a>00993 <span class="keywordflow">break</span>;
<a name="l00994"></a>00994 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>:
<a name="l00995"></a>00995 <span class="keywordflow">if</span> (reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">types_only</a>)
<a name="l00996"></a>00996 sub-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a> = &array_types_only_reader_class;
<a name="l00997"></a>00997 <span class="keywordflow">else</span>
<a name="l00998"></a>00998 sub-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a> = &array_reader_class;
<a name="l00999"></a>00999 <span class="keywordflow">break</span>;
<a name="l01000"></a>01000 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#g4aa7a463ad2bce4e9aa95e3e397ddcf1">DBUS_TYPE_VARIANT</a>:
<a name="l01001"></a>01001 <span class="keywordflow">if</span> (reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">types_only</a>)
<a name="l01002"></a>01002 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"can't recurse into variant typecode"</span>);
<a name="l01003"></a>01003 <span class="keywordflow">else</span>
<a name="l01004"></a>01004 sub-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a> = &variant_reader_class;
<a name="l01005"></a>01005 <span class="keywordflow">break</span>;
<a name="l01006"></a>01006 <span class="keywordflow">default</span>:
<a name="l01007"></a>01007 _dbus_verbose (<span class="stringliteral">"recursing into type %s\n"</span>, <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (t));
<a name="l01008"></a>01008 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l01009"></a>01009 <span class="preprocessor"></span> <span class="keywordflow">if</span> (t == <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>)
<a name="l01010"></a>01010 <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"You can't recurse into an empty array or off the end of a message body\n"</span>);
<a name="l01011"></a>01011 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_DISABLE_CHECKS */</span>
<a name="l01012"></a>01012
<a name="l01013"></a>01013 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"don't yet handle recursing into this type"</span>);
<a name="l01014"></a>01014 }
<a name="l01015"></a>01015
<a name="l01016"></a>01016 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (sub-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a> == all_reader_classes[sub-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#7cd297c0e03c5204bc41bf305c7688c9">id</a>]);
<a name="l01017"></a>01017
<a name="l01018"></a>01018 (* sub-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#be8f7f4433f8c8eaf0c5f8d445101391">recurse</a>) (sub, reader);
<a name="l01019"></a>01019
<a name="l01020"></a>01020 <span class="preprocessor">#if RECURSIVE_MARSHAL_READ_TRACE</span>
<a name="l01021"></a>01021 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type reader %p RECURSED type_pos = %d value_pos = %d remaining sig '%s'\n"</span>,
<a name="l01022"></a>01022 sub, sub-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, sub-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l01023"></a>01023 _dbus_string_get_const_data_len (sub-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>, sub-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, 0));
<a name="l01024"></a>01024 <span class="preprocessor">#endif</span>
<a name="l01025"></a>01025 <span class="preprocessor"></span>}
<a name="l01026"></a>01026
<a name="l01035"></a>01035 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01036"></a><a class="code" href="group__DBusMarshal.html#g746c09512d4905f2d2fac7ed4c3c63c2">01036</a> <a class="code" href="group__DBusMarshal.html#g746c09512d4905f2d2fac7ed4c3c63c2">_dbus_type_reader_next</a> (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader)
<a name="l01037"></a>01037 {
<a name="l01038"></a>01038 <span class="keywordtype">int</span> t;
<a name="l01039"></a>01039
<a name="l01040"></a>01040 t = <a class="code" href="group__DBusMarshal.html#gb8e39cb8084247d54d7f272c51622a73">_dbus_type_reader_get_current_type</a> (reader);
<a name="l01041"></a>01041
<a name="l01042"></a>01042 <span class="preprocessor">#if RECURSIVE_MARSHAL_READ_TRACE</span>
<a name="l01043"></a>01043 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type reader %p START next() { type_pos = %d value_pos = %d remaining sig '%s' current_type = %s\n"</span>,
<a name="l01044"></a>01044 reader, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l01045"></a>01045 _dbus_string_get_const_data_len (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, 0),
<a name="l01046"></a>01046 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (t));
<a name="l01047"></a>01047 <span class="preprocessor">#endif</span>
<a name="l01048"></a>01048 <span class="preprocessor"></span>
<a name="l01049"></a>01049 <span class="keywordflow">if</span> (t == <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>)
<a name="l01050"></a>01050 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01051"></a>01051
<a name="l01052"></a>01052 (* reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#1b4a87e6f61339456f2e8d0ce873f379">next</a>) (reader, t);
<a name="l01053"></a>01053
<a name="l01054"></a>01054 <span class="preprocessor">#if RECURSIVE_MARSHAL_READ_TRACE</span>
<a name="l01055"></a>01055 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type reader %p END next() type_pos = %d value_pos = %d remaining sig '%s' current_type = %s\n"</span>,
<a name="l01056"></a>01056 reader, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l01057"></a>01057 _dbus_string_get_const_data_len (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, 0),
<a name="l01058"></a>01058 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (<a class="code" href="group__DBusMarshal.html#gb8e39cb8084247d54d7f272c51622a73">_dbus_type_reader_get_current_type</a> (reader)));
<a name="l01059"></a>01059 <span class="preprocessor">#endif</span>
<a name="l01060"></a>01060 <span class="preprocessor"></span>
<a name="l01061"></a>01061 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#gb8e39cb8084247d54d7f272c51622a73">_dbus_type_reader_get_current_type</a> (reader) != <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>;
<a name="l01062"></a>01062 }
<a name="l01063"></a>01063
<a name="l01075"></a>01075 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01076"></a><a class="code" href="group__DBusMarshal.html#g97a59dbd1597ef1b267457e809f095de">01076</a> <a class="code" href="group__DBusMarshal.html#g97a59dbd1597ef1b267457e809f095de">_dbus_type_reader_has_next</a> (<span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader)
<a name="l01077"></a>01077 {
<a name="l01078"></a>01078 <span class="comment">/* Not efficient but works for now. */</span>
<a name="l01079"></a>01079 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> copy;
<a name="l01080"></a>01080
<a name="l01081"></a>01081 copy = *reader;
<a name="l01082"></a>01082 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g746c09512d4905f2d2fac7ed4c3c63c2">_dbus_type_reader_next</a> (&copy);
<a name="l01083"></a>01083 }
<a name="l01084"></a>01084
<a name="l01106"></a>01106 <span class="keywordtype">void</span>
<a name="l01107"></a><a class="code" href="group__DBusMarshal.html#g4578cc623c8b0978ca780ce0ab950fdb">01107</a> <a class="code" href="group__DBusMarshal.html#g4578cc623c8b0978ca780ce0ab950fdb">_dbus_type_reader_get_signature</a> (<span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l01108"></a>01108 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> **str_p,
<a name="l01109"></a>01109 <span class="keywordtype">int</span> *start_p,
<a name="l01110"></a>01110 <span class="keywordtype">int</span> *len_p)
<a name="l01111"></a>01111 {
<a name="l01112"></a>01112 *str_p = reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>;
<a name="l01113"></a>01113 *start_p = reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>;
<a name="l01114"></a>01114 *len_p = find_len_of_complete_type (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>);
<a name="l01115"></a>01115 }
<a name="l01116"></a>01116
<a name="l01117"></a><a class="code" href="structReplacementBlock.html">01117</a> <span class="keyword">typedef</span> <span class="keyword">struct</span>
<a name="l01118"></a>01118 <span class="keyword"></span>{
<a name="l01119"></a><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">01119</a> <a class="code" href="structDBusString.html">DBusString</a> replacement;
<a name="l01120"></a><a class="code" href="structReplacementBlock.html#2aa3220ac139545f4fa2ddec2c36d5de">01120</a> <span class="keywordtype">int</span> padding;
<a name="l01121"></a>01121 } <a class="code" href="structReplacementBlock.html">ReplacementBlock</a>;
<a name="l01122"></a>01122
<a name="l01123"></a>01123 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01124"></a>01124 replacement_block_init (<a class="code" href="structReplacementBlock.html">ReplacementBlock</a> *block,
<a name="l01125"></a>01125 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader)
<a name="l01126"></a>01126 {
<a name="l01127"></a>01127 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g348252317f7bb8ac43529972945830ae">_dbus_string_init</a> (&block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>))
<a name="l01128"></a>01128 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01129"></a>01129
<a name="l01130"></a>01130 <span class="comment">/* % 8 is the padding to have the same align properties in</span>
<a name="l01131"></a>01131 <span class="comment"> * our replacement string as we do at the position being replaced</span>
<a name="l01132"></a>01132 <span class="comment"> */</span>
<a name="l01133"></a>01133 block-><a class="code" href="structReplacementBlock.html#2aa3220ac139545f4fa2ddec2c36d5de">padding</a> = reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> % 8;
<a name="l01134"></a>01134
<a name="l01135"></a>01135 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g8f13997d90ceed2f437706e6b7804d9b">_dbus_string_lengthen</a> (&block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>, block-><a class="code" href="structReplacementBlock.html#2aa3220ac139545f4fa2ddec2c36d5de">padding</a>))
<a name="l01136"></a>01136 <span class="keywordflow">goto</span> oom;
<a name="l01137"></a>01137
<a name="l01138"></a>01138 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01139"></a>01139
<a name="l01140"></a>01140 oom:
<a name="l01141"></a>01141 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>);
<a name="l01142"></a>01142 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01143"></a>01143 }
<a name="l01144"></a>01144
<a name="l01145"></a>01145 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01146"></a>01146 replacement_block_replace (<a class="code" href="structReplacementBlock.html">ReplacementBlock</a> *block,
<a name="l01147"></a>01147 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l01148"></a>01148 <span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *realign_root)
<a name="l01149"></a>01149 {
<a name="l01150"></a>01150 <a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> writer;
<a name="l01151"></a>01151 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> realign_reader;
<a name="l01152"></a>01152 <a class="code" href="structDBusList.html">DBusList</a> *fixups;
<a name="l01153"></a>01153 <span class="keywordtype">int</span> orig_len;
<a name="l01154"></a>01154
<a name="l01155"></a>01155 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (realign_root != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01156"></a>01156
<a name="l01157"></a>01157 orig_len = _dbus_string_get_length (&block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>);
<a name="l01158"></a>01158
<a name="l01159"></a>01159 realign_reader = *realign_root;
<a name="l01160"></a>01160
<a name="l01161"></a>01161 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l01162"></a>01162 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"INITIALIZING replacement block writer %p at value_pos %d\n"</span>,
<a name="l01163"></a>01163 &writer, _dbus_string_get_length (&block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>));
<a name="l01164"></a>01164 <span class="preprocessor">#endif</span>
<a name="l01165"></a>01165 <span class="preprocessor"></span> <a class="code" href="group__DBusMarshal.html#g1f101175ce6f33221fcb59f0b46349bd">_dbus_type_writer_init_values_only</a> (&writer,
<a name="l01166"></a>01166 realign_reader.<a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a>,
<a name="l01167"></a>01167 realign_reader.<a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l01168"></a>01168 realign_reader.<a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>,
<a name="l01169"></a>01169 &block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>,
<a name="l01170"></a>01170 _dbus_string_get_length (&block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>));
<a name="l01171"></a>01171
<a name="l01172"></a>01172 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (realign_reader.<a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> <= reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>);
<a name="l01173"></a>01173
<a name="l01174"></a>01174 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l01175"></a>01175 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"COPYING from reader at value_pos %d to writer %p starting after value_pos %d\n"</span>,
<a name="l01176"></a>01176 realign_reader.<a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>, &writer, reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>);
<a name="l01177"></a>01177 <span class="preprocessor">#endif</span>
<a name="l01178"></a>01178 <span class="preprocessor"></span> fixups = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01179"></a>01179 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#g004da084963a3a74589b28611b9d8398">_dbus_type_writer_write_reader_partial</a> (&writer,
<a name="l01180"></a>01180 &realign_reader,
<a name="l01181"></a>01181 reader,
<a name="l01182"></a>01182 block-><a class="code" href="structReplacementBlock.html#2aa3220ac139545f4fa2ddec2c36d5de">padding</a>,
<a name="l01183"></a>01183 _dbus_string_get_length (&block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>) - block-><a class="code" href="structReplacementBlock.html#2aa3220ac139545f4fa2ddec2c36d5de">padding</a>,
<a name="l01184"></a>01184 &fixups))
<a name="l01185"></a>01185 <span class="keywordflow">goto</span> oom;
<a name="l01186"></a>01186
<a name="l01187"></a>01187 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l01188"></a>01188 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"REPLACEMENT at padding %d len %d\n"</span>, block-><a class="code" href="structReplacementBlock.html#2aa3220ac139545f4fa2ddec2c36d5de">padding</a>,
<a name="l01189"></a>01189 _dbus_string_get_length (&block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>) - block-><a class="code" href="structReplacementBlock.html#2aa3220ac139545f4fa2ddec2c36d5de">padding</a>);
<a name="l01190"></a>01190 <a class="code" href="group__DBusMarshal.html#g3926bb35edf78d114cf0c341fe3258e0">_dbus_verbose_bytes_of_string</a> (&block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>, block-><a class="code" href="structReplacementBlock.html#2aa3220ac139545f4fa2ddec2c36d5de">padding</a>,
<a name="l01191"></a>01191 _dbus_string_get_length (&block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>) - block-><a class="code" href="structReplacementBlock.html#2aa3220ac139545f4fa2ddec2c36d5de">padding</a>);
<a name="l01192"></a>01192 _dbus_verbose (<span class="stringliteral">"TO BE REPLACED at value_pos = %d (align pad %d) len %d realign_reader.value_pos %d\n"</span>,
<a name="l01193"></a>01193 reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>, reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> % 8,
<a name="l01194"></a>01194 realign_reader.<a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> - reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l01195"></a>01195 realign_reader.<a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>);
<a name="l01196"></a>01196 <a class="code" href="group__DBusMarshal.html#g3926bb35edf78d114cf0c341fe3258e0">_dbus_verbose_bytes_of_string</a> (reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>,
<a name="l01197"></a>01197 reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l01198"></a>01198 realign_reader.<a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> - reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>);
<a name="l01199"></a>01199 <span class="preprocessor">#endif</span>
<a name="l01200"></a>01200 <span class="preprocessor"></span>
<a name="l01201"></a>01201 <span class="comment">/* Move the replacement into position</span>
<a name="l01202"></a>01202 <span class="comment"> * (realign_reader should now be at the end of the block to be replaced)</span>
<a name="l01203"></a>01203 <span class="comment"> */</span>
<a name="l01204"></a>01204 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gfe7921a92467cdefaa0a7829d6cf260b">_dbus_string_replace_len</a> (&block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>, block-><a class="code" href="structReplacementBlock.html#2aa3220ac139545f4fa2ddec2c36d5de">padding</a>,
<a name="l01205"></a>01205 _dbus_string_get_length (&block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>) - block-><a class="code" href="structReplacementBlock.html#2aa3220ac139545f4fa2ddec2c36d5de">padding</a>,
<a name="l01206"></a>01206 (<a class="code" href="structDBusString.html">DBusString</a>*) reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>,
<a name="l01207"></a>01207 reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l01208"></a>01208 realign_reader.<a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> - reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>))
<a name="l01209"></a>01209 <span class="keywordflow">goto</span> oom;
<a name="l01210"></a>01210
<a name="l01211"></a>01211 <span class="comment">/* Process our fixups now that we can't have an OOM error */</span>
<a name="l01212"></a>01212 apply_and_free_fixups (&fixups, reader);
<a name="l01213"></a>01213
<a name="l01214"></a>01214 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01215"></a>01215
<a name="l01216"></a>01216 oom:
<a name="l01217"></a>01217 <a class="code" href="group__DBusString.html#g08c423b93c28dd746dcb93e0461ab95c">_dbus_string_set_length</a> (&block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>, orig_len);
<a name="l01218"></a>01218 free_fixups (&fixups);
<a name="l01219"></a>01219 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01220"></a>01220 }
<a name="l01221"></a>01221
<a name="l01222"></a>01222 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l01223"></a>01223 replacement_block_free (<a class="code" href="structReplacementBlock.html">ReplacementBlock</a> *block)
<a name="l01224"></a>01224 {
<a name="l01225"></a>01225 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&block-><a class="code" href="structReplacementBlock.html#562018cd2a0870abe3897b289bdd8488">replacement</a>);
<a name="l01226"></a>01226 }
<a name="l01227"></a>01227
<a name="l01228"></a>01228 <span class="comment">/* In the variable-length case, we have to fix alignment after we insert.</span>
<a name="l01229"></a>01229 <span class="comment"> * The strategy is as follows:</span>
<a name="l01230"></a>01230 <span class="comment"> *</span>
<a name="l01231"></a>01231 <span class="comment"> * - pad a new string to have the same alignment as the</span>
<a name="l01232"></a>01232 <span class="comment"> * start of the current basic value</span>
<a name="l01233"></a>01233 <span class="comment"> * - write the new basic value</span>
<a name="l01234"></a>01234 <span class="comment"> * - copy from the original reader to the new string,</span>
<a name="l01235"></a>01235 <span class="comment"> * which will fix the alignment of types following</span>
<a name="l01236"></a>01236 <span class="comment"> * the new value</span>
<a name="l01237"></a>01237 <span class="comment"> * - this copy has to start at realign_root,</span>
<a name="l01238"></a>01238 <span class="comment"> * but not really write anything until it</span>
<a name="l01239"></a>01239 <span class="comment"> * passes the value being set</span>
<a name="l01240"></a>01240 <span class="comment"> * - as an optimization, we can stop copying</span>
<a name="l01241"></a>01241 <span class="comment"> * when the source and dest values are both</span>
<a name="l01242"></a>01242 <span class="comment"> * on an 8-boundary, since we know all following</span>
<a name="l01243"></a>01243 <span class="comment"> * padding and alignment will be identical</span>
<a name="l01244"></a>01244 <span class="comment"> * - copy the new string back to the original</span>
<a name="l01245"></a>01245 <span class="comment"> * string, replacing the relevant part of the</span>
<a name="l01246"></a>01246 <span class="comment"> * original string</span>
<a name="l01247"></a>01247 <span class="comment"> * - now any arrays in the original string that</span>
<a name="l01248"></a>01248 <span class="comment"> * contained the replaced string may have the</span>
<a name="l01249"></a>01249 <span class="comment"> * wrong length; so we have to fix that</span>
<a name="l01250"></a>01250 <span class="comment"> */</span>
<a name="l01251"></a>01251 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01252"></a>01252 reader_set_basic_variable_length (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l01253"></a>01253 <span class="keywordtype">int</span> current_type,
<a name="l01254"></a>01254 <span class="keyword">const</span> <span class="keywordtype">void</span> *value,
<a name="l01255"></a>01255 <span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *realign_root)
<a name="l01256"></a>01256 {
<a name="l01257"></a>01257 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l01258"></a>01258 <a class="code" href="structReplacementBlock.html">ReplacementBlock</a> block;
<a name="l01259"></a>01259 <a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> writer;
<a name="l01260"></a>01260
<a name="l01261"></a>01261 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (realign_root != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01262"></a>01262
<a name="l01263"></a>01263 retval = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01264"></a>01264
<a name="l01265"></a>01265 <span class="keywordflow">if</span> (!replacement_block_init (&block, reader))
<a name="l01266"></a>01266 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01267"></a>01267
<a name="l01268"></a>01268 <span class="comment">/* Write the new basic value */</span>
<a name="l01269"></a>01269 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l01270"></a>01270 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"INITIALIZING writer %p to write basic value at value_pos %d of replacement string\n"</span>,
<a name="l01271"></a>01271 &writer, _dbus_string_get_length (&block.replacement));
<a name="l01272"></a>01272 <span class="preprocessor">#endif</span>
<a name="l01273"></a>01273 <span class="preprocessor"></span> <a class="code" href="group__DBusMarshal.html#g1f101175ce6f33221fcb59f0b46349bd">_dbus_type_writer_init_values_only</a> (&writer,
<a name="l01274"></a>01274 reader-><a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a>,
<a name="l01275"></a>01275 reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>,
<a name="l01276"></a>01276 reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>,
<a name="l01277"></a>01277 &block.replacement,
<a name="l01278"></a>01278 _dbus_string_get_length (&block.replacement));
<a name="l01279"></a>01279 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l01280"></a>01280 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"WRITING basic value to writer %p (replacement string)\n"</span>, &writer);
<a name="l01281"></a>01281 <span class="preprocessor">#endif</span>
<a name="l01282"></a>01282 <span class="preprocessor"></span> <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#g0103b0214766b0ff1ca05bcc7f1e631b">_dbus_type_writer_write_basic</a> (&writer, current_type, value))
<a name="l01283"></a>01283 <span class="keywordflow">goto</span> out;
<a name="l01284"></a>01284
<a name="l01285"></a>01285 <span class="keywordflow">if</span> (!replacement_block_replace (&block,
<a name="l01286"></a>01286 reader,
<a name="l01287"></a>01287 realign_root))
<a name="l01288"></a>01288 <span class="keywordflow">goto</span> out;
<a name="l01289"></a>01289
<a name="l01290"></a>01290 retval = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01291"></a>01291
<a name="l01292"></a>01292 out:
<a name="l01293"></a>01293 replacement_block_free (&block);
<a name="l01294"></a>01294 <span class="keywordflow">return</span> retval;
<a name="l01295"></a>01295 }
<a name="l01296"></a>01296
<a name="l01297"></a>01297 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l01298"></a>01298 reader_set_basic_fixed_length (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l01299"></a>01299 <span class="keywordtype">int</span> current_type,
<a name="l01300"></a>01300 <span class="keyword">const</span> <span class="keywordtype">void</span> *value)
<a name="l01301"></a>01301 {
<a name="l01302"></a>01302 <a class="code" href="group__DBusMarshal.html#g854526bdf221a5e82b2e14581ac17d8f">_dbus_marshal_set_basic</a> ((<a class="code" href="structDBusString.html">DBusString</a>*) reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>,
<a name="l01303"></a>01303 reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l01304"></a>01304 current_type,
<a name="l01305"></a>01305 value,
<a name="l01306"></a>01306 reader-><a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a>,
<a name="l01307"></a>01307 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01308"></a>01308 }
<a name="l01309"></a>01309
<a name="l01344"></a>01344 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01345"></a><a class="code" href="group__DBusMarshal.html#gaf11ca429434c2c280f5fad34ed95204">01345</a> <a class="code" href="group__DBusMarshal.html#gaf11ca429434c2c280f5fad34ed95204">_dbus_type_reader_set_basic</a> (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l01346"></a>01346 <span class="keyword">const</span> <span class="keywordtype">void</span> *value,
<a name="l01347"></a>01347 <span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *realign_root)
<a name="l01348"></a>01348 {
<a name="l01349"></a>01349 <span class="keywordtype">int</span> current_type;
<a name="l01350"></a>01350
<a name="l01351"></a>01351 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a>-><a class="code" href="structDBusTypeReaderClass.html#d886037cd736e6f5cdbefb834b0bd5e7">types_only</a>);
<a name="l01352"></a>01352 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (reader-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a> == realign_root-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>);
<a name="l01353"></a>01353 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> >= realign_root-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>);
<a name="l01354"></a>01354
<a name="l01355"></a>01355 current_type = <a class="code" href="group__DBusMarshal.html#gb8e39cb8084247d54d7f272c51622a73">_dbus_type_reader_get_current_type</a> (reader);
<a name="l01356"></a>01356
<a name="l01357"></a>01357 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l01358"></a>01358 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" SET BASIC type reader %p type_pos = %d value_pos = %d remaining sig '%s' realign_root = %p with value_pos %d current_type = %s\n"</span>,
<a name="l01359"></a>01359 reader, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l01360"></a>01360 _dbus_string_get_const_data_len (reader-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a>, reader-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>, 0),
<a name="l01361"></a>01361 realign_root,
<a name="l01362"></a>01362 realign_root ? realign_root-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> : -1,
<a name="l01363"></a>01363 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (current_type));
<a name="l01364"></a>01364 <a class="code" href="group__DBusMarshal.html#g3926bb35edf78d114cf0c341fe3258e0">_dbus_verbose_bytes_of_string</a> (realign_root-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>, realign_root-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l01365"></a>01365 _dbus_string_get_length (realign_root-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>) -
<a name="l01366"></a>01366 realign_root-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>);
<a name="l01367"></a>01367 <span class="preprocessor">#endif</span>
<a name="l01368"></a>01368 <span class="preprocessor"></span>
<a name="l01369"></a>01369 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (<a class="code" href="group__DBusSignature.html#g2d8d39cba08f450645a17651478a0ad4">dbus_type_is_basic</a> (current_type));
<a name="l01370"></a>01370
<a name="l01371"></a>01371 <span class="keywordflow">if</span> (<a class="code" href="group__DBusSignature.html#g435ffc74ae015cc193175f5b864872bc">dbus_type_is_fixed</a> (current_type))
<a name="l01372"></a>01372 {
<a name="l01373"></a>01373 reader_set_basic_fixed_length (reader, current_type, value);
<a name="l01374"></a>01374 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01375"></a>01375 }
<a name="l01376"></a>01376 <span class="keywordflow">else</span>
<a name="l01377"></a>01377 {
<a name="l01378"></a>01378 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (realign_root != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01379"></a>01379 <span class="keywordflow">return</span> reader_set_basic_variable_length (reader, current_type,
<a name="l01380"></a>01380 value, realign_root);
<a name="l01381"></a>01381 }
<a name="l01382"></a>01382 }
<a name="l01383"></a>01383
<a name="l01401"></a>01401 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01402"></a><a class="code" href="group__DBusMarshal.html#ga4057610b3d9e81fed212c17f6599516">01402</a> <a class="code" href="group__DBusMarshal.html#ga4057610b3d9e81fed212c17f6599516">_dbus_type_reader_delete</a> (<a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l01403"></a>01403 <span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *realign_root)
<a name="l01404"></a>01404 {
<a name="l01405"></a>01405 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l01406"></a>01406 <a class="code" href="structReplacementBlock.html">ReplacementBlock</a> block;
<a name="l01407"></a>01407
<a name="l01408"></a>01408 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (realign_root != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01409"></a>01409 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (reader-><a class="code" href="structDBusTypeReader.html#238bd0d5a30d8f59fd9b71c95af25563">klass</a> == &array_reader_class);
<a name="l01410"></a>01410
<a name="l01411"></a>01411 retval = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01412"></a>01412
<a name="l01413"></a>01413 <span class="keywordflow">if</span> (!replacement_block_init (&block, reader))
<a name="l01414"></a>01414 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01415"></a>01415
<a name="l01416"></a>01416 <span class="keywordflow">if</span> (!replacement_block_replace (&block,
<a name="l01417"></a>01417 reader,
<a name="l01418"></a>01418 realign_root))
<a name="l01419"></a>01419 <span class="keywordflow">goto</span> out;
<a name="l01420"></a>01420
<a name="l01421"></a>01421 retval = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01422"></a>01422
<a name="l01423"></a>01423 out:
<a name="l01424"></a>01424 replacement_block_free (&block);
<a name="l01425"></a>01425 <span class="keywordflow">return</span> retval;
<a name="l01426"></a>01426 }
<a name="l01427"></a>01427
<a name="l01436"></a>01436 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01437"></a><a class="code" href="group__DBusMarshal.html#g229b3858f43ec56de852f62914cf3568">01437</a> <a class="code" href="group__DBusMarshal.html#g229b3858f43ec56de852f62914cf3568">_dbus_type_reader_greater_than</a> (<span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *lhs,
<a name="l01438"></a>01438 <span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *rhs)
<a name="l01439"></a>01439 {
<a name="l01440"></a>01440 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (lhs-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a> == rhs-><a class="code" href="structDBusTypeReader.html#4065d7775758beb044ee23a71875571f">value_str</a>);
<a name="l01441"></a>01441
<a name="l01442"></a>01442 <span class="keywordflow">return</span> lhs-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> > rhs-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>;
<a name="l01443"></a>01443 }
<a name="l01444"></a>01444
<a name="l01445"></a>01445 <span class="comment">/*</span>
<a name="l01446"></a>01446 <span class="comment"> *</span>
<a name="l01447"></a>01447 <span class="comment"> *</span>
<a name="l01448"></a>01448 <span class="comment"> * DBusTypeWriter</span>
<a name="l01449"></a>01449 <span class="comment"> *</span>
<a name="l01450"></a>01450 <span class="comment"> *</span>
<a name="l01451"></a>01451 <span class="comment"> *</span>
<a name="l01452"></a>01452 <span class="comment"> */</span>
<a name="l01453"></a>01453
<a name="l01474"></a>01474 <span class="keywordtype">void</span>
<a name="l01475"></a><a class="code" href="group__DBusMarshal.html#gdeb83962df31e074874e957d17a0d4d1">01475</a> <a class="code" href="group__DBusMarshal.html#gdeb83962df31e074874e957d17a0d4d1">_dbus_type_writer_init</a> (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l01476"></a>01476 <span class="keywordtype">int</span> byte_order,
<a name="l01477"></a>01477 <a class="code" href="structDBusString.html">DBusString</a> *type_str,
<a name="l01478"></a>01478 <span class="keywordtype">int</span> type_pos,
<a name="l01479"></a>01479 <a class="code" href="structDBusString.html">DBusString</a> *value_str,
<a name="l01480"></a>01480 <span class="keywordtype">int</span> value_pos)
<a name="l01481"></a>01481 {
<a name="l01482"></a>01482 writer-><a class="code" href="structDBusTypeWriter.html#6c4baf0b7148cf3f76924b654dada148">byte_order</a> = byte_order;
<a name="l01483"></a>01483 writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> = type_str;
<a name="l01484"></a>01484 writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a> = type_pos;
<a name="l01485"></a>01485 writer-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a> = value_str;
<a name="l01486"></a>01486 writer-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a> = value_pos;
<a name="l01487"></a>01487 writer-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> = <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>;
<a name="l01488"></a>01488 writer-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01489"></a>01489 writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01490"></a>01490
<a name="l01491"></a>01491 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l01492"></a>01492 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"writer %p init remaining sig '%s'\n"</span>, writer,
<a name="l01493"></a>01493 writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> ?
<a name="l01494"></a>01494 _dbus_string_get_const_data_len (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>, writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>, 0) :
<a name="l01495"></a>01495 <span class="stringliteral">"unknown"</span>);
<a name="l01496"></a>01496 <span class="preprocessor">#endif</span>
<a name="l01497"></a>01497 <span class="preprocessor"></span>}
<a name="l01498"></a>01498
<a name="l01509"></a>01509 <span class="keywordtype">void</span>
<a name="l01510"></a><a class="code" href="group__DBusMarshal.html#ga9ecf7e96d5323bc1da9cdf0c3f2c1e7">01510</a> <a class="code" href="group__DBusMarshal.html#ga9ecf7e96d5323bc1da9cdf0c3f2c1e7">_dbus_type_writer_init_types_delayed</a> (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l01511"></a>01511 <span class="keywordtype">int</span> byte_order,
<a name="l01512"></a>01512 <a class="code" href="structDBusString.html">DBusString</a> *value_str,
<a name="l01513"></a>01513 <span class="keywordtype">int</span> value_pos)
<a name="l01514"></a>01514 {
<a name="l01515"></a>01515 <a class="code" href="group__DBusMarshal.html#gdeb83962df31e074874e957d17a0d4d1">_dbus_type_writer_init</a> (writer, byte_order,
<a name="l01516"></a>01516 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, 0, value_str, value_pos);
<a name="l01517"></a>01517 }
<a name="l01518"></a>01518
<a name="l01527"></a>01527 <span class="keywordtype">void</span>
<a name="l01528"></a><a class="code" href="group__DBusMarshal.html#g863b2f232a21582f9e6fe1951b09da91">01528</a> <a class="code" href="group__DBusMarshal.html#g863b2f232a21582f9e6fe1951b09da91">_dbus_type_writer_add_types</a> (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l01529"></a>01529 <a class="code" href="structDBusString.html">DBusString</a> *type_str,
<a name="l01530"></a>01530 <span class="keywordtype">int</span> type_pos)
<a name="l01531"></a>01531 {
<a name="l01532"></a>01532 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) <span class="comment">/* keeps us from using this as setter */</span>
<a name="l01533"></a>01533 {
<a name="l01534"></a>01534 writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> = type_str;
<a name="l01535"></a>01535 writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a> = type_pos;
<a name="l01536"></a>01536 }
<a name="l01537"></a>01537 }
<a name="l01538"></a>01538
<a name="l01544"></a>01544 <span class="keywordtype">void</span>
<a name="l01545"></a><a class="code" href="group__DBusMarshal.html#g34d675b57c7e6569707d22ba76ae010c">01545</a> <a class="code" href="group__DBusMarshal.html#g34d675b57c7e6569707d22ba76ae010c">_dbus_type_writer_remove_types</a> (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer)
<a name="l01546"></a>01546 {
<a name="l01547"></a>01547 writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01548"></a>01548 writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a> = -1;
<a name="l01549"></a>01549 }
<a name="l01550"></a>01550
<a name="l01565"></a>01565 <span class="keywordtype">void</span>
<a name="l01566"></a><a class="code" href="group__DBusMarshal.html#g1f101175ce6f33221fcb59f0b46349bd">01566</a> <a class="code" href="group__DBusMarshal.html#g1f101175ce6f33221fcb59f0b46349bd">_dbus_type_writer_init_values_only</a> (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l01567"></a>01567 <span class="keywordtype">int</span> byte_order,
<a name="l01568"></a>01568 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *type_str,
<a name="l01569"></a>01569 <span class="keywordtype">int</span> type_pos,
<a name="l01570"></a>01570 <a class="code" href="structDBusString.html">DBusString</a> *value_str,
<a name="l01571"></a>01571 <span class="keywordtype">int</span> value_pos)
<a name="l01572"></a>01572 {
<a name="l01573"></a>01573 <a class="code" href="group__DBusMarshal.html#gdeb83962df31e074874e957d17a0d4d1">_dbus_type_writer_init</a> (writer, byte_order,
<a name="l01574"></a>01574 (<a class="code" href="structDBusString.html">DBusString</a>*)type_str, type_pos,
<a name="l01575"></a>01575 value_str, value_pos);
<a name="l01576"></a>01576
<a name="l01577"></a>01577 writer-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01578"></a>01578 }
<a name="l01579"></a>01579
<a name="l01580"></a>01580 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01581"></a>01581 _dbus_type_writer_write_basic_no_typecode (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l01582"></a>01582 <span class="keywordtype">int</span> type,
<a name="l01583"></a>01583 <span class="keyword">const</span> <span class="keywordtype">void</span> *value)
<a name="l01584"></a>01584 {
<a name="l01585"></a>01585 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a>)
<a name="l01586"></a>01586 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g54323d48921de8c5bd04ae01548312bb">_dbus_marshal_write_basic</a> (writer-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>,
<a name="l01587"></a>01587 writer-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>,
<a name="l01588"></a>01588 type,
<a name="l01589"></a>01589 value,
<a name="l01590"></a>01590 writer-><a class="code" href="structDBusTypeWriter.html#6c4baf0b7148cf3f76924b654dada148">byte_order</a>,
<a name="l01591"></a>01591 &writer-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>);
<a name="l01592"></a>01592 <span class="keywordflow">else</span>
<a name="l01593"></a>01593 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01594"></a>01594 }
<a name="l01595"></a>01595
<a name="l01596"></a>01596 <span class="comment">/* If our parent is an array, things are a little bit complicated.</span>
<a name="l01597"></a>01597 <span class="comment"> *</span>
<a name="l01598"></a>01598 <span class="comment"> * The parent must have a complete element type, such as</span>
<a name="l01599"></a>01599 <span class="comment"> * "i" or "aai" or "(ii)" or "a(ii)". There can't be</span>
<a name="l01600"></a>01600 <span class="comment"> * unclosed parens, or an "a" with no following type.</span>
<a name="l01601"></a>01601 <span class="comment"> *</span>
<a name="l01602"></a>01602 <span class="comment"> * To recurse, the only allowed operation is to recurse into the</span>
<a name="l01603"></a>01603 <span class="comment"> * first type in the element type. So for "i" you can't recurse, for</span>
<a name="l01604"></a>01604 <span class="comment"> * "ai" you can recurse into the array, for "(ii)" you can recurse</span>
<a name="l01605"></a>01605 <span class="comment"> * into the struct.</span>
<a name="l01606"></a>01606 <span class="comment"> *</span>
<a name="l01607"></a>01607 <span class="comment"> * If you recurse into the array for "ai", then you must specify</span>
<a name="l01608"></a>01608 <span class="comment"> * "i" for the element type of the array you recurse into.</span>
<a name="l01609"></a>01609 <span class="comment"> *</span>
<a name="l01610"></a>01610 <span class="comment"> * While inside an array at any level, we need to avoid writing to</span>
<a name="l01611"></a>01611 <span class="comment"> * type_str, since the type only appears once for the whole array,</span>
<a name="l01612"></a>01612 <span class="comment"> * it does not appear for each array element.</span>
<a name="l01613"></a>01613 <span class="comment"> *</span>
<a name="l01614"></a>01614 <span class="comment"> * While inside an array type_pos points to the expected next</span>
<a name="l01615"></a>01615 <span class="comment"> * typecode, rather than the next place we could write a typecode.</span>
<a name="l01616"></a>01616 <span class="comment"> */</span>
<a name="l01617"></a>01617 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l01618"></a>01618 writer_recurse_init_and_check (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l01619"></a>01619 <span class="keywordtype">int</span> container_type,
<a name="l01620"></a>01620 <a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *sub)
<a name="l01621"></a>01621 {
<a name="l01622"></a>01622 <a class="code" href="group__DBusMarshal.html#gdeb83962df31e074874e957d17a0d4d1">_dbus_type_writer_init</a> (sub,
<a name="l01623"></a>01623 writer-><a class="code" href="structDBusTypeWriter.html#6c4baf0b7148cf3f76924b654dada148">byte_order</a>,
<a name="l01624"></a>01624 writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>,
<a name="l01625"></a>01625 writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>,
<a name="l01626"></a>01626 writer-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>,
<a name="l01627"></a>01627 writer-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>);
<a name="l01628"></a>01628
<a name="l01629"></a>01629 sub-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> = container_type;
<a name="l01630"></a>01630
<a name="l01631"></a>01631 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a> ||
<a name="l01632"></a>01632 (sub-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a> || sub-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> == <a class="code" href="group__DBusProtocol.html#g4aa7a463ad2bce4e9aa95e3e397ddcf1">DBUS_TYPE_VARIANT</a>))
<a name="l01633"></a>01633 sub-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01634"></a>01634 <span class="keywordflow">else</span>
<a name="l01635"></a>01635 sub-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01636"></a>01636
<a name="l01637"></a>01637 sub-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a> = writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a>;
<a name="l01638"></a>01638
<a name="l01639"></a>01639 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l01640"></a>01640 <span class="preprocessor"></span> <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a> && writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>)
<a name="l01641"></a>01641 {
<a name="l01642"></a>01642 <span class="keywordtype">int</span> expected;
<a name="l01643"></a>01643
<a name="l01644"></a>01644 expected = <a class="code" href="group__DBusMarshal.html#g5866a0fd058aed3396402d0456144fd2">_dbus_first_type_in_signature</a> (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>, writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>);
<a name="l01645"></a>01645
<a name="l01646"></a>01646 <span class="keywordflow">if</span> (expected != sub-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a>)
<a name="l01647"></a>01647 {
<a name="l01648"></a>01648 <span class="keywordflow">if</span> (expected != <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>)
<a name="l01649"></a>01649 <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"Writing an element of type %s, but the expected type here is %s\n"</span>
<a name="l01650"></a>01650 <span class="stringliteral">"The overall signature expected here was '%s' and we are on byte %d of that signature.\n"</span>,
<a name="l01651"></a>01651 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (sub-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a>),
<a name="l01652"></a>01652 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (expected),
<a name="l01653"></a>01653 _dbus_string_get_const_data (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>), writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>);
<a name="l01654"></a>01654 <span class="keywordflow">else</span>
<a name="l01655"></a>01655 <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"Writing an element of type %s, but no value is expected here\n"</span>,
<a name="l01656"></a>01656 <span class="stringliteral">"The overall signature expected here was '%s' and we are on byte %d of that signature.\n"</span>,
<a name="l01657"></a>01657 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (sub-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a>),
<a name="l01658"></a>01658 _dbus_string_get_const_data (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>), writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>);
<a name="l01659"></a>01659
<a name="l01660"></a>01660 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"bad array element or variant content written"</span>);
<a name="l01661"></a>01661 }
<a name="l01662"></a>01662 }
<a name="l01663"></a>01663 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_DISABLE_CHECKS */</span>
<a name="l01664"></a>01664
<a name="l01665"></a>01665 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l01666"></a>01666 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type writer %p recurse parent %s type_pos = %d value_pos = %d is_expectation = %d remaining sig '%s' enabled = %d\n"</span>,
<a name="l01667"></a>01667 writer,
<a name="l01668"></a>01668 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (writer-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a>),
<a name="l01669"></a>01669 writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>, writer-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>, writer-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a>,
<a name="l01670"></a>01670 writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> ?
<a name="l01671"></a>01671 _dbus_string_get_const_data_len (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>, writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>, 0) :
<a name="l01672"></a>01672 <span class="stringliteral">"unknown"</span>,
<a name="l01673"></a>01673 writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a>);
<a name="l01674"></a>01674 _dbus_verbose (<span class="stringliteral">" type writer %p recurse sub %s type_pos = %d value_pos = %d is_expectation = %d enabled = %d\n"</span>,
<a name="l01675"></a>01675 sub,
<a name="l01676"></a>01676 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (sub-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a>),
<a name="l01677"></a>01677 sub-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>, sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>,
<a name="l01678"></a>01678 sub-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a>,
<a name="l01679"></a>01679 sub-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a>);
<a name="l01680"></a>01680 <span class="preprocessor">#endif</span>
<a name="l01681"></a>01681 <span class="preprocessor"></span>}
<a name="l01682"></a>01682
<a name="l01683"></a>01683 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01684"></a>01684 write_or_verify_typecode (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l01685"></a>01685 <span class="keywordtype">int</span> typecode)
<a name="l01686"></a>01686 {
<a name="l01687"></a>01687 <span class="comment">/* A subwriter inside an array or variant will have type_pos</span>
<a name="l01688"></a>01688 <span class="comment"> * pointing to the expected typecode; a writer not inside an array</span>
<a name="l01689"></a>01689 <span class="comment"> * or variant has type_pos pointing to the next place to insert a</span>
<a name="l01690"></a>01690 <span class="comment"> * typecode.</span>
<a name="l01691"></a>01691 <span class="comment"> */</span>
<a name="l01692"></a>01692 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l01693"></a>01693 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type writer %p write_or_verify start type_pos = %d remaining sig '%s' enabled = %d\n"</span>,
<a name="l01694"></a>01694 writer, writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>,
<a name="l01695"></a>01695 writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> ?
<a name="l01696"></a>01696 _dbus_string_get_const_data_len (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>, writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>, 0) :
<a name="l01697"></a>01697 <span class="stringliteral">"unknown"</span>,
<a name="l01698"></a>01698 writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a>);
<a name="l01699"></a>01699 <span class="preprocessor">#endif</span>
<a name="l01700"></a>01700 <span class="preprocessor"></span>
<a name="l01701"></a>01701 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01702"></a>01702 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01703"></a>01703
<a name="l01704"></a>01704 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a>)
<a name="l01705"></a>01705 {
<a name="l01706"></a>01706 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l01707"></a>01707 <span class="preprocessor"></span> {
<a name="l01708"></a>01708 <span class="keywordtype">int</span> expected;
<a name="l01709"></a>01709
<a name="l01710"></a>01710 expected = _dbus_string_get_byte (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>, writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>);
<a name="l01711"></a>01711
<a name="l01712"></a>01712 <span class="keywordflow">if</span> (expected != typecode)
<a name="l01713"></a>01713 {
<a name="l01714"></a>01714 <span class="keywordflow">if</span> (expected != <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>)
<a name="l01715"></a>01715 <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"Array or variant type requires that type %s be written, but %s was written.\n"</span>
<a name="l01716"></a>01716 <span class="stringliteral">"The overall signature expected here was '%s' and we are on byte %d of that signature.\n"</span>,
<a name="l01717"></a>01717 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (expected), <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (typecode),
<a name="l01718"></a>01718 _dbus_string_get_const_data (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>), writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>);
<a name="l01719"></a>01719 <span class="keywordflow">else</span>
<a name="l01720"></a>01720 <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"Array or variant type wasn't expecting any more values to be written into it, but a value %s was written.\n"</span>
<a name="l01721"></a>01721 <span class="stringliteral">"The overall signature expected here was '%s' and we are on byte %d of that signature.\n"</span>,
<a name="l01722"></a>01722 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (typecode),
<a name="l01723"></a>01723 _dbus_string_get_const_data (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>), writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>);
<a name="l01724"></a>01724 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"bad type inserted somewhere inside an array or variant"</span>);
<a name="l01725"></a>01725 }
<a name="l01726"></a>01726 }
<a name="l01727"></a>01727 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_DISABLE_CHECKS */</span>
<a name="l01728"></a>01728
<a name="l01729"></a>01729 <span class="comment">/* if immediately inside an array we'd always be appending an element,</span>
<a name="l01730"></a>01730 <span class="comment"> * so the expected type doesn't change; if inside a struct or something</span>
<a name="l01731"></a>01731 <span class="comment"> * below an array, we need to move through said struct or something.</span>
<a name="l01732"></a>01732 <span class="comment"> */</span>
<a name="l01733"></a>01733 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> != <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>)
<a name="l01734"></a>01734 writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a> += 1;
<a name="l01735"></a>01735 }
<a name="l01736"></a>01736 <span class="keywordflow">else</span>
<a name="l01737"></a>01737 {
<a name="l01738"></a>01738 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gb0770800dce6df97e5d246105a44e7b4">_dbus_string_insert_byte</a> (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>,
<a name="l01739"></a>01739 writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>,
<a name="l01740"></a>01740 typecode))
<a name="l01741"></a>01741 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01742"></a>01742
<a name="l01743"></a>01743 writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a> += 1;
<a name="l01744"></a>01744 }
<a name="l01745"></a>01745
<a name="l01746"></a>01746 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l01747"></a>01747 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type writer %p write_or_verify end type_pos = %d remaining sig '%s'\n"</span>,
<a name="l01748"></a>01748 writer, writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>,
<a name="l01749"></a>01749 _dbus_string_get_const_data_len (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>, writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>, 0));
<a name="l01750"></a>01750 <span class="preprocessor">#endif</span>
<a name="l01751"></a>01751 <span class="preprocessor"></span>
<a name="l01752"></a>01752 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01753"></a>01753 }
<a name="l01754"></a>01754
<a name="l01755"></a>01755 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01756"></a>01756 writer_recurse_struct_or_dict_entry (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l01757"></a>01757 <span class="keywordtype">int</span> begin_char,
<a name="l01758"></a>01758 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *contained_type,
<a name="l01759"></a>01759 <span class="keywordtype">int</span> contained_type_start,
<a name="l01760"></a>01760 <span class="keywordtype">int</span> contained_type_len,
<a name="l01761"></a>01761 <a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *sub)
<a name="l01762"></a>01762 {
<a name="l01763"></a>01763 <span class="comment">/* FIXME right now contained_type is ignored; we could probably</span>
<a name="l01764"></a>01764 <span class="comment"> * almost trivially fix the code so if it's present we</span>
<a name="l01765"></a>01765 <span class="comment"> * write it out and then set type_pos_is_expectation</span>
<a name="l01766"></a>01766 <span class="comment"> */</span>
<a name="l01767"></a>01767
<a name="l01768"></a>01768 <span class="comment">/* Ensure that we'll be able to add alignment padding and the typecode */</span>
<a name="l01769"></a>01769 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a>)
<a name="l01770"></a>01770 {
<a name="l01771"></a>01771 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g4764e75c464356408fc1a12df93177c1">_dbus_string_alloc_space</a> (sub-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>, 8))
<a name="l01772"></a>01772 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01773"></a>01773 }
<a name="l01774"></a>01774
<a name="l01775"></a>01775 <span class="keywordflow">if</span> (!write_or_verify_typecode (sub, begin_char))
<a name="l01776"></a>01776 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"failed to insert struct typecode after prealloc"</span>);
<a name="l01777"></a>01777
<a name="l01778"></a>01778 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a>)
<a name="l01779"></a>01779 {
<a name="l01780"></a>01780 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga0964d662ad17c58eb044c1b153017a6">_dbus_string_insert_bytes</a> (sub->value_str,
<a name="l01781"></a>01781 sub->value_pos,
<a name="l01782"></a>01782 _DBUS_ALIGN_VALUE (sub->value_pos, 8) - sub->value_pos,
<a name="l01783"></a>01783 <span class="charliteral">'\0'</span>))
<a name="l01784"></a>01784 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"should not have failed to insert alignment padding for struct"</span>);
<a name="l01785"></a>01785 sub->value_pos = _DBUS_ALIGN_VALUE (sub->value_pos, 8);
<a name="l01786"></a>01786 }
<a name="l01787"></a>01787
<a name="l01788"></a>01788 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01789"></a>01789 }
<a name="l01790"></a>01790
<a name="l01791"></a>01791
<a name="l01792"></a>01792 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01793"></a>01793 writer_recurse_array (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l01794"></a>01794 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *contained_type,
<a name="l01795"></a>01795 <span class="keywordtype">int</span> contained_type_start,
<a name="l01796"></a>01796 <span class="keywordtype">int</span> contained_type_len,
<a name="l01797"></a>01797 <a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *sub,
<a name="l01798"></a>01798 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> is_array_append)
<a name="l01799"></a>01799 {
<a name="l01800"></a>01800 <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> value = 0;
<a name="l01801"></a>01801 <span class="keywordtype">int</span> alignment;
<a name="l01802"></a>01802 <span class="keywordtype">int</span> aligned;
<a name="l01803"></a>01803
<a name="l01804"></a>01804 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l01805"></a>01805 <span class="preprocessor"></span> <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a> &&
<a name="l01806"></a>01806 writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>)
<a name="l01807"></a>01807 {
<a name="l01808"></a>01808 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g2095c2a797ae245521a7588b32279110">_dbus_string_equal_substring</a> (contained_type,
<a name="l01809"></a>01809 contained_type_start,
<a name="l01810"></a>01810 contained_type_len,
<a name="l01811"></a>01811 writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>,
<a name="l01812"></a>01812 writer-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.element_type_pos + 1))
<a name="l01813"></a>01813 {
<a name="l01814"></a>01814 <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"Writing an array of '%s' but this is incompatible with the expected type of elements in the parent array\n"</span>,
<a name="l01815"></a>01815 _dbus_string_get_const_data_len (contained_type,
<a name="l01816"></a>01816 contained_type_start,
<a name="l01817"></a>01817 contained_type_len));
<a name="l01818"></a>01818 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"incompatible type for child array"</span>);
<a name="l01819"></a>01819 }
<a name="l01820"></a>01820 }
<a name="l01821"></a>01821 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_DISABLE_CHECKS */</span>
<a name="l01822"></a>01822
<a name="l01823"></a>01823 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a> && !is_array_append)
<a name="l01824"></a>01824 {
<a name="l01825"></a>01825 <span class="comment">/* 3 pad + 4 bytes for the array length, and 4 bytes possible padding</span>
<a name="l01826"></a>01826 <span class="comment"> * before array values</span>
<a name="l01827"></a>01827 <span class="comment"> */</span>
<a name="l01828"></a>01828 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g4764e75c464356408fc1a12df93177c1">_dbus_string_alloc_space</a> (sub-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>, 3 + 4 + 4))
<a name="l01829"></a>01829 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01830"></a>01830 }
<a name="l01831"></a>01831
<a name="l01832"></a>01832 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01833"></a>01833 {
<a name="l01834"></a>01834 sub-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a> += 1; <span class="comment">/* move to point to the element type, since type_pos</span>
<a name="l01835"></a>01835 <span class="comment"> * should be the expected type for further writes</span>
<a name="l01836"></a>01836 <span class="comment"> */</span>
<a name="l01837"></a>01837 sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.element_type_pos = sub-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>;
<a name="l01838"></a>01838 }
<a name="l01839"></a>01839
<a name="l01840"></a>01840 <span class="keywordflow">if</span> (!writer-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a>)
<a name="l01841"></a>01841 {
<a name="l01842"></a>01842 <span class="comment">/* sub is a toplevel/outermost array so we need to write the type data */</span>
<a name="l01843"></a>01843
<a name="l01844"></a>01844 <span class="comment">/* alloc space for array typecode, element signature */</span>
<a name="l01845"></a>01845 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g4764e75c464356408fc1a12df93177c1">_dbus_string_alloc_space</a> (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>, 1 + contained_type_len))
<a name="l01846"></a>01846 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01847"></a>01847
<a name="l01848"></a>01848 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gb0770800dce6df97e5d246105a44e7b4">_dbus_string_insert_byte</a> (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>,
<a name="l01849"></a>01849 writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>,
<a name="l01850"></a>01850 <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>))
<a name="l01851"></a>01851 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"failed to insert array typecode after prealloc"</span>);
<a name="l01852"></a>01852
<a name="l01853"></a>01853 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gf5f13bc7ac7a623516930d26ae2589bf">_dbus_string_copy_len</a> (contained_type,
<a name="l01854"></a>01854 contained_type_start, contained_type_len,
<a name="l01855"></a>01855 sub-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>,
<a name="l01856"></a>01856 sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.element_type_pos))
<a name="l01857"></a>01857 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"should not have failed to insert array element typecodes"</span>);
<a name="l01858"></a>01858 }
<a name="l01859"></a>01859
<a name="l01860"></a>01860 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01861"></a>01861 {
<a name="l01862"></a>01862 <span class="comment">/* If the parent is an array, we hold type_pos pointing at the array element type;</span>
<a name="l01863"></a>01863 <span class="comment"> * otherwise advance it to reflect the array value we just recursed into</span>
<a name="l01864"></a>01864 <span class="comment"> */</span>
<a name="l01865"></a>01865 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> != <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>)
<a name="l01866"></a>01866 writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a> += 1 + contained_type_len;
<a name="l01867"></a>01867 <span class="keywordflow">else</span>
<a name="l01868"></a>01868 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (writer-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a>); <span class="comment">/* because it's an array */</span>
<a name="l01869"></a>01869 }
<a name="l01870"></a>01870
<a name="l01871"></a>01871 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a>)
<a name="l01872"></a>01872 {
<a name="l01873"></a>01873 <span class="comment">/* Write (or jump over, if is_array_append) the length */</span>
<a name="l01874"></a>01874 sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.len_pos = _DBUS_ALIGN_VALUE (sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>, 4);
<a name="l01875"></a>01875
<a name="l01876"></a>01876 <span class="keywordflow">if</span> (is_array_append)
<a name="l01877"></a>01877 {
<a name="l01878"></a>01878 sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a> += 4;
<a name="l01879"></a>01879 }
<a name="l01880"></a>01880 <span class="keywordflow">else</span>
<a name="l01881"></a>01881 {
<a name="l01882"></a>01882 <span class="keywordflow">if</span> (!_dbus_type_writer_write_basic_no_typecode (sub, <a class="code" href="group__DBusProtocol.html#gedb1740bd8a9174b98ac593eded25d49">DBUS_TYPE_UINT32</a>,
<a name="l01883"></a>01883 &value))
<a name="l01884"></a>01884 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"should not have failed to insert array len"</span>);
<a name="l01885"></a>01885 }
<a name="l01886"></a>01886
<a name="l01887"></a>01887 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.len_pos == sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a> - 4);
<a name="l01888"></a>01888
<a name="l01889"></a>01889 <span class="comment">/* Write alignment padding for array elements</span>
<a name="l01890"></a>01890 <span class="comment"> * Note that we write the padding *even for empty arrays*</span>
<a name="l01891"></a>01891 <span class="comment"> * to avoid wonky special cases</span>
<a name="l01892"></a>01892 <span class="comment"> */</span>
<a name="l01893"></a>01893 alignment = element_type_get_alignment (contained_type, contained_type_start);
<a name="l01894"></a>01894
<a name="l01895"></a>01895 aligned = _DBUS_ALIGN_VALUE (sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>, alignment);
<a name="l01896"></a>01896 <span class="keywordflow">if</span> (aligned != sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>)
<a name="l01897"></a>01897 {
<a name="l01898"></a>01898 <span class="keywordflow">if</span> (!is_array_append)
<a name="l01899"></a>01899 {
<a name="l01900"></a>01900 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga0964d662ad17c58eb044c1b153017a6">_dbus_string_insert_bytes</a> (sub-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>,
<a name="l01901"></a>01901 sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>,
<a name="l01902"></a>01902 aligned - sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>,
<a name="l01903"></a>01903 <span class="charliteral">'\0'</span>))
<a name="l01904"></a>01904 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"should not have failed to insert alignment padding"</span>);
<a name="l01905"></a>01905 }
<a name="l01906"></a>01906
<a name="l01907"></a>01907 sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a> = aligned;
<a name="l01908"></a>01908 }
<a name="l01909"></a>01909
<a name="l01910"></a>01910 sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.start_pos = sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>;
<a name="l01911"></a>01911
<a name="l01912"></a>01912 <span class="keywordflow">if</span> (is_array_append)
<a name="l01913"></a>01913 {
<a name="l01914"></a>01914 <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> len;
<a name="l01915"></a>01915
<a name="l01916"></a>01916 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (_DBUS_ALIGN_VALUE (sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.len_pos, 4) ==
<a name="l01917"></a>01917 (<span class="keywordtype">unsigned</span>) sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.len_pos);
<a name="l01918"></a>01918 len = _dbus_unpack_uint32 (sub-><a class="code" href="structDBusTypeWriter.html#6c4baf0b7148cf3f76924b654dada148">byte_order</a>,
<a name="l01919"></a>01919 _dbus_string_get_const_data_len (sub-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>,
<a name="l01920"></a>01920 sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.len_pos,
<a name="l01921"></a>01921 4));
<a name="l01922"></a>01922
<a name="l01923"></a>01923 sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a> += len;
<a name="l01924"></a>01924 }
<a name="l01925"></a>01925 }
<a name="l01926"></a>01926 <span class="keywordflow">else</span>
<a name="l01927"></a>01927 {
<a name="l01928"></a>01928 <span class="comment">/* not enabled, so we won't write the len_pos; set it to -1 to so indicate */</span>
<a name="l01929"></a>01929 sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.len_pos = -1;
<a name="l01930"></a>01930 sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.start_pos = sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>;
<a name="l01931"></a>01931 }
<a name="l01932"></a>01932
<a name="l01933"></a>01933 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.len_pos < sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.start_pos);
<a name="l01934"></a>01934 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (is_array_append || sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.start_pos == sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>);
<a name="l01935"></a>01935
<a name="l01936"></a>01936 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l01937"></a>01937 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type writer %p recurse array done remaining sig '%s' array start_pos = %d len_pos = %d value_pos = %d\n"</span>, sub,
<a name="l01938"></a>01938 sub-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> ?
<a name="l01939"></a>01939 _dbus_string_get_const_data_len (sub-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>, sub-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>, 0) :
<a name="l01940"></a>01940 <span class="stringliteral">"unknown"</span>,
<a name="l01941"></a>01941 sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.start_pos, sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.len_pos, sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>);
<a name="l01942"></a>01942 <span class="preprocessor">#endif</span>
<a name="l01943"></a>01943 <span class="preprocessor"></span>
<a name="l01944"></a>01944 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01945"></a>01945 }
<a name="l01946"></a>01946
<a name="l01947"></a>01947 <span class="comment">/* Variant value will normally have:</span>
<a name="l01948"></a>01948 <span class="comment"> * 1 byte signature length not including nul</span>
<a name="l01949"></a>01949 <span class="comment"> * signature typecodes (nul terminated)</span>
<a name="l01950"></a>01950 <span class="comment"> * padding to alignment of contained type</span>
<a name="l01951"></a>01951 <span class="comment"> * body according to signature</span>
<a name="l01952"></a>01952 <span class="comment"> *</span>
<a name="l01953"></a>01953 <span class="comment"> * The signature string can only have a single type</span>
<a name="l01954"></a>01954 <span class="comment"> * in it but that type may be complex/recursive.</span>
<a name="l01955"></a>01955 <span class="comment"> *</span>
<a name="l01956"></a>01956 <span class="comment"> * So a typical variant type with the integer 3 will have these</span>
<a name="l01957"></a>01957 <span class="comment"> * octets:</span>
<a name="l01958"></a>01958 <span class="comment"> * 0x1 'i' '\0' [1 byte padding to alignment boundary] 0x0 0x0 0x0 0x3</span>
<a name="l01959"></a>01959 <span class="comment"> *</span>
<a name="l01960"></a>01960 <span class="comment"> * The main world of hurt for writing out a variant is that the type</span>
<a name="l01961"></a>01961 <span class="comment"> * string is the same string as the value string. Which means</span>
<a name="l01962"></a>01962 <span class="comment"> * inserting to the type string will move the value_pos; and it means</span>
<a name="l01963"></a>01963 <span class="comment"> * that inserting to the type string could break type alignment.</span>
<a name="l01964"></a>01964 <span class="comment"> */</span>
<a name="l01965"></a>01965 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01966"></a>01966 writer_recurse_variant (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l01967"></a>01967 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *contained_type,
<a name="l01968"></a>01968 <span class="keywordtype">int</span> contained_type_start,
<a name="l01969"></a>01969 <span class="keywordtype">int</span> contained_type_len,
<a name="l01970"></a>01970 <a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *sub)
<a name="l01971"></a>01971 {
<a name="l01972"></a>01972 <span class="keywordtype">int</span> contained_alignment;
<a name="l01973"></a>01973
<a name="l01974"></a>01974 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a>)
<a name="l01975"></a>01975 {
<a name="l01976"></a>01976 <span class="comment">/* Allocate space for the worst case, which is 1 byte sig</span>
<a name="l01977"></a>01977 <span class="comment"> * length, nul byte at end of sig, and 7 bytes padding to</span>
<a name="l01978"></a>01978 <span class="comment"> * 8-boundary.</span>
<a name="l01979"></a>01979 <span class="comment"> */</span>
<a name="l01980"></a>01980 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g4764e75c464356408fc1a12df93177c1">_dbus_string_alloc_space</a> (sub-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>, contained_type_len + 9))
<a name="l01981"></a>01981 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01982"></a>01982 }
<a name="l01983"></a>01983
<a name="l01984"></a>01984 <span class="comment">/* write VARIANT typecode to the parent's type string */</span>
<a name="l01985"></a>01985 <span class="keywordflow">if</span> (!write_or_verify_typecode (writer, <a class="code" href="group__DBusProtocol.html#g4aa7a463ad2bce4e9aa95e3e397ddcf1">DBUS_TYPE_VARIANT</a>))
<a name="l01986"></a>01986 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01987"></a>01987
<a name="l01988"></a>01988 <span class="comment">/* If not enabled, mark that we have no type_str anymore ... */</span>
<a name="l01989"></a>01989
<a name="l01990"></a>01990 <span class="keywordflow">if</span> (!writer->enabled)
<a name="l01991"></a>01991 {
<a name="l01992"></a>01992 sub-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01993"></a>01993 sub-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a> = -1;
<a name="l01994"></a>01994
<a name="l01995"></a>01995 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01996"></a>01996 }
<a name="l01997"></a>01997
<a name="l01998"></a>01998 <span class="comment">/* If we're enabled then continue ... */</span>
<a name="l01999"></a>01999
<a name="l02000"></a>02000 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gb0770800dce6df97e5d246105a44e7b4">_dbus_string_insert_byte</a> (sub-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>,
<a name="l02001"></a>02001 sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>,
<a name="l02002"></a>02002 contained_type_len))
<a name="l02003"></a>02003 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"should not have failed to insert variant type sig len"</span>);
<a name="l02004"></a>02004
<a name="l02005"></a>02005 sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a> += 1;
<a name="l02006"></a>02006
<a name="l02007"></a>02007 <span class="comment">/* Here we switch over to the expected type sig we're about to write */</span>
<a name="l02008"></a>02008 sub-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> = sub-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>;
<a name="l02009"></a>02009 sub-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a> = sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>;
<a name="l02010"></a>02010
<a name="l02011"></a>02011 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gf5f13bc7ac7a623516930d26ae2589bf">_dbus_string_copy_len</a> (contained_type, contained_type_start, contained_type_len,
<a name="l02012"></a>02012 sub-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>, sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>))
<a name="l02013"></a>02013 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"should not have failed to insert variant type sig"</span>);
<a name="l02014"></a>02014
<a name="l02015"></a>02015 sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a> += contained_type_len;
<a name="l02016"></a>02016
<a name="l02017"></a>02017 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gb0770800dce6df97e5d246105a44e7b4">_dbus_string_insert_byte</a> (sub-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>,
<a name="l02018"></a>02018 sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>,
<a name="l02019"></a>02019 <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>))
<a name="l02020"></a>02020 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"should not have failed to insert variant type nul termination"</span>);
<a name="l02021"></a>02021
<a name="l02022"></a>02022 sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a> += 1;
<a name="l02023"></a>02023
<a name="l02024"></a>02024 contained_alignment = <a class="code" href="group__DBusMarshal.html#g2ba80f227880e442c140bc67653b0abd">_dbus_type_get_alignment</a> (<a class="code" href="group__DBusMarshal.html#g5866a0fd058aed3396402d0456144fd2">_dbus_first_type_in_signature</a> (contained_type, contained_type_start));
<a name="l02025"></a>02025
<a name="l02026"></a>02026 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga0964d662ad17c58eb044c1b153017a6">_dbus_string_insert_bytes</a> (sub-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>,
<a name="l02027"></a>02027 sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>,
<a name="l02028"></a>02028 _DBUS_ALIGN_VALUE (sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>, contained_alignment) - sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>,
<a name="l02029"></a>02029 <span class="charliteral">'\0'</span>))
<a name="l02030"></a>02030 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"should not have failed to insert alignment padding for variant body"</span>);
<a name="l02031"></a>02031 sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a> = _DBUS_ALIGN_VALUE (sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>, contained_alignment);
<a name="l02032"></a>02032
<a name="l02033"></a>02033 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02034"></a>02034 }
<a name="l02035"></a>02035
<a name="l02036"></a>02036 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02037"></a>02037 _dbus_type_writer_recurse_contained_len (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l02038"></a>02038 <span class="keywordtype">int</span> container_type,
<a name="l02039"></a>02039 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *contained_type,
<a name="l02040"></a>02040 <span class="keywordtype">int</span> contained_type_start,
<a name="l02041"></a>02041 <span class="keywordtype">int</span> contained_type_len,
<a name="l02042"></a>02042 <a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *sub,
<a name="l02043"></a>02043 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> is_array_append)
<a name="l02044"></a>02044 {
<a name="l02045"></a>02045 writer_recurse_init_and_check (writer, container_type, sub);
<a name="l02046"></a>02046
<a name="l02047"></a>02047 <span class="keywordflow">switch</span> (container_type)
<a name="l02048"></a>02048 {
<a name="l02049"></a>02049 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#ge4b22a74b9edb0ec0ff6e0294794d3f9">DBUS_TYPE_STRUCT</a>:
<a name="l02050"></a>02050 <span class="keywordflow">return</span> writer_recurse_struct_or_dict_entry (writer,
<a name="l02051"></a>02051 <a class="code" href="group__DBusProtocol.html#g725657eca93175475e0694b858f51fd6">DBUS_STRUCT_BEGIN_CHAR</a>,
<a name="l02052"></a>02052 contained_type,
<a name="l02053"></a>02053 contained_type_start, contained_type_len,
<a name="l02054"></a>02054 sub);
<a name="l02055"></a>02055 <span class="keywordflow">break</span>;
<a name="l02056"></a>02056 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#gd2fc8e6c50e0ad927f4249fb9e53ca97">DBUS_TYPE_DICT_ENTRY</a>:
<a name="l02057"></a>02057 <span class="keywordflow">return</span> writer_recurse_struct_or_dict_entry (writer,
<a name="l02058"></a>02058 <a class="code" href="group__DBusProtocol.html#gd51b5f7a2e6d927295479dd371f6b353">DBUS_DICT_ENTRY_BEGIN_CHAR</a>,
<a name="l02059"></a>02059 contained_type,
<a name="l02060"></a>02060 contained_type_start, contained_type_len,
<a name="l02061"></a>02061 sub);
<a name="l02062"></a>02062 <span class="keywordflow">break</span>;
<a name="l02063"></a>02063 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>:
<a name="l02064"></a>02064 <span class="keywordflow">return</span> writer_recurse_array (writer,
<a name="l02065"></a>02065 contained_type, contained_type_start, contained_type_len,
<a name="l02066"></a>02066 sub, is_array_append);
<a name="l02067"></a>02067 <span class="keywordflow">break</span>;
<a name="l02068"></a>02068 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#g4aa7a463ad2bce4e9aa95e3e397ddcf1">DBUS_TYPE_VARIANT</a>:
<a name="l02069"></a>02069 <span class="keywordflow">return</span> writer_recurse_variant (writer,
<a name="l02070"></a>02070 contained_type, contained_type_start, contained_type_len,
<a name="l02071"></a>02071 sub);
<a name="l02072"></a>02072 <span class="keywordflow">break</span>;
<a name="l02073"></a>02073 <span class="keywordflow">default</span>:
<a name="l02074"></a>02074 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"tried to recurse into type that doesn't support that"</span>);
<a name="l02075"></a>02075 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02076"></a>02076 <span class="keywordflow">break</span>;
<a name="l02077"></a>02077 }
<a name="l02078"></a>02078 }
<a name="l02079"></a>02079
<a name="l02090"></a>02090 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02091"></a><a class="code" href="group__DBusMarshal.html#g4c0a1036e59dac270141052d951baff2">02091</a> <a class="code" href="group__DBusMarshal.html#g4c0a1036e59dac270141052d951baff2">_dbus_type_writer_recurse</a> (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l02092"></a>02092 <span class="keywordtype">int</span> container_type,
<a name="l02093"></a>02093 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *contained_type,
<a name="l02094"></a>02094 <span class="keywordtype">int</span> contained_type_start,
<a name="l02095"></a>02095 <a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *sub)
<a name="l02096"></a>02096 {
<a name="l02097"></a>02097 <span class="keywordtype">int</span> contained_type_len;
<a name="l02098"></a>02098
<a name="l02099"></a>02099 <span class="keywordflow">if</span> (contained_type)
<a name="l02100"></a>02100 contained_type_len = find_len_of_complete_type (contained_type, contained_type_start);
<a name="l02101"></a>02101 <span class="keywordflow">else</span>
<a name="l02102"></a>02102 contained_type_len = 0;
<a name="l02103"></a>02103
<a name="l02104"></a>02104 <span class="keywordflow">return</span> _dbus_type_writer_recurse_contained_len (writer, container_type,
<a name="l02105"></a>02105 contained_type,
<a name="l02106"></a>02106 contained_type_start,
<a name="l02107"></a>02107 contained_type_len,
<a name="l02108"></a>02108 sub,
<a name="l02109"></a>02109 <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02110"></a>02110 }
<a name="l02111"></a>02111
<a name="l02124"></a>02124 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02125"></a><a class="code" href="group__DBusMarshal.html#gcc2b4c348f93898f6269feb0bf055617">02125</a> <a class="code" href="group__DBusMarshal.html#gcc2b4c348f93898f6269feb0bf055617">_dbus_type_writer_append_array</a> (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l02126"></a>02126 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *contained_type,
<a name="l02127"></a>02127 <span class="keywordtype">int</span> contained_type_start,
<a name="l02128"></a>02128 <a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *sub)
<a name="l02129"></a>02129 {
<a name="l02130"></a>02130 <span class="keywordtype">int</span> contained_type_len;
<a name="l02131"></a>02131
<a name="l02132"></a>02132 <span class="keywordflow">if</span> (contained_type)
<a name="l02133"></a>02133 contained_type_len = find_len_of_complete_type (contained_type, contained_type_start);
<a name="l02134"></a>02134 <span class="keywordflow">else</span>
<a name="l02135"></a>02135 contained_type_len = 0;
<a name="l02136"></a>02136
<a name="l02137"></a>02137 <span class="keywordflow">return</span> _dbus_type_writer_recurse_contained_len (writer, <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>,
<a name="l02138"></a>02138 contained_type,
<a name="l02139"></a>02139 contained_type_start,
<a name="l02140"></a>02140 contained_type_len,
<a name="l02141"></a>02141 sub,
<a name="l02142"></a>02142 <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>);
<a name="l02143"></a>02143 }
<a name="l02144"></a>02144
<a name="l02145"></a>02145 <span class="keyword">static</span> <span class="keywordtype">int</span>
<a name="l02146"></a>02146 writer_get_array_len (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer)
<a name="l02147"></a>02147 {
<a name="l02148"></a>02148 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (writer-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>);
<a name="l02149"></a>02149 <span class="keywordflow">return</span> writer-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a> - writer-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.start_pos;
<a name="l02150"></a>02150 }
<a name="l02151"></a>02151
<a name="l02160"></a>02160 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02161"></a><a class="code" href="group__DBusMarshal.html#gcbe7eddf4f9c19da91b742087fcc111a">02161</a> <a class="code" href="group__DBusMarshal.html#gcbe7eddf4f9c19da91b742087fcc111a">_dbus_type_writer_unrecurse</a> (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l02162"></a>02162 <a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *sub)
<a name="l02163"></a>02163 {
<a name="l02164"></a>02164 <span class="comment">/* type_pos_is_expectation never gets unset once set, or we'd get all hosed */</span>
<a name="l02165"></a>02165 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!writer-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a> ||
<a name="l02166"></a>02166 (writer-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a> && sub-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a>));
<a name="l02167"></a>02167
<a name="l02168"></a>02168 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02169"></a>02169 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type writer %p unrecurse type_pos = %d value_pos = %d is_expectation = %d container_type = %s\n"</span>,
<a name="l02170"></a>02170 writer, writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>, writer-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>, writer-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a>,
<a name="l02171"></a>02171 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (writer-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a>));
<a name="l02172"></a>02172 _dbus_verbose (<span class="stringliteral">" type writer %p unrecurse sub type_pos = %d value_pos = %d is_expectation = %d container_type = %s\n"</span>,
<a name="l02173"></a>02173 sub, sub-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>, sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>,
<a name="l02174"></a>02174 sub-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a>,
<a name="l02175"></a>02175 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (sub-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a>));
<a name="l02176"></a>02176 <span class="preprocessor">#endif</span>
<a name="l02177"></a>02177 <span class="preprocessor"></span>
<a name="l02178"></a>02178 <span class="keywordflow">if</span> (sub-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> == <a class="code" href="group__DBusProtocol.html#ge4b22a74b9edb0ec0ff6e0294794d3f9">DBUS_TYPE_STRUCT</a>)
<a name="l02179"></a>02179 {
<a name="l02180"></a>02180 <span class="keywordflow">if</span> (!write_or_verify_typecode (sub, <a class="code" href="group__DBusProtocol.html#geab5ea0def3f587a0ed548b77d5c5cea">DBUS_STRUCT_END_CHAR</a>))
<a name="l02181"></a>02181 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02182"></a>02182 }
<a name="l02183"></a>02183 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sub-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> == <a class="code" href="group__DBusProtocol.html#gd2fc8e6c50e0ad927f4249fb9e53ca97">DBUS_TYPE_DICT_ENTRY</a>)
<a name="l02184"></a>02184 {
<a name="l02185"></a>02185 <span class="keywordflow">if</span> (!write_or_verify_typecode (sub, <a class="code" href="group__DBusProtocol.html#g29ad22c7342ead042ae9e55ae20b49f1">DBUS_DICT_ENTRY_END_CHAR</a>))
<a name="l02186"></a>02186 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02187"></a>02187 }
<a name="l02188"></a>02188 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sub-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>)
<a name="l02189"></a>02189 {
<a name="l02190"></a>02190 <span class="keywordflow">if</span> (sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.len_pos >= 0) <span class="comment">/* len_pos == -1 if we weren't enabled when we passed it */</span>
<a name="l02191"></a>02191 {
<a name="l02192"></a>02192 <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> len;
<a name="l02193"></a>02193
<a name="l02194"></a>02194 <span class="comment">/* Set the array length */</span>
<a name="l02195"></a>02195 len = writer_get_array_len (sub);
<a name="l02196"></a>02196 <a class="code" href="group__DBusMarshal.html#g4bcfb6a664c7e46c7ffc31f96d532a02">_dbus_marshal_set_uint32</a> (sub-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>,
<a name="l02197"></a>02197 sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.len_pos,
<a name="l02198"></a>02198 len,
<a name="l02199"></a>02199 sub-><a class="code" href="structDBusTypeWriter.html#6c4baf0b7148cf3f76924b654dada148">byte_order</a>);
<a name="l02200"></a>02200 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02201"></a>02201 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" filled in sub array len to %u at len_pos %d\n"</span>,
<a name="l02202"></a>02202 len, sub-><a class="code" href="structDBusTypeWriter.html#fe24080d2be45fb6033833a1a38d5d1a">u</a>.<a class="code" href="structDBusTypeWriter.html#a5247dc0cb37527a7affbf28a0904423">array</a>.len_pos);
<a name="l02203"></a>02203 <span class="preprocessor">#endif</span>
<a name="l02204"></a>02204 <span class="preprocessor"></span> }
<a name="l02205"></a>02205 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02206"></a>02206 <span class="preprocessor"></span> <span class="keywordflow">else</span>
<a name="l02207"></a>02207 {
<a name="l02208"></a>02208 _dbus_verbose (<span class="stringliteral">" not filling in sub array len because we were disabled when we passed the len\n"</span>);
<a name="l02209"></a>02209 }
<a name="l02210"></a>02210 <span class="preprocessor">#endif</span>
<a name="l02211"></a>02211 <span class="preprocessor"></span> }
<a name="l02212"></a>02212
<a name="l02213"></a>02213 <span class="comment">/* Now get type_pos right for the parent writer. Here are the cases:</span>
<a name="l02214"></a>02214 <span class="comment"> *</span>
<a name="l02215"></a>02215 <span class="comment"> * Cases !writer->type_pos_is_expectation:</span>
<a name="l02216"></a>02216 <span class="comment"> * (in these cases we want to update to the new insertion point)</span>
<a name="l02217"></a>02217 <span class="comment"> *</span>
<a name="l02218"></a>02218 <span class="comment"> * - if we recursed into a STRUCT then we didn't know in advance</span>
<a name="l02219"></a>02219 <span class="comment"> * what the types in the struct would be; so we have to fill in</span>
<a name="l02220"></a>02220 <span class="comment"> * that information now.</span>
<a name="l02221"></a>02221 <span class="comment"> * writer->type_pos = sub->type_pos</span>
<a name="l02222"></a>02222 <span class="comment"> *</span>
<a name="l02223"></a>02223 <span class="comment"> * - if we recursed into anything else, we knew the full array</span>
<a name="l02224"></a>02224 <span class="comment"> * type, or knew the single typecode marking VARIANT, so</span>
<a name="l02225"></a>02225 <span class="comment"> * writer->type_pos is already correct.</span>
<a name="l02226"></a>02226 <span class="comment"> * writer->type_pos should remain as-is</span>
<a name="l02227"></a>02227 <span class="comment"> *</span>
<a name="l02228"></a>02228 <span class="comment"> * - note that the parent is never an ARRAY or VARIANT, if it were</span>
<a name="l02229"></a>02229 <span class="comment"> * then type_pos_is_expectation would be TRUE. The parent</span>
<a name="l02230"></a>02230 <span class="comment"> * is thus known to be a toplevel or STRUCT.</span>
<a name="l02231"></a>02231 <span class="comment"> *</span>
<a name="l02232"></a>02232 <span class="comment"> * Cases where writer->type_pos_is_expectation:</span>
<a name="l02233"></a>02233 <span class="comment"> * (in these cases we want to update to next expected type to write)</span>
<a name="l02234"></a>02234 <span class="comment"> *</span>
<a name="l02235"></a>02235 <span class="comment"> * - we recursed from STRUCT into STRUCT and we didn't increment</span>
<a name="l02236"></a>02236 <span class="comment"> * type_pos in the parent just to stay consistent with the</span>
<a name="l02237"></a>02237 <span class="comment"> * !writer->type_pos_is_expectation case (though we could</span>
<a name="l02238"></a>02238 <span class="comment"> * special-case this in recurse_struct instead if we wanted)</span>
<a name="l02239"></a>02239 <span class="comment"> * writer->type_pos = sub->type_pos</span>
<a name="l02240"></a>02240 <span class="comment"> *</span>
<a name="l02241"></a>02241 <span class="comment"> * - we recursed from STRUCT into ARRAY or VARIANT and type_pos</span>
<a name="l02242"></a>02242 <span class="comment"> * for parent should have been incremented already</span>
<a name="l02243"></a>02243 <span class="comment"> * writer->type_pos should remain as-is</span>
<a name="l02244"></a>02244 <span class="comment"> *</span>
<a name="l02245"></a>02245 <span class="comment"> * - we recursed from ARRAY into a sub-element, so type_pos in the</span>
<a name="l02246"></a>02246 <span class="comment"> * parent is the element type and should remain the element type</span>
<a name="l02247"></a>02247 <span class="comment"> * for the benefit of the next child element</span>
<a name="l02248"></a>02248 <span class="comment"> * writer->type_pos should remain as-is</span>
<a name="l02249"></a>02249 <span class="comment"> *</span>
<a name="l02250"></a>02250 <span class="comment"> * - we recursed from VARIANT into its value, so type_pos in the</span>
<a name="l02251"></a>02251 <span class="comment"> * parent makes no difference since there's only one value</span>
<a name="l02252"></a>02252 <span class="comment"> * and we just finished writing it and won't use type_pos again</span>
<a name="l02253"></a>02253 <span class="comment"> * writer->type_pos should remain as-is</span>
<a name="l02254"></a>02254 <span class="comment"> *</span>
<a name="l02255"></a>02255 <span class="comment"> *</span>
<a name="l02256"></a>02256 <span class="comment"> * For all these, DICT_ENTRY is the same as STRUCT</span>
<a name="l02257"></a>02257 <span class="comment"> */</span>
<a name="l02258"></a>02258 <span class="keywordflow">if</span> (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02259"></a>02259 {
<a name="l02260"></a>02260 <span class="keywordflow">if</span> ((sub-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> == <a class="code" href="group__DBusProtocol.html#ge4b22a74b9edb0ec0ff6e0294794d3f9">DBUS_TYPE_STRUCT</a> ||
<a name="l02261"></a>02261 sub-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> == <a class="code" href="group__DBusProtocol.html#gd2fc8e6c50e0ad927f4249fb9e53ca97">DBUS_TYPE_DICT_ENTRY</a>) &&
<a name="l02262"></a>02262 (writer-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> == <a class="code" href="group__DBusProtocol.html#ge4b22a74b9edb0ec0ff6e0294794d3f9">DBUS_TYPE_STRUCT</a> ||
<a name="l02263"></a>02263 writer-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> == <a class="code" href="group__DBusProtocol.html#gd2fc8e6c50e0ad927f4249fb9e53ca97">DBUS_TYPE_DICT_ENTRY</a> ||
<a name="l02264"></a>02264 writer-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> == <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>))
<a name="l02265"></a>02265 {
<a name="l02266"></a>02266 <span class="comment">/* Advance the parent to the next struct field */</span>
<a name="l02267"></a>02267 writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a> = sub-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>;
<a name="l02268"></a>02268 }
<a name="l02269"></a>02269 }
<a name="l02270"></a>02270
<a name="l02271"></a>02271 writer-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a> = sub-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>;
<a name="l02272"></a>02272
<a name="l02273"></a>02273 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02274"></a>02274 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type writer %p unrecursed type_pos = %d value_pos = %d remaining sig '%s'\n"</span>,
<a name="l02275"></a>02275 writer, writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>, writer-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>,
<a name="l02276"></a>02276 writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> ?
<a name="l02277"></a>02277 _dbus_string_get_const_data_len (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>, writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>, 0) :
<a name="l02278"></a>02278 <span class="stringliteral">"unknown"</span>);
<a name="l02279"></a>02279 <span class="preprocessor">#endif</span>
<a name="l02280"></a>02280 <span class="preprocessor"></span>
<a name="l02281"></a>02281 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02282"></a>02282 }
<a name="l02283"></a>02283
<a name="l02292"></a>02292 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02293"></a><a class="code" href="group__DBusMarshal.html#g0103b0214766b0ff1ca05bcc7f1e631b">02293</a> <a class="code" href="group__DBusMarshal.html#g0103b0214766b0ff1ca05bcc7f1e631b">_dbus_type_writer_write_basic</a> (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l02294"></a>02294 <span class="keywordtype">int</span> type,
<a name="l02295"></a>02295 <span class="keyword">const</span> <span class="keywordtype">void</span> *value)
<a name="l02296"></a>02296 {
<a name="l02297"></a>02297 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l02298"></a>02298
<a name="l02299"></a>02299 <span class="comment">/* First ensure that our type realloc will succeed */</span>
<a name="l02300"></a>02300 <span class="keywordflow">if</span> (!writer-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a> && writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02301"></a>02301 {
<a name="l02302"></a>02302 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g4764e75c464356408fc1a12df93177c1">_dbus_string_alloc_space</a> (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>, 1))
<a name="l02303"></a>02303 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02304"></a>02304 }
<a name="l02305"></a>02305
<a name="l02306"></a>02306 retval = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02307"></a>02307
<a name="l02308"></a>02308 <span class="keywordflow">if</span> (!_dbus_type_writer_write_basic_no_typecode (writer, type, value))
<a name="l02309"></a>02309 <span class="keywordflow">goto</span> out;
<a name="l02310"></a>02310
<a name="l02311"></a>02311 <span class="keywordflow">if</span> (!write_or_verify_typecode (writer, type))
<a name="l02312"></a>02312 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"failed to write typecode after prealloc"</span>);
<a name="l02313"></a>02313
<a name="l02314"></a>02314 retval = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02315"></a>02315
<a name="l02316"></a>02316 out:
<a name="l02317"></a>02317 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02318"></a>02318 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type writer %p basic type_pos = %d value_pos = %d is_expectation = %d enabled = %d\n"</span>,
<a name="l02319"></a>02319 writer, writer->type_pos, writer->value_pos, writer->type_pos_is_expectation,
<a name="l02320"></a>02320 writer->enabled);
<a name="l02321"></a>02321 <span class="preprocessor">#endif</span>
<a name="l02322"></a>02322 <span class="preprocessor"></span>
<a name="l02323"></a>02323 <span class="keywordflow">return</span> retval;
<a name="l02324"></a>02324 }
<a name="l02325"></a>02325
<a name="l02340"></a>02340 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02341"></a><a class="code" href="group__DBusMarshal.html#gcf99495cbed7462992b6a231563b4528">02341</a> <a class="code" href="group__DBusMarshal.html#gcf99495cbed7462992b6a231563b4528">_dbus_type_writer_write_fixed_multi</a> (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l02342"></a>02342 <span class="keywordtype">int</span> element_type,
<a name="l02343"></a>02343 <span class="keyword">const</span> <span class="keywordtype">void</span> *value,
<a name="l02344"></a>02344 <span class="keywordtype">int</span> n_elements)
<a name="l02345"></a>02345 {
<a name="l02346"></a>02346 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (writer-><a class="code" href="structDBusTypeWriter.html#d0953035070c7c7d21b044b7b2f0f491">container_type</a> == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>);
<a name="l02347"></a>02347 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (<a class="code" href="group__DBusSignature.html#g435ffc74ae015cc193175f5b864872bc">dbus_type_is_fixed</a> (element_type));
<a name="l02348"></a>02348 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (writer-><a class="code" href="structDBusTypeWriter.html#e6db89e9a3adcd52678dc089810cfb0b">type_pos_is_expectation</a>);
<a name="l02349"></a>02349 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (n_elements >= 0);
<a name="l02350"></a>02350
<a name="l02351"></a>02351 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02352"></a>02352 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type writer %p entering fixed multi type_pos = %d value_pos = %d n_elements %d\n"</span>,
<a name="l02353"></a>02353 writer, writer-><a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>, writer-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>, n_elements);
<a name="l02354"></a>02354 <span class="preprocessor">#endif</span>
<a name="l02355"></a>02355 <span class="preprocessor"></span>
<a name="l02356"></a>02356 <span class="keywordflow">if</span> (!write_or_verify_typecode (writer, element_type))
<a name="l02357"></a>02357 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"OOM should not happen if only verifying typecode"</span>);
<a name="l02358"></a>02358
<a name="l02359"></a>02359 <span class="keywordflow">if</span> (writer->enabled)
<a name="l02360"></a>02360 {
<a name="l02361"></a>02361 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#g990da87b984d8917da26b89a6470fdf5">_dbus_marshal_write_fixed_multi</a> (writer->value_str,
<a name="l02362"></a>02362 writer->value_pos,
<a name="l02363"></a>02363 element_type,
<a name="l02364"></a>02364 value,
<a name="l02365"></a>02365 n_elements,
<a name="l02366"></a>02366 writer->byte_order,
<a name="l02367"></a>02367 &writer->value_pos))
<a name="l02368"></a>02368 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02369"></a>02369 }
<a name="l02370"></a>02370
<a name="l02371"></a>02371 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02372"></a>02372 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">" type writer %p fixed multi written new type_pos = %d new value_pos = %d n_elements %d\n"</span>,
<a name="l02373"></a>02373 writer, writer->type_pos, writer->value_pos, n_elements);
<a name="l02374"></a>02374 <span class="preprocessor">#endif</span>
<a name="l02375"></a>02375 <span class="preprocessor"></span>
<a name="l02376"></a>02376 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02377"></a>02377 }
<a name="l02378"></a>02378
<a name="l02379"></a>02379 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l02380"></a>02380 enable_if_after (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l02381"></a>02381 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l02382"></a>02382 <span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *start_after)
<a name="l02383"></a>02383 {
<a name="l02384"></a>02384 <span class="keywordflow">if</span> (start_after)
<a name="l02385"></a>02385 {
<a name="l02386"></a>02386 <span class="keywordflow">if</span> (!writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a> && <a class="code" href="group__DBusMarshal.html#g229b3858f43ec56de852f62914cf3568">_dbus_type_reader_greater_than</a> (reader, start_after))
<a name="l02387"></a>02387 {
<a name="l02388"></a>02388 <a class="code" href="group__DBusMarshal.html#g44efb6d70d7f68fc7dd8523a303dfdb2">_dbus_type_writer_set_enabled</a> (writer, <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>);
<a name="l02389"></a>02389 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02390"></a>02390 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"ENABLING writer %p at %d because reader at value_pos %d is after reader at value_pos %d\n"</span>,
<a name="l02391"></a>02391 writer, writer-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>, reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>, start_after-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>);
<a name="l02392"></a>02392 <span class="preprocessor">#endif</span>
<a name="l02393"></a>02393 <span class="preprocessor"></span> }
<a name="l02394"></a>02394
<a name="l02395"></a>02395 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> ((!writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a> && !<a class="code" href="group__DBusMarshal.html#g229b3858f43ec56de852f62914cf3568">_dbus_type_reader_greater_than</a> (reader, start_after)) ||
<a name="l02396"></a>02396 (writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a> && <a class="code" href="group__DBusMarshal.html#g229b3858f43ec56de852f62914cf3568">_dbus_type_reader_greater_than</a> (reader, start_after)));
<a name="l02397"></a>02397 }
<a name="l02398"></a>02398 }
<a name="l02399"></a>02399
<a name="l02400"></a>02400 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02401"></a>02401 append_fixup (<a class="code" href="structDBusList.html">DBusList</a> **fixups,
<a name="l02402"></a>02402 <span class="keyword">const</span> <a class="code" href="structDBusArrayLenFixup.html">DBusArrayLenFixup</a> *fixup)
<a name="l02403"></a>02403 {
<a name="l02404"></a>02404 <a class="code" href="structDBusArrayLenFixup.html">DBusArrayLenFixup</a> *f;
<a name="l02405"></a>02405
<a name="l02406"></a>02406 f = <a class="code" href="group__DBusMemory.html#g54ccb556e7964112a825a7f46c156ca0">dbus_new</a> (<a class="code" href="structDBusArrayLenFixup.html">DBusArrayLenFixup</a>, 1);
<a name="l02407"></a>02407 <span class="keywordflow">if</span> (f == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02408"></a>02408 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02409"></a>02409
<a name="l02410"></a>02410 *f = *fixup;
<a name="l02411"></a>02411
<a name="l02412"></a>02412 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusList.html#gd99045e79db46159babe69718f343053">_dbus_list_append</a> (fixups, f))
<a name="l02413"></a>02413 {
<a name="l02414"></a>02414 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (f);
<a name="l02415"></a>02415 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02416"></a>02416 }
<a name="l02417"></a>02417
<a name="l02418"></a>02418 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (f-><a class="code" href="structDBusArrayLenFixup.html#ad03f6087695c9e9b409817ac34c6e2b">len_pos_in_reader</a> == fixup-><a class="code" href="structDBusArrayLenFixup.html#ad03f6087695c9e9b409817ac34c6e2b">len_pos_in_reader</a>);
<a name="l02419"></a>02419 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (f-><a class="code" href="structDBusArrayLenFixup.html#97cccea61d89992e6ad3a19bd569dd2f">new_len</a> == fixup-><a class="code" href="structDBusArrayLenFixup.html#97cccea61d89992e6ad3a19bd569dd2f">new_len</a>);
<a name="l02420"></a>02420
<a name="l02421"></a>02421 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02422"></a>02422 }
<a name="l02423"></a>02423
<a name="l02424"></a>02424 <span class="comment">/* This loop is trivial if you ignore all the start_after nonsense,</span>
<a name="l02425"></a>02425 <span class="comment"> * so if you're trying to figure it out, start by ignoring that</span>
<a name="l02426"></a>02426 <span class="comment"> */</span>
<a name="l02427"></a>02427 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02428"></a>02428 writer_write_reader_helper (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l02429"></a>02429 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l02430"></a>02430 <span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *start_after,
<a name="l02431"></a>02431 <span class="keywordtype">int</span> start_after_new_pos,
<a name="l02432"></a>02432 <span class="keywordtype">int</span> start_after_new_len,
<a name="l02433"></a>02433 <a class="code" href="structDBusList.html">DBusList</a> **fixups,
<a name="l02434"></a>02434 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> inside_start_after)
<a name="l02435"></a>02435 {
<a name="l02436"></a>02436 <span class="keywordtype">int</span> current_type;
<a name="l02437"></a>02437
<a name="l02438"></a>02438 <span class="keywordflow">while</span> ((current_type = <a class="code" href="group__DBusMarshal.html#gb8e39cb8084247d54d7f272c51622a73">_dbus_type_reader_get_current_type</a> (reader)) != <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>)
<a name="l02439"></a>02439 {
<a name="l02440"></a>02440 <span class="keywordflow">if</span> (<a class="code" href="group__DBusSignature.html#g6e71e0d4ab3d7e68d2b906f43475544b">dbus_type_is_container</a> (current_type))
<a name="l02441"></a>02441 {
<a name="l02442"></a>02442 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> subreader;
<a name="l02443"></a>02443 <a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> subwriter;
<a name="l02444"></a>02444 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *sig_str;
<a name="l02445"></a>02445 <span class="keywordtype">int</span> sig_start;
<a name="l02446"></a>02446 <span class="keywordtype">int</span> sig_len;
<a name="l02447"></a>02447 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> enabled_at_recurse;
<a name="l02448"></a>02448 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> past_start_after;
<a name="l02449"></a>02449 <span class="keywordtype">int</span> reader_array_len_pos;
<a name="l02450"></a>02450 <span class="keywordtype">int</span> reader_array_start_pos;
<a name="l02451"></a>02451 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> this_is_start_after;
<a name="l02452"></a>02452
<a name="l02453"></a>02453 <span class="comment">/* type_pos is checked since e.g. in a struct the struct</span>
<a name="l02454"></a>02454 <span class="comment"> * and its first field have the same value_pos.</span>
<a name="l02455"></a>02455 <span class="comment"> * type_str will differ in reader/start_after for variants</span>
<a name="l02456"></a>02456 <span class="comment"> * where type_str is inside the value_str</span>
<a name="l02457"></a>02457 <span class="comment"> */</span>
<a name="l02458"></a>02458 <span class="keywordflow">if</span> (!inside_start_after && start_after &&
<a name="l02459"></a>02459 reader-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> == start_after-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> &&
<a name="l02460"></a>02460 reader->type_str == start_after-><a class="code" href="structDBusTypeReader.html#f52e270ededd0aabb642c6130a3e9e40">type_str</a> &&
<a name="l02461"></a>02461 reader->type_pos == start_after-><a class="code" href="structDBusTypeReader.html#160a55f9869e297572c5aa5b6ce7bc71">type_pos</a>)
<a name="l02462"></a>02462 this_is_start_after = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02463"></a>02463 <span class="keywordflow">else</span>
<a name="l02464"></a>02464 this_is_start_after = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02465"></a>02465
<a name="l02466"></a>02466 <a class="code" href="group__DBusMarshal.html#g082b410820c74b2a6ca816a8e0c91803">_dbus_type_reader_recurse</a> (reader, &subreader);
<a name="l02467"></a>02467
<a name="l02468"></a>02468 <span class="keywordflow">if</span> (current_type == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>)
<a name="l02469"></a>02469 {
<a name="l02470"></a>02470 reader_array_len_pos = <a class="code" href="group__DBusMarshal.html#gcca774d24b7d7e790b169f23d3362497">ARRAY_READER_LEN_POS</a> (&subreader);
<a name="l02471"></a>02471 reader_array_start_pos = subreader.<a class="code" href="structDBusTypeReader.html#da12bed6758840dc19b1fcb271fb01be">u</a>.<a class="code" href="structDBusTypeReader.html#26fa4f3e09e18d2da90218e3e0acf81b">array</a>.start_pos;
<a name="l02472"></a>02472 }
<a name="l02473"></a>02473 <span class="keywordflow">else</span>
<a name="l02474"></a>02474 {
<a name="l02475"></a>02475 <span class="comment">/* quiet gcc */</span>
<a name="l02476"></a>02476 reader_array_len_pos = -1;
<a name="l02477"></a>02477 reader_array_start_pos = -1;
<a name="l02478"></a>02478 }
<a name="l02479"></a>02479
<a name="l02480"></a>02480 <a class="code" href="group__DBusMarshal.html#g4578cc623c8b0978ca780ce0ab950fdb">_dbus_type_reader_get_signature</a> (&subreader, &sig_str,
<a name="l02481"></a>02481 &sig_start, &sig_len);
<a name="l02482"></a>02482
<a name="l02483"></a>02483 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02484"></a>02484 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"about to recurse into %s reader at %d subreader at %d writer at %d start_after reader at %d write target len %d inside_start_after = %d this_is_start_after = %d\n"</span>,
<a name="l02485"></a>02485 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (current_type),
<a name="l02486"></a>02486 reader->value_pos,
<a name="l02487"></a>02487 subreader.<a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l02488"></a>02488 writer-><a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>,
<a name="l02489"></a>02489 start_after ? start_after-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> : -1,
<a name="l02490"></a>02490 _dbus_string_get_length (writer-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>),
<a name="l02491"></a>02491 inside_start_after, this_is_start_after);
<a name="l02492"></a>02492 <span class="preprocessor">#endif</span>
<a name="l02493"></a>02493 <span class="preprocessor"></span>
<a name="l02494"></a>02494 <span class="keywordflow">if</span> (!inside_start_after && !this_is_start_after)
<a name="l02495"></a>02495 enable_if_after (writer, &subreader, start_after);
<a name="l02496"></a>02496 enabled_at_recurse = writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a>;
<a name="l02497"></a>02497 <span class="keywordflow">if</span> (!_dbus_type_writer_recurse_contained_len (writer, current_type,
<a name="l02498"></a>02498 sig_str, sig_start, sig_len,
<a name="l02499"></a>02499 &subwriter, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>))
<a name="l02500"></a>02500 <span class="keywordflow">goto</span> oom;
<a name="l02501"></a>02501
<a name="l02502"></a>02502 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02503"></a>02503 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"recursed into subwriter at %d write target len %d\n"</span>,
<a name="l02504"></a>02504 subwriter.<a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>,
<a name="l02505"></a>02505 _dbus_string_get_length (subwriter.<a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>));
<a name="l02506"></a>02506 <span class="preprocessor">#endif</span>
<a name="l02507"></a>02507 <span class="preprocessor"></span>
<a name="l02508"></a>02508 <span class="keywordflow">if</span> (!writer_write_reader_helper (&subwriter, &subreader, start_after,
<a name="l02509"></a>02509 start_after_new_pos, start_after_new_len,
<a name="l02510"></a>02510 fixups,
<a name="l02511"></a>02511 inside_start_after ||
<a name="l02512"></a>02512 this_is_start_after))
<a name="l02513"></a>02513 <span class="keywordflow">goto</span> oom;
<a name="l02514"></a>02514
<a name="l02515"></a>02515 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02516"></a>02516 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"about to unrecurse from %s subreader at %d writer at %d subwriter at %d write target len %d\n"</span>,
<a name="l02517"></a>02517 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (current_type),
<a name="l02518"></a>02518 subreader.<a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l02519"></a>02519 writer->value_pos,
<a name="l02520"></a>02520 subwriter.value_pos,
<a name="l02521"></a>02521 _dbus_string_get_length (writer->value_str));
<a name="l02522"></a>02522 <span class="preprocessor">#endif</span>
<a name="l02523"></a>02523 <span class="preprocessor"></span>
<a name="l02524"></a>02524 <span class="keywordflow">if</span> (!inside_start_after && !this_is_start_after)
<a name="l02525"></a>02525 enable_if_after (writer, &subreader, start_after);
<a name="l02526"></a>02526 past_start_after = writer->enabled;
<a name="l02527"></a>02527 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#gcbe7eddf4f9c19da91b742087fcc111a">_dbus_type_writer_unrecurse</a> (writer, &subwriter))
<a name="l02528"></a>02528 <span class="keywordflow">goto</span> oom;
<a name="l02529"></a>02529
<a name="l02530"></a>02530 <span class="comment">/* If we weren't enabled when we recursed, we didn't</span>
<a name="l02531"></a>02531 <span class="comment"> * write an array len; if we passed start_after</span>
<a name="l02532"></a>02532 <span class="comment"> * somewhere inside the array, then we need to generate</span>
<a name="l02533"></a>02533 <span class="comment"> * a fixup.</span>
<a name="l02534"></a>02534 <span class="comment"> */</span>
<a name="l02535"></a>02535 <span class="keywordflow">if</span> (start_after != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> &&
<a name="l02536"></a>02536 !enabled_at_recurse && past_start_after &&
<a name="l02537"></a>02537 current_type == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a> &&
<a name="l02538"></a>02538 fixups != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02539"></a>02539 {
<a name="l02540"></a>02540 <a class="code" href="structDBusArrayLenFixup.html">DBusArrayLenFixup</a> fixup;
<a name="l02541"></a>02541 <span class="keywordtype">int</span> bytes_written_after_start_after;
<a name="l02542"></a>02542 <span class="keywordtype">int</span> bytes_before_start_after;
<a name="l02543"></a>02543 <span class="keywordtype">int</span> old_len;
<a name="l02544"></a>02544
<a name="l02545"></a>02545 <span class="comment">/* this subwriter access is moderately unkosher since we</span>
<a name="l02546"></a>02546 <span class="comment"> * already unrecursed, but it works as long as unrecurse</span>
<a name="l02547"></a>02547 <span class="comment"> * doesn't break us on purpose</span>
<a name="l02548"></a>02548 <span class="comment"> */</span>
<a name="l02549"></a>02549 bytes_written_after_start_after = writer_get_array_len (&subwriter);
<a name="l02550"></a>02550
<a name="l02551"></a>02551 bytes_before_start_after =
<a name="l02552"></a>02552 start_after-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a> - reader_array_start_pos;
<a name="l02553"></a>02553
<a name="l02554"></a>02554 fixup.<a class="code" href="structDBusArrayLenFixup.html#ad03f6087695c9e9b409817ac34c6e2b">len_pos_in_reader</a> = reader_array_len_pos;
<a name="l02555"></a>02555 fixup.<a class="code" href="structDBusArrayLenFixup.html#97cccea61d89992e6ad3a19bd569dd2f">new_len</a> =
<a name="l02556"></a>02556 bytes_before_start_after +
<a name="l02557"></a>02557 start_after_new_len +
<a name="l02558"></a>02558 bytes_written_after_start_after;
<a name="l02559"></a>02559
<a name="l02560"></a>02560 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (_DBUS_ALIGN_VALUE (fixup.<a class="code" href="structDBusArrayLenFixup.html#ad03f6087695c9e9b409817ac34c6e2b">len_pos_in_reader</a>, 4) ==
<a name="l02561"></a>02561 (<span class="keywordtype">unsigned</span>) fixup.<a class="code" href="structDBusArrayLenFixup.html#ad03f6087695c9e9b409817ac34c6e2b">len_pos_in_reader</a>);
<a name="l02562"></a>02562
<a name="l02563"></a>02563 old_len = _dbus_unpack_uint32 (reader->byte_order,
<a name="l02564"></a>02564 _dbus_string_get_const_data_len (reader->value_str,
<a name="l02565"></a>02565 fixup.<a class="code" href="structDBusArrayLenFixup.html#ad03f6087695c9e9b409817ac34c6e2b">len_pos_in_reader</a>, 4));
<a name="l02566"></a>02566
<a name="l02567"></a>02567 <span class="keywordflow">if</span> (old_len != fixup.<a class="code" href="structDBusArrayLenFixup.html#97cccea61d89992e6ad3a19bd569dd2f">new_len</a> && !append_fixup (fixups, &fixup))
<a name="l02568"></a>02568 <span class="keywordflow">goto</span> oom;
<a name="l02569"></a>02569
<a name="l02570"></a>02570 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02571"></a>02571 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"Generated fixup len_pos_in_reader = %d new_len = %d reader_array_start_pos = %d start_after->value_pos = %d bytes_before_start_after = %d start_after_new_len = %d bytes_written_after_start_after = %d\n"</span>,
<a name="l02572"></a>02572 fixup.<a class="code" href="structDBusArrayLenFixup.html#ad03f6087695c9e9b409817ac34c6e2b">len_pos_in_reader</a>,
<a name="l02573"></a>02573 fixup.<a class="code" href="structDBusArrayLenFixup.html#97cccea61d89992e6ad3a19bd569dd2f">new_len</a>,
<a name="l02574"></a>02574 reader_array_start_pos,
<a name="l02575"></a>02575 start_after-><a class="code" href="structDBusTypeReader.html#c17280869573f060a945a43e4a5c3ca4">value_pos</a>,
<a name="l02576"></a>02576 bytes_before_start_after,
<a name="l02577"></a>02577 start_after_new_len,
<a name="l02578"></a>02578 bytes_written_after_start_after);
<a name="l02579"></a>02579 <span class="preprocessor">#endif</span>
<a name="l02580"></a>02580 <span class="preprocessor"></span> }
<a name="l02581"></a>02581 }
<a name="l02582"></a>02582 <span class="keywordflow">else</span>
<a name="l02583"></a>02583 {
<a name="l02584"></a>02584 <a class="code" href="unionDBusBasicValue.html">DBusBasicValue</a> val;
<a name="l02585"></a>02585
<a name="l02586"></a>02586 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (<a class="code" href="group__DBusSignature.html#g2d8d39cba08f450645a17651478a0ad4">dbus_type_is_basic</a> (current_type));
<a name="l02587"></a>02587
<a name="l02588"></a>02588 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02589"></a>02589 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"Reading basic value %s at %d\n"</span>,
<a name="l02590"></a>02590 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (current_type),
<a name="l02591"></a>02591 reader->value_pos);
<a name="l02592"></a>02592 <span class="preprocessor">#endif</span>
<a name="l02593"></a>02593 <span class="preprocessor"></span>
<a name="l02594"></a>02594 <a class="code" href="group__DBusMarshal.html#ga54355ee98d6721d7a29b5ae7d92eb9a">_dbus_type_reader_read_basic</a> (reader, &val);
<a name="l02595"></a>02595
<a name="l02596"></a>02596 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02597"></a>02597 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"Writing basic value %s at %d write target len %d inside_start_after = %d\n"</span>,
<a name="l02598"></a>02598 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (current_type),
<a name="l02599"></a>02599 writer->value_pos,
<a name="l02600"></a>02600 _dbus_string_get_length (writer->value_str),
<a name="l02601"></a>02601 inside_start_after);
<a name="l02602"></a>02602 <span class="preprocessor">#endif</span>
<a name="l02603"></a>02603 <span class="preprocessor"></span> <span class="keywordflow">if</span> (!inside_start_after)
<a name="l02604"></a>02604 enable_if_after (writer, reader, start_after);
<a name="l02605"></a>02605 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#g0103b0214766b0ff1ca05bcc7f1e631b">_dbus_type_writer_write_basic</a> (writer, current_type, &val))
<a name="l02606"></a>02606 <span class="keywordflow">goto</span> oom;
<a name="l02607"></a>02607 <span class="preprocessor">#if RECURSIVE_MARSHAL_WRITE_TRACE</span>
<a name="l02608"></a>02608 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"Wrote basic value %s, new value_pos %d write target len %d\n"</span>,
<a name="l02609"></a>02609 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (current_type),
<a name="l02610"></a>02610 writer->value_pos,
<a name="l02611"></a>02611 _dbus_string_get_length (writer->value_str));
<a name="l02612"></a>02612 <span class="preprocessor">#endif</span>
<a name="l02613"></a>02613 <span class="preprocessor"></span> }
<a name="l02614"></a>02614
<a name="l02615"></a>02615 <a class="code" href="group__DBusMarshal.html#g746c09512d4905f2d2fac7ed4c3c63c2">_dbus_type_reader_next</a> (reader);
<a name="l02616"></a>02616 }
<a name="l02617"></a>02617
<a name="l02618"></a>02618 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02619"></a>02619
<a name="l02620"></a>02620 oom:
<a name="l02621"></a>02621 <span class="keywordflow">if</span> (fixups)
<a name="l02622"></a>02622 apply_and_free_fixups (fixups, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>); <span class="comment">/* NULL for reader to apply to */</span>
<a name="l02623"></a>02623
<a name="l02624"></a>02624 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02625"></a>02625 }
<a name="l02626"></a>02626
<a name="l02658"></a>02658 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02659"></a><a class="code" href="group__DBusMarshal.html#g004da084963a3a74589b28611b9d8398">02659</a> <a class="code" href="group__DBusMarshal.html#g004da084963a3a74589b28611b9d8398">_dbus_type_writer_write_reader_partial</a> (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l02660"></a>02660 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader,
<a name="l02661"></a>02661 <span class="keyword">const</span> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *start_after,
<a name="l02662"></a>02662 <span class="keywordtype">int</span> start_after_new_pos,
<a name="l02663"></a>02663 <span class="keywordtype">int</span> start_after_new_len,
<a name="l02664"></a>02664 <a class="code" href="structDBusList.html">DBusList</a> **fixups)
<a name="l02665"></a>02665 {
<a name="l02666"></a>02666 <a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> orig;
<a name="l02667"></a>02667 <span class="keywordtype">int</span> orig_type_len;
<a name="l02668"></a>02668 <span class="keywordtype">int</span> orig_value_len;
<a name="l02669"></a>02669 <span class="keywordtype">int</span> new_bytes;
<a name="l02670"></a>02670 <span class="keywordtype">int</span> orig_enabled;
<a name="l02671"></a>02671
<a name="l02672"></a>02672 orig = *writer;
<a name="l02673"></a>02673 orig_type_len = _dbus_string_get_length (writer-><a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>);
<a name="l02674"></a>02674 orig_value_len = _dbus_string_get_length (writer-><a class="code" href="structDBusTypeWriter.html#a4e4b3af31fd7a93d0e54d10882bcc07">value_str</a>);
<a name="l02675"></a>02675 orig_enabled = writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a>;
<a name="l02676"></a>02676
<a name="l02677"></a>02677 <span class="keywordflow">if</span> (start_after)
<a name="l02678"></a>02678 <a class="code" href="group__DBusMarshal.html#g44efb6d70d7f68fc7dd8523a303dfdb2">_dbus_type_writer_set_enabled</a> (writer, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02679"></a>02679
<a name="l02680"></a>02680 <span class="keywordflow">if</span> (!writer_write_reader_helper (writer, reader, start_after,
<a name="l02681"></a>02681 start_after_new_pos,
<a name="l02682"></a>02682 start_after_new_len,
<a name="l02683"></a>02683 fixups, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>))
<a name="l02684"></a>02684 <span class="keywordflow">goto</span> oom;
<a name="l02685"></a>02685
<a name="l02686"></a>02686 <a class="code" href="group__DBusMarshal.html#g44efb6d70d7f68fc7dd8523a303dfdb2">_dbus_type_writer_set_enabled</a> (writer, orig_enabled);
<a name="l02687"></a>02687 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02688"></a>02688
<a name="l02689"></a>02689 oom:
<a name="l02690"></a>02690 <span class="keywordflow">if</span> (!writer->type_pos_is_expectation)
<a name="l02691"></a>02691 {
<a name="l02692"></a>02692 new_bytes = _dbus_string_get_length (writer->type_str) - orig_type_len;
<a name="l02693"></a>02693 <a class="code" href="group__DBusString.html#g7e0e164ad5bb094e5ccad9edc7ae4235">_dbus_string_delete</a> (writer->type_str, orig.<a class="code" href="structDBusTypeWriter.html#77c19debc0427372f368cfe7188951f8">type_pos</a>, new_bytes);
<a name="l02694"></a>02694 }
<a name="l02695"></a>02695 new_bytes = _dbus_string_get_length (writer->value_str) - orig_value_len;
<a name="l02696"></a>02696 <a class="code" href="group__DBusString.html#g7e0e164ad5bb094e5ccad9edc7ae4235">_dbus_string_delete</a> (writer->value_str, orig.<a class="code" href="structDBusTypeWriter.html#27c0475eedd90be65f90a799e5210947">value_pos</a>, new_bytes);
<a name="l02697"></a>02697
<a name="l02698"></a>02698 *writer = orig;
<a name="l02699"></a>02699
<a name="l02700"></a>02700 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02701"></a>02701 }
<a name="l02702"></a>02702
<a name="l02712"></a>02712 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02713"></a><a class="code" href="group__DBusMarshal.html#g4905750705d220efe9dfc71f49bedc11">02713</a> <a class="code" href="group__DBusMarshal.html#g4905750705d220efe9dfc71f49bedc11">_dbus_type_writer_write_reader</a> (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l02714"></a>02714 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> *reader)
<a name="l02715"></a>02715 {
<a name="l02716"></a>02716 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g004da084963a3a74589b28611b9d8398">_dbus_type_writer_write_reader_partial</a> (writer, reader, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, 0, 0, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02717"></a>02717 }
<a name="l02718"></a>02718
<a name="l02728"></a>02728 <span class="keywordtype">void</span>
<a name="l02729"></a><a class="code" href="group__DBusMarshal.html#g44efb6d70d7f68fc7dd8523a303dfdb2">02729</a> <a class="code" href="group__DBusMarshal.html#g44efb6d70d7f68fc7dd8523a303dfdb2">_dbus_type_writer_set_enabled</a> (<a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> *writer,
<a name="l02730"></a>02730 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> enabled)
<a name="l02731"></a>02731 {
<a name="l02732"></a>02732 writer-><a class="code" href="structDBusTypeWriter.html#52c8617918c108d36b947cbdfc99c6ea">enabled</a> = enabled != <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02733"></a>02733 }
<a name="l02734"></a>02734 <span class="comment">/* end of DBusMarshal group */</span>
<a name="l02736"></a>02736
<a name="l02737"></a>02737 <span class="comment">/* tests in dbus-marshal-recursive-util.c */</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Dec 14 22:26:11 2009 for D-Bus by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
</body>
</html>