Current File : //usr/share/doc/dbus/api/dbus-string_8c_source.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>D-Bus: dbus-string.c Source File</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />



</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">D-Bus
   &#160;<span id="projectnumber">1.8.20</span>
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.6.1 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="headertitle">
<div class="title">dbus-string.c</div>  </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* -*- mode: C; c-file-style: &quot;gnu&quot;; indent-tabs-mode: nil; -*- */</span>
<a name="l00002"></a>00002 <span class="comment">/* dbus-string.c String utility class (internal to D-Bus implementation)</span>
<a name="l00003"></a>00003 <span class="comment"> * </span>
<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.</span>
<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2006 Ralf Habacker &lt;ralf.habacker@freenet.de&gt;</span>
<a name="l00006"></a>00006 <span class="comment"> *</span>
<a name="l00007"></a>00007 <span class="comment"> * Licensed under the Academic Free License version 2.1</span>
<a name="l00008"></a>00008 <span class="comment"> * </span>
<a name="l00009"></a>00009 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
<a name="l00010"></a>00010 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
<a name="l00011"></a>00011 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
<a name="l00012"></a>00012 <span class="comment"> * (at your option) any later version.</span>
<a name="l00013"></a>00013 <span class="comment"> *</span>
<a name="l00014"></a>00014 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
<a name="l00015"></a>00015 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00016"></a>00016 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<a name="l00017"></a>00017 <span class="comment"> * GNU General Public License for more details.</span>
<a name="l00018"></a>00018 <span class="comment"> * </span>
<a name="l00019"></a>00019 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
<a name="l00020"></a>00020 <span class="comment"> * along with this program; if not, write to the Free Software</span>
<a name="l00021"></a>00021 <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA</span>
<a name="l00022"></a>00022 <span class="comment"> *</span>
<a name="l00023"></a>00023 <span class="comment"> */</span>
<a name="l00024"></a>00024 
<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;config.h&gt;</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include &quot;dbus-internals.h&quot;</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include &quot;dbus-string.h&quot;</span>
<a name="l00028"></a>00028 <span class="comment">/* we allow a system header here, for speed/convenience */</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;string.h&gt;</span>
<a name="l00030"></a>00030 <span class="comment">/* for vsnprintf */</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#define DBUS_CAN_USE_DBUS_STRING_PRIVATE 1</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include &quot;dbus-string-private.h&quot;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &quot;dbus-marshal-basic.h&quot;</span> <span class="comment">/* probably should be removed by moving the usage of DBUS_TYPE</span>
<a name="l00035"></a>00035 <span class="comment">                                 * into the marshaling-related files</span>
<a name="l00036"></a>00036 <span class="comment">                                 */</span>
<a name="l00037"></a>00037 <span class="comment">/* for DBUS_VA_COPY */</span>
<a name="l00038"></a>00038 <span class="preprocessor">#include &quot;dbus-sysdeps.h&quot;</span>
<a name="l00039"></a>00039 
<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00079"></a>00079 fixup_alignment (<a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real)
<a name="l00080"></a>00080 {
<a name="l00081"></a>00081   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *aligned;
<a name="l00082"></a>00082   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *real_block;
<a name="l00083"></a>00083   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> old_align_offset;
<a name="l00084"></a>00084 
<a name="l00085"></a>00085   <span class="comment">/* we have to have extra space in real-&gt;allocated for the align offset and nul byte */</span>
<a name="l00086"></a>00086   _dbus_assert (real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> &lt;= real-&gt;<a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a> - _DBUS_STRING_ALLOCATION_PADDING);
<a name="l00087"></a>00087   
<a name="l00088"></a>00088   old_align_offset = real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a>;
<a name="l00089"></a>00089   real_block = real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> - old_align_offset;
<a name="l00090"></a>00090   
<a name="l00091"></a>00091   aligned = _DBUS_ALIGN_ADDRESS (real_block, 8);
<a name="l00092"></a>00092 
<a name="l00093"></a>00093   real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a> = aligned - real_block;
<a name="l00094"></a>00094   real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> = aligned;
<a name="l00095"></a>00095   
<a name="l00096"></a>00096   <span class="keywordflow">if</span> (old_align_offset != real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a>)
<a name="l00097"></a>00097     {
<a name="l00098"></a>00098       <span class="comment">/* Here comes the suck */</span>
<a name="l00099"></a>00099       memmove (real_block + real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a>,
<a name="l00100"></a>00100                real_block + old_align_offset,
<a name="l00101"></a>00101                real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> + 1);
<a name="l00102"></a>00102     }
<a name="l00103"></a>00103 
<a name="l00104"></a>00104   _dbus_assert (real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a> &lt; 8);
<a name="l00105"></a>00105   _dbus_assert (_DBUS_ALIGN_ADDRESS (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>, 8) == real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>);
<a name="l00106"></a>00106 }
<a name="l00107"></a>00107 
<a name="l00108"></a>00108 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00109"></a>00109 undo_alignment (<a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real)
<a name="l00110"></a>00110 {
<a name="l00111"></a>00111   <span class="keywordflow">if</span> (real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a> != 0)
<a name="l00112"></a>00112     {
<a name="l00113"></a>00113       memmove (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> - real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a>,
<a name="l00114"></a>00114                real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>,
<a name="l00115"></a>00115                real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> + 1);
<a name="l00116"></a>00116 
<a name="l00117"></a>00117       real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> = real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> - real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a>;
<a name="l00118"></a>00118       real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a> = 0;
<a name="l00119"></a>00119     }
<a name="l00120"></a>00120 }
<a name="l00121"></a>00121 
<a name="l00131"></a>00131 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00132"></a><a class="code" href="group__DBusString.html#ga569b784beea1b4fa98f05d27e6dd0e72">00132</a> <a class="code" href="group__DBusString.html#ga569b784beea1b4fa98f05d27e6dd0e72" title="Initializes a string that can be up to the given allocation size before it has to realloc...">_dbus_string_init_preallocated</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00133"></a>00133                                 <span class="keywordtype">int</span>         allocate_size)
<a name="l00134"></a>00134 {
<a name="l00135"></a>00135   <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real;
<a name="l00136"></a>00136   
<a name="l00137"></a>00137   _dbus_assert (str != <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>);
<a name="l00138"></a>00138 
<a name="l00139"></a>00139   _dbus_assert (<span class="keyword">sizeof</span> (<a class="code" href="structDBusString.html">DBusString</a>) == <span class="keyword">sizeof</span> (<a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a>));
<a name="l00140"></a>00140   
<a name="l00141"></a>00141   real = (<a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a>*) str;
<a name="l00142"></a>00142 
<a name="l00143"></a>00143   <span class="comment">/* It&#39;s very important not to touch anything</span>
<a name="l00144"></a>00144 <span class="comment">   * other than real-&gt;str if we&#39;re going to fail,</span>
<a name="l00145"></a>00145 <span class="comment">   * since we also use this function to reset</span>
<a name="l00146"></a>00146 <span class="comment">   * an existing string, e.g. in _dbus_string_steal_data()</span>
<a name="l00147"></a>00147 <span class="comment">   */</span>
<a name="l00148"></a>00148   
<a name="l00149"></a>00149   real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> = <a class="code" href="group__DBusMemory.html#gaf6e588659067a854c3cca7ebe8ae5084" title="Allocates the given number of bytes, as with standard malloc().">dbus_malloc</a> (_DBUS_STRING_ALLOCATION_PADDING + allocate_size);
<a name="l00150"></a>00150   <span class="keywordflow">if</span> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> == <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>)
<a name="l00151"></a>00151     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;  
<a name="l00152"></a>00152   
<a name="l00153"></a>00153   real-&gt;<a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a> = _DBUS_STRING_ALLOCATION_PADDING + allocate_size;
<a name="l00154"></a>00154   real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> = 0;
<a name="l00155"></a>00155   real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>] = <span class="charliteral">&#39;\0&#39;</span>;
<a name="l00156"></a>00156   
<a name="l00157"></a>00157   real-&gt;<a class="code" href="structDBusRealString.html#a79675cfbe443cc779e3c668fbcb99578" title="String data is not owned by DBusString.">constant</a> = <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00158"></a>00158   real-&gt;<a class="code" href="structDBusRealString.html#a865d892d7cacedd598b828c15c5815c5" title="DBusString has been locked and can&#39;t be changed.">locked</a> = <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00159"></a>00159   real-&gt;<a class="code" href="structDBusRealString.html#a062f6b092cc6c4baf01f2a820e2ba5ad" title="DBusString is invalid (e.g.">invalid</a> = <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00160"></a>00160   real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a> = 0;
<a name="l00161"></a>00161   
<a name="l00162"></a>00162   fixup_alignment (real);
<a name="l00163"></a>00163   
<a name="l00164"></a>00164   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00165"></a>00165 }
<a name="l00166"></a>00166 
<a name="l00174"></a>00174 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00175"></a><a class="code" href="group__DBusString.html#ga348252317f7bb8ac43529972945830ae">00175</a> <a class="code" href="group__DBusString.html#ga348252317f7bb8ac43529972945830ae" title="Initializes a string.">_dbus_string_init</a> (<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l00176"></a>00176 {
<a name="l00177"></a>00177   <span class="keywordflow">return</span> <a class="code" href="group__DBusString.html#ga569b784beea1b4fa98f05d27e6dd0e72" title="Initializes a string that can be up to the given allocation size before it has to realloc...">_dbus_string_init_preallocated</a> (str, 0);
<a name="l00178"></a>00178 }
<a name="l00179"></a>00179 
<a name="l00189"></a>00189 <span class="keywordtype">void</span>
<a name="l00190"></a><a class="code" href="group__DBusString.html#ga374640ddfa2f0b27a8356e2379ba8043">00190</a> <a class="code" href="group__DBusString.html#ga374640ddfa2f0b27a8356e2379ba8043" title="Initializes a constant string.">_dbus_string_init_const</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00191"></a>00191                          <span class="keyword">const</span> <span class="keywordtype">char</span> *value)
<a name="l00192"></a>00192 {
<a name="l00193"></a>00193   _dbus_assert (value != <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>);
<a name="l00194"></a>00194   
<a name="l00195"></a>00195   <a class="code" href="group__DBusString.html#ga6792a5c1725faa9d635d95f7a3b5bfae" title="Initializes a constant string with a length.">_dbus_string_init_const_len</a> (str, value,
<a name="l00196"></a>00196                                strlen (value));
<a name="l00197"></a>00197 }
<a name="l00198"></a>00198 
<a name="l00209"></a>00209 <span class="keywordtype">void</span>
<a name="l00210"></a><a class="code" href="group__DBusString.html#ga6792a5c1725faa9d635d95f7a3b5bfae">00210</a> <a class="code" href="group__DBusString.html#ga6792a5c1725faa9d635d95f7a3b5bfae" title="Initializes a constant string with a length.">_dbus_string_init_const_len</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00211"></a>00211                              <span class="keyword">const</span> <span class="keywordtype">char</span> *value,
<a name="l00212"></a>00212                              <span class="keywordtype">int</span>         len)
<a name="l00213"></a>00213 {
<a name="l00214"></a>00214   <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real;
<a name="l00215"></a>00215   
<a name="l00216"></a>00216   _dbus_assert (str != <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>);
<a name="l00217"></a>00217   _dbus_assert (len == 0 || value != <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>);
<a name="l00218"></a>00218   _dbus_assert (len &lt;= <a class="code" href="group__DBusStringInternals.html#ga1e3535c07f25485129d9d17194e303af" title="The maximum length of a DBusString.">_DBUS_STRING_MAX_LENGTH</a>);
<a name="l00219"></a>00219   _dbus_assert (len &gt;= 0);
<a name="l00220"></a>00220   
<a name="l00221"></a>00221   real = (<a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a>*) str;
<a name="l00222"></a>00222   
<a name="l00223"></a>00223   real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*) value;
<a name="l00224"></a>00224   real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> = len;
<a name="l00225"></a>00225   real-&gt;<a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a> = real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> + _DBUS_STRING_ALLOCATION_PADDING; <span class="comment">/* a lie, just to avoid special-case assertions... */</span>
<a name="l00226"></a>00226   real-&gt;<a class="code" href="structDBusRealString.html#a79675cfbe443cc779e3c668fbcb99578" title="String data is not owned by DBusString.">constant</a> = <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00227"></a>00227   real-&gt;<a class="code" href="structDBusRealString.html#a865d892d7cacedd598b828c15c5815c5" title="DBusString has been locked and can&#39;t be changed.">locked</a> = <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00228"></a>00228   real-&gt;<a class="code" href="structDBusRealString.html#a062f6b092cc6c4baf01f2a820e2ba5ad" title="DBusString is invalid (e.g.">invalid</a> = <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00229"></a>00229   real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a> = 0;
<a name="l00230"></a>00230 
<a name="l00231"></a>00231   <span class="comment">/* We don&#39;t require const strings to be 8-byte aligned as the</span>
<a name="l00232"></a>00232 <span class="comment">   * memory is coming from elsewhere.</span>
<a name="l00233"></a>00233 <span class="comment">   */</span>
<a name="l00234"></a>00234 }
<a name="l00235"></a>00235 
<a name="l00241"></a>00241 <span class="keywordtype">void</span>
<a name="l00242"></a><a class="code" href="group__DBusString.html#ga781ca91acda49a834dce7d0ed0eef212">00242</a> <a class="code" href="group__DBusString.html#ga781ca91acda49a834dce7d0ed0eef212" title="Frees a string created by _dbus_string_init().">_dbus_string_free</a> (<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l00243"></a>00243 {
<a name="l00244"></a>00244   <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real = (<a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a>*) str;
<a name="l00245"></a>00245   <a class="code" href="group__DBusStringInternals.html#ga862cb88a139179981e1fcd5643165b56" title="Checks a bunch of assertions about a string object.">DBUS_GENERIC_STRING_PREAMBLE</a> (real);
<a name="l00246"></a>00246   
<a name="l00247"></a>00247   <span class="keywordflow">if</span> (real-&gt;<a class="code" href="structDBusRealString.html#a79675cfbe443cc779e3c668fbcb99578" title="String data is not owned by DBusString.">constant</a>)
<a name="l00248"></a>00248     <span class="keywordflow">return</span>;
<a name="l00249"></a>00249 
<a name="l00250"></a>00250   <span class="comment">/* so it&#39;s safe if @p str returned by a failed</span>
<a name="l00251"></a>00251 <span class="comment">   * _dbus_string_init call</span>
<a name="l00252"></a>00252 <span class="comment">   * Bug: https://bugs.freedesktop.org/show_bug.cgi?id=65959</span>
<a name="l00253"></a>00253 <span class="comment">   */</span>
<a name="l00254"></a>00254   <span class="keywordflow">if</span> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> == <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>)
<a name="l00255"></a>00255     <span class="keywordflow">return</span>;
<a name="l00256"></a>00256 
<a name="l00257"></a>00257   <a class="code" href="group__DBusMemory.html#ga34e666b19b015035a9a31e53da84b39a" title="Frees a block of memory previously allocated by dbus_malloc() or dbus_malloc0().">dbus_free</a> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> - real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a>);
<a name="l00258"></a>00258 
<a name="l00259"></a>00259   real-&gt;<a class="code" href="structDBusRealString.html#a062f6b092cc6c4baf01f2a820e2ba5ad" title="DBusString is invalid (e.g.">invalid</a> = <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00260"></a>00260 }
<a name="l00261"></a>00261 
<a name="l00262"></a>00262 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00263"></a>00263 compact (<a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real,
<a name="l00264"></a>00264          <span class="keywordtype">int</span>             max_waste)
<a name="l00265"></a>00265 {
<a name="l00266"></a>00266   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *new_str;
<a name="l00267"></a>00267   <span class="keywordtype">int</span> new_allocated;
<a name="l00268"></a>00268   <span class="keywordtype">int</span> waste;
<a name="l00269"></a>00269 
<a name="l00270"></a>00270   waste = real-&gt;<a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a> - (real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> + _DBUS_STRING_ALLOCATION_PADDING);
<a name="l00271"></a>00271 
<a name="l00272"></a>00272   <span class="keywordflow">if</span> (waste &lt;= max_waste)
<a name="l00273"></a>00273     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00274"></a>00274 
<a name="l00275"></a>00275   new_allocated = real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> + _DBUS_STRING_ALLOCATION_PADDING;
<a name="l00276"></a>00276 
<a name="l00277"></a>00277   new_str = <a class="code" href="group__DBusMemory.html#ga2d505f2960ccf343042d363170b27f9c" title="Resizes a block of memory previously allocated by dbus_malloc() or dbus_malloc0().">dbus_realloc</a> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> - real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a>, new_allocated);
<a name="l00278"></a>00278   <span class="keywordflow">if</span> (_DBUS_UNLIKELY (new_str == <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>))
<a name="l00279"></a>00279     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00280"></a>00280 
<a name="l00281"></a>00281   real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> = new_str + real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a>;
<a name="l00282"></a>00282   real-&gt;<a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a> = new_allocated;
<a name="l00283"></a>00283   fixup_alignment (real);
<a name="l00284"></a>00284 
<a name="l00285"></a>00285   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00286"></a>00286 }
<a name="l00287"></a>00287 
<a name="l00288"></a>00288 <span class="preprocessor">#ifdef DBUS_ENABLE_EMBEDDED_TESTS</span>
<a name="l00289"></a>00289 <span class="preprocessor"></span><span class="comment">/* Not using this feature at the moment,</span>
<a name="l00290"></a>00290 <span class="comment"> * so marked DBUS_ENABLE_EMBEDDED_TESTS-only</span>
<a name="l00291"></a>00291 <span class="comment"> */</span>
<a name="l00301"></a>00301 <span class="keywordtype">void</span>
<a name="l00302"></a>00302 _dbus_string_lock (<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l00303"></a>00303 {  
<a name="l00304"></a>00304   <a class="code" href="group__DBusStringInternals.html#gad9f957c4027c34a5c330822aa98b9307" title="Checks assertions about a string object that may be locked but can&#39;t be const.">DBUS_LOCKED_STRING_PREAMBLE</a> (str); <span class="comment">/* can lock multiple times */</span>
<a name="l00305"></a>00305 
<a name="l00306"></a>00306   real-&gt;<a class="code" href="structDBusRealString.html#a865d892d7cacedd598b828c15c5815c5" title="DBusString has been locked and can&#39;t be changed.">locked</a> = <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00307"></a>00307 
<a name="l00308"></a>00308   <span class="comment">/* Try to realloc to avoid excess memory usage, since</span>
<a name="l00309"></a>00309 <span class="comment">   * we know we won&#39;t change the string further</span>
<a name="l00310"></a>00310 <span class="comment">   */</span>
<a name="l00311"></a>00311 <span class="preprocessor">#define MAX_WASTE 48</span>
<a name="l00312"></a>00312 <span class="preprocessor"></span>  compact (real, MAX_WASTE);
<a name="l00313"></a>00313 }
<a name="l00314"></a>00314 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_ENABLE_EMBEDDED_TESTS */</span>
<a name="l00315"></a>00315 
<a name="l00316"></a>00316 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00317"></a>00317 reallocate_for_length (<a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real,
<a name="l00318"></a>00318                        <span class="keywordtype">int</span>             new_length)
<a name="l00319"></a>00319 {
<a name="l00320"></a>00320   <span class="keywordtype">int</span> new_allocated;
<a name="l00321"></a>00321   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *new_str;
<a name="l00322"></a>00322 
<a name="l00323"></a>00323   <span class="comment">/* at least double our old allocation to avoid O(n), avoiding</span>
<a name="l00324"></a>00324 <span class="comment">   * overflow</span>
<a name="l00325"></a>00325 <span class="comment">   */</span>
<a name="l00326"></a>00326   <span class="keywordflow">if</span> (real-&gt;<a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a> &gt; (<a class="code" href="group__DBusStringInternals.html#ga1e3535c07f25485129d9d17194e303af" title="The maximum length of a DBusString.">_DBUS_STRING_MAX_LENGTH</a> + _DBUS_STRING_ALLOCATION_PADDING) / 2)
<a name="l00327"></a>00327     new_allocated = <a class="code" href="group__DBusStringInternals.html#ga1e3535c07f25485129d9d17194e303af" title="The maximum length of a DBusString.">_DBUS_STRING_MAX_LENGTH</a> + _DBUS_STRING_ALLOCATION_PADDING;
<a name="l00328"></a>00328   <span class="keywordflow">else</span>
<a name="l00329"></a>00329     new_allocated = real-&gt;<a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a> * 2;
<a name="l00330"></a>00330 
<a name="l00331"></a>00331   <span class="comment">/* if you change the code just above here, run the tests without</span>
<a name="l00332"></a>00332 <span class="comment">   * the following assert-only hack before you commit</span>
<a name="l00333"></a>00333 <span class="comment">   */</span>
<a name="l00334"></a>00334   <span class="comment">/* This is keyed off asserts in addition to tests so when you</span>
<a name="l00335"></a>00335 <span class="comment">   * disable asserts to profile, you don&#39;t get this destroyer</span>
<a name="l00336"></a>00336 <span class="comment">   * of profiles.</span>
<a name="l00337"></a>00337 <span class="comment">   */</span>
<a name="l00338"></a>00338 <span class="preprocessor">#if defined (DBUS_ENABLE_EMBEDDED_TESTS) &amp;&amp; !defined (DBUS_DISABLE_ASSERT)</span>
<a name="l00339"></a>00339 <span class="preprocessor"></span>  new_allocated = 0; <span class="comment">/* ensure a realloc every time so that we go</span>
<a name="l00340"></a>00340 <span class="comment">                      * through all malloc failure codepaths</span>
<a name="l00341"></a>00341 <span class="comment">                      */</span>
<a name="l00342"></a>00342 <span class="preprocessor">#endif</span>
<a name="l00343"></a>00343 <span class="preprocessor"></span>
<a name="l00344"></a>00344   <span class="comment">/* But be sure we always alloc at least space for the new length */</span>
<a name="l00345"></a>00345   new_allocated = MAX (new_allocated,
<a name="l00346"></a>00346                        new_length + _DBUS_STRING_ALLOCATION_PADDING);
<a name="l00347"></a>00347 
<a name="l00348"></a>00348   _dbus_assert (new_allocated &gt;= real-&gt;<a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a>); <span class="comment">/* code relies on this */</span>
<a name="l00349"></a>00349   new_str = <a class="code" href="group__DBusMemory.html#ga2d505f2960ccf343042d363170b27f9c" title="Resizes a block of memory previously allocated by dbus_malloc() or dbus_malloc0().">dbus_realloc</a> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> - real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a>, new_allocated);
<a name="l00350"></a>00350   <span class="keywordflow">if</span> (_DBUS_UNLIKELY (new_str == <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>))
<a name="l00351"></a>00351     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00352"></a>00352 
<a name="l00353"></a>00353   real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> = new_str + real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a>;
<a name="l00354"></a>00354   real-&gt;<a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a> = new_allocated;
<a name="l00355"></a>00355   fixup_alignment (real);
<a name="l00356"></a>00356 
<a name="l00357"></a>00357   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00358"></a>00358 }
<a name="l00359"></a>00359 
<a name="l00371"></a>00371 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00372"></a><a class="code" href="group__DBusString.html#gac49ec5782ca606029c096124b5e43ffc">00372</a> <a class="code" href="group__DBusString.html#gac49ec5782ca606029c096124b5e43ffc" title="Compacts the string to avoid wasted memory.">_dbus_string_compact</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00373"></a>00373                       <span class="keywordtype">int</span>         max_waste)
<a name="l00374"></a>00374 {
<a name="l00375"></a>00375   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00376"></a>00376 
<a name="l00377"></a>00377   <span class="keywordflow">return</span> compact (real, max_waste);
<a name="l00378"></a>00378 }
<a name="l00379"></a>00379 
<a name="l00380"></a>00380 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00381"></a>00381 set_length (<a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real,
<a name="l00382"></a>00382             <span class="keywordtype">int</span>             new_length)
<a name="l00383"></a>00383 {
<a name="l00384"></a>00384   <span class="comment">/* Note, we are setting the length not including nul termination */</span>
<a name="l00385"></a>00385 
<a name="l00386"></a>00386   <span class="comment">/* exceeding max length is the same as failure to allocate memory */</span>
<a name="l00387"></a>00387   <span class="keywordflow">if</span> (_DBUS_UNLIKELY (new_length &gt; <a class="code" href="group__DBusStringInternals.html#ga1e3535c07f25485129d9d17194e303af" title="The maximum length of a DBusString.">_DBUS_STRING_MAX_LENGTH</a>))
<a name="l00388"></a>00388     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00389"></a>00389   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (new_length &gt; (real-&gt;<a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a> - _DBUS_STRING_ALLOCATION_PADDING) &amp;&amp;
<a name="l00390"></a>00390            _DBUS_UNLIKELY (!reallocate_for_length (real, new_length)))
<a name="l00391"></a>00391     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00392"></a>00392   <span class="keywordflow">else</span>
<a name="l00393"></a>00393     {
<a name="l00394"></a>00394       real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> = new_length;
<a name="l00395"></a>00395       real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[new_length] = <span class="charliteral">&#39;\0&#39;</span>;
<a name="l00396"></a>00396       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00397"></a>00397     }
<a name="l00398"></a>00398 }
<a name="l00399"></a>00399 
<a name="l00400"></a>00400 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00401"></a>00401 open_gap (<span class="keywordtype">int</span>             len,
<a name="l00402"></a>00402           <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *dest,
<a name="l00403"></a>00403           <span class="keywordtype">int</span>             insert_at)
<a name="l00404"></a>00404 {
<a name="l00405"></a>00405   <span class="keywordflow">if</span> (len == 0)
<a name="l00406"></a>00406     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00407"></a>00407 
<a name="l00408"></a>00408   <span class="keywordflow">if</span> (len &gt; <a class="code" href="group__DBusStringInternals.html#ga1e3535c07f25485129d9d17194e303af" title="The maximum length of a DBusString.">_DBUS_STRING_MAX_LENGTH</a> - dest-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>)
<a name="l00409"></a>00409     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>; <span class="comment">/* detected overflow of dest-&gt;len + len below */</span>
<a name="l00410"></a>00410   
<a name="l00411"></a>00411   <span class="keywordflow">if</span> (!set_length (dest, dest-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> + len))
<a name="l00412"></a>00412     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00413"></a>00413 
<a name="l00414"></a>00414   memmove (dest-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + insert_at + len, 
<a name="l00415"></a>00415            dest-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + insert_at,
<a name="l00416"></a>00416            dest-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> - len - insert_at);
<a name="l00417"></a>00417 
<a name="l00418"></a>00418   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00419"></a>00419 }
<a name="l00420"></a>00420 
<a name="l00421"></a>00421 <span class="preprocessor">#ifndef _dbus_string_get_data</span>
<a name="l00422"></a>00422 <span class="preprocessor"></span>
<a name="l00433"></a>00433 <span class="keywordtype">char</span>*
<a name="l00434"></a><a class="code" href="group__DBusString.html#gaa9b5aa08d313048df72aa12bb4dc0cda">00434</a> <a class="code" href="group__DBusString.html#gaa9b5aa08d313048df72aa12bb4dc0cda" title="Gets the raw character buffer from the string.">_dbus_string_get_data</a> (<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l00435"></a>00435 {
<a name="l00436"></a>00436   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00437"></a>00437   
<a name="l00438"></a>00438   <span class="keywordflow">return</span> (<span class="keywordtype">char</span>*) real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>;
<a name="l00439"></a>00439 }
<a name="l00440"></a>00440 <span class="preprocessor">#endif </span><span class="comment">/* _dbus_string_get_data */</span>
<a name="l00441"></a>00441 
<a name="l00442"></a>00442 <span class="comment">/* only do the function if we don&#39;t have the macro */</span>
<a name="l00443"></a>00443 <span class="preprocessor">#ifndef _dbus_string_get_const_data</span>
<a name="l00444"></a>00444 <span class="preprocessor"></span>
<a name="l00450"></a>00450 <span class="keyword">const</span> <span class="keywordtype">char</span>*
<a name="l00451"></a><a class="code" href="group__DBusString.html#ga33e20241ae7d784624f97d89b1a0539e">00451</a> <a class="code" href="group__DBusString.html#ga33e20241ae7d784624f97d89b1a0539e" title="Gets the raw character buffer from a const string.">_dbus_string_get_const_data</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a>  *str)
<a name="l00452"></a>00452 {
<a name="l00453"></a>00453   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l00454"></a>00454   
<a name="l00455"></a>00455   <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>*) real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>;
<a name="l00456"></a>00456 }
<a name="l00457"></a>00457 <span class="preprocessor">#endif </span><span class="comment">/* _dbus_string_get_const_data */</span>
<a name="l00458"></a>00458 
<a name="l00472"></a>00472 <span class="keywordtype">char</span>*
<a name="l00473"></a><a class="code" href="group__DBusString.html#ga7a73fb373398606e6e1d0a86c4587a3c">00473</a> <a class="code" href="group__DBusString.html#ga7a73fb373398606e6e1d0a86c4587a3c" title="Gets a sub-portion of the raw character buffer from the string.">_dbus_string_get_data_len</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00474"></a>00474                            <span class="keywordtype">int</span>         start,
<a name="l00475"></a>00475                            <span class="keywordtype">int</span>         len)
<a name="l00476"></a>00476 {
<a name="l00477"></a>00477   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00478"></a>00478   _dbus_assert (start &gt;= 0);
<a name="l00479"></a>00479   _dbus_assert (len &gt;= 0);
<a name="l00480"></a>00480   _dbus_assert (start &lt;= real-&gt;len);
<a name="l00481"></a>00481   _dbus_assert (len &lt;= real-&gt;len - start);
<a name="l00482"></a>00482   
<a name="l00483"></a>00483   <span class="keywordflow">return</span> (<span class="keywordtype">char</span>*) real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + start;
<a name="l00484"></a>00484 }
<a name="l00485"></a>00485 
<a name="l00486"></a>00486 <span class="comment">/* only do the function if we don&#39;t have the macro */</span>
<a name="l00487"></a>00487 <span class="preprocessor">#ifndef _dbus_string_get_const_data_len</span>
<a name="l00488"></a>00488 <span class="preprocessor"></span>
<a name="l00496"></a>00496 <span class="keyword">const</span> <span class="keywordtype">char</span>*
<a name="l00497"></a><a class="code" href="group__DBusString.html#ga8c202a65e938f9bdb859fc6705a4f1bb">00497</a> <a class="code" href="group__DBusString.html#ga8c202a65e938f9bdb859fc6705a4f1bb" title="const version of _dbus_string_get_data_len().">_dbus_string_get_const_data_len</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a>  *str,
<a name="l00498"></a>00498                                  <span class="keywordtype">int</span>                start,
<a name="l00499"></a>00499                                  <span class="keywordtype">int</span>                len)
<a name="l00500"></a>00500 {
<a name="l00501"></a>00501   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l00502"></a>00502   _dbus_assert (start &gt;= 0);
<a name="l00503"></a>00503   _dbus_assert (len &gt;= 0);
<a name="l00504"></a>00504   _dbus_assert (start &lt;= real-&gt;len);
<a name="l00505"></a>00505   _dbus_assert (len &lt;= real-&gt;len - start);
<a name="l00506"></a>00506   
<a name="l00507"></a>00507   <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>*) real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + start;
<a name="l00508"></a>00508 }
<a name="l00509"></a>00509 <span class="preprocessor">#endif </span><span class="comment">/* _dbus_string_get_const_data_len */</span>
<a name="l00510"></a>00510 
<a name="l00511"></a>00511 <span class="comment">/* only do the function if we don&#39;t have the macro */</span>
<a name="l00512"></a>00512 <span class="preprocessor">#ifndef _dbus_string_set_byte</span>
<a name="l00513"></a>00513 <span class="preprocessor"></span>
<a name="l00520"></a>00520 <span class="keywordtype">void</span>
<a name="l00521"></a><a class="code" href="group__DBusString.html#gab6c823e9406208363fcb5e96d580e738">00521</a> <a class="code" href="group__DBusString.html#gab6c823e9406208363fcb5e96d580e738" title="Sets the value of the byte at the given position.">_dbus_string_set_byte</a> (<a class="code" href="structDBusString.html">DBusString</a>    *str,
<a name="l00522"></a>00522                        <span class="keywordtype">int</span>            i,
<a name="l00523"></a>00523                        <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>  byte)
<a name="l00524"></a>00524 {
<a name="l00525"></a>00525   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00526"></a>00526   _dbus_assert (i &lt; real-&gt;len);
<a name="l00527"></a>00527   _dbus_assert (i &gt;= 0);
<a name="l00528"></a>00528   
<a name="l00529"></a>00529   real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i] = byte;
<a name="l00530"></a>00530 }
<a name="l00531"></a>00531 <span class="preprocessor">#endif </span><span class="comment">/* _dbus_string_set_byte */</span>
<a name="l00532"></a>00532 
<a name="l00533"></a>00533 <span class="comment">/* only have the function if we didn&#39;t create a macro */</span>
<a name="l00534"></a>00534 <span class="preprocessor">#ifndef _dbus_string_get_byte</span>
<a name="l00535"></a>00535 <span class="preprocessor"></span>
<a name="l00544"></a>00544 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>
<a name="l00545"></a><a class="code" href="group__DBusString.html#gac1cb7b207eac3c6527a5d42fbc5449b1">00545</a> <a class="code" href="group__DBusString.html#gac1cb7b207eac3c6527a5d42fbc5449b1" title="Gets the byte at the given position.">_dbus_string_get_byte</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a>  *str,
<a name="l00546"></a>00546                        <span class="keywordtype">int</span>                start)
<a name="l00547"></a>00547 {
<a name="l00548"></a>00548   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l00549"></a>00549   _dbus_assert (start &lt;= real-&gt;len);
<a name="l00550"></a>00550   _dbus_assert (start &gt;= 0);
<a name="l00551"></a>00551   
<a name="l00552"></a>00552   <span class="keywordflow">return</span> real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[start];
<a name="l00553"></a>00553 }
<a name="l00554"></a>00554 <span class="preprocessor">#endif </span><span class="comment">/* _dbus_string_get_byte */</span>
<a name="l00555"></a>00555 
<a name="l00566"></a>00566 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00567"></a><a class="code" href="group__DBusString.html#gaa0964d662ad17c58eb044c1b153017a6">00567</a> <a class="code" href="group__DBusString.html#gaa0964d662ad17c58eb044c1b153017a6" title="Inserts a number of bytes of a given value at the given position.">_dbus_string_insert_bytes</a> (<a class="code" href="structDBusString.html">DBusString</a>   *str,
<a name="l00568"></a>00568                            <span class="keywordtype">int</span>           i,
<a name="l00569"></a>00569                            <span class="keywordtype">int</span>           n_bytes,
<a name="l00570"></a>00570                            <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> byte)
<a name="l00571"></a>00571 {
<a name="l00572"></a>00572   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00573"></a>00573   _dbus_assert (i &lt;= real-&gt;len);
<a name="l00574"></a>00574   _dbus_assert (i &gt;= 0);
<a name="l00575"></a>00575   _dbus_assert (n_bytes &gt;= 0);
<a name="l00576"></a>00576 
<a name="l00577"></a>00577   <span class="keywordflow">if</span> (n_bytes == 0)
<a name="l00578"></a>00578     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00579"></a>00579   
<a name="l00580"></a>00580   <span class="keywordflow">if</span> (!open_gap (n_bytes, real, i))
<a name="l00581"></a>00581     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00582"></a>00582   
<a name="l00583"></a>00583   memset (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + i, byte, n_bytes);
<a name="l00584"></a>00584 
<a name="l00585"></a>00585   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00586"></a>00586 }
<a name="l00587"></a>00587 
<a name="l00596"></a>00596 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00597"></a><a class="code" href="group__DBusString.html#gab0770800dce6df97e5d246105a44e7b4">00597</a> <a class="code" href="group__DBusString.html#gab0770800dce6df97e5d246105a44e7b4" title="Inserts a single byte at the given position.">_dbus_string_insert_byte</a> (<a class="code" href="structDBusString.html">DBusString</a>   *str,
<a name="l00598"></a>00598                            <span class="keywordtype">int</span>           i,
<a name="l00599"></a>00599                            <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> byte)
<a name="l00600"></a>00600 {
<a name="l00601"></a>00601   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00602"></a>00602   _dbus_assert (i &lt;= real-&gt;len);
<a name="l00603"></a>00603   _dbus_assert (i &gt;= 0);
<a name="l00604"></a>00604   
<a name="l00605"></a>00605   <span class="keywordflow">if</span> (!open_gap (1, real, i))
<a name="l00606"></a>00606     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00607"></a>00607 
<a name="l00608"></a>00608   real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i] = byte;
<a name="l00609"></a>00609 
<a name="l00610"></a>00610   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00611"></a>00611 }
<a name="l00612"></a>00612 
<a name="l00623"></a>00623 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00624"></a><a class="code" href="group__DBusString.html#ga556cc30c3ab032dbc63e217119f0d1f5">00624</a> <a class="code" href="group__DBusString.html#ga556cc30c3ab032dbc63e217119f0d1f5" title="Like _dbus_string_get_data(), but removes the gotten data from the original string.">_dbus_string_steal_data</a> (<a class="code" href="structDBusString.html">DBusString</a>        *str,
<a name="l00625"></a>00625                          <span class="keywordtype">char</span>             **data_return)
<a name="l00626"></a>00626 {
<a name="l00627"></a>00627   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00628"></a>00628   _dbus_assert (data_return != <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>);
<a name="l00629"></a>00629 
<a name="l00630"></a>00630   undo_alignment (real);
<a name="l00631"></a>00631   
<a name="l00632"></a>00632   *data_return = (<span class="keywordtype">char</span>*) real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>;
<a name="l00633"></a>00633 
<a name="l00634"></a>00634   <span class="comment">/* reset the string */</span>
<a name="l00635"></a>00635   if (!<a class="code" href="group__DBusString.html#ga348252317f7bb8ac43529972945830ae" title="Initializes a string.">_dbus_string_init</a> (str))
<a name="l00636"></a>00636     {
<a name="l00637"></a>00637       <span class="comment">/* hrm, put it back then */</span>
<a name="l00638"></a>00638       real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*) *data_return;
<a name="l00639"></a>00639       *data_return = <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>;
<a name="l00640"></a>00640       fixup_alignment (real);
<a name="l00641"></a>00641       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00642"></a>00642     }
<a name="l00643"></a>00643 
<a name="l00644"></a>00644   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00645"></a>00645 }
<a name="l00646"></a>00646 
<a name="l00654"></a>00654 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00655"></a><a class="code" href="group__DBusString.html#ga7e509d4f959d19d96f83250e62287b06">00655</a> <a class="code" href="group__DBusString.html#ga7e509d4f959d19d96f83250e62287b06" title="Copies the data from the string into a char*.">_dbus_string_copy_data</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a>  *str,
<a name="l00656"></a>00656                         <span class="keywordtype">char</span>             **data_return)
<a name="l00657"></a>00657 {
<a name="l00658"></a>00658   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l00659"></a>00659   _dbus_assert (data_return != <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>);
<a name="l00660"></a>00660   
<a name="l00661"></a>00661   *data_return = <a class="code" href="group__DBusMemory.html#gaf6e588659067a854c3cca7ebe8ae5084" title="Allocates the given number of bytes, as with standard malloc().">dbus_malloc</a> (real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> + 1);
<a name="l00662"></a>00662   <span class="keywordflow">if</span> (*data_return == <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>)
<a name="l00663"></a>00663     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00664"></a>00664 
<a name="l00665"></a>00665   memcpy (*data_return, real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>, real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> + 1);
<a name="l00666"></a>00666 
<a name="l00667"></a>00667   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00668"></a>00668 }
<a name="l00669"></a>00669 
<a name="l00679"></a>00679 <span class="keywordtype">void</span>
<a name="l00680"></a><a class="code" href="group__DBusString.html#gaf97b18e419678dbf967d9b9ad1112ca6">00680</a> <a class="code" href="group__DBusString.html#gaf97b18e419678dbf967d9b9ad1112ca6" title="Copies the contents of a DBusString into a different buffer.">_dbus_string_copy_to_buffer</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a>  *str,
<a name="l00681"></a>00681                              <span class="keywordtype">char</span>              *buffer,
<a name="l00682"></a>00682                              <span class="keywordtype">int</span>                avail_len)
<a name="l00683"></a>00683 {
<a name="l00684"></a>00684   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l00685"></a>00685 
<a name="l00686"></a>00686   _dbus_assert (avail_len &gt;= 0);
<a name="l00687"></a>00687   _dbus_assert (avail_len &gt;= real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>);
<a name="l00688"></a>00688   
<a name="l00689"></a>00689   memcpy (buffer, real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>, real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>);
<a name="l00690"></a>00690 }
<a name="l00691"></a>00691 
<a name="l00701"></a>00701 <span class="keywordtype">void</span>
<a name="l00702"></a><a class="code" href="group__DBusString.html#gac42891d26084a4da0f63038d93b63828">00702</a> <a class="code" href="group__DBusString.html#gac42891d26084a4da0f63038d93b63828" title="Copies the contents of a DBusString into a different buffer.">_dbus_string_copy_to_buffer_with_nul</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a>  *str,
<a name="l00703"></a>00703                                       <span class="keywordtype">char</span>              *buffer,
<a name="l00704"></a>00704                                       <span class="keywordtype">int</span>                avail_len)
<a name="l00705"></a>00705 {
<a name="l00706"></a>00706   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l00707"></a>00707 
<a name="l00708"></a>00708   _dbus_assert (avail_len &gt;= 0);
<a name="l00709"></a>00709   _dbus_assert (avail_len &gt; real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>);
<a name="l00710"></a>00710   
<a name="l00711"></a>00711   memcpy (buffer, real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>, real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>+1);
<a name="l00712"></a>00712 }
<a name="l00713"></a>00713 
<a name="l00714"></a>00714 <span class="comment">/* Only have the function if we don&#39;t have the macro */</span>
<a name="l00715"></a>00715 <span class="preprocessor">#ifndef _dbus_string_get_length</span>
<a name="l00716"></a>00716 <span class="preprocessor"></span>
<a name="l00721"></a>00721 <span class="keywordtype">int</span>
<a name="l00722"></a><a class="code" href="group__DBusString.html#gaa5136e6fd2c5188f4b88de7863369c6d">00722</a> <a class="code" href="group__DBusString.html#gaa5136e6fd2c5188f4b88de7863369c6d" title="Gets the length of a string (not including nul termination).">_dbus_string_get_length</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a>  *str)
<a name="l00723"></a>00723 {
<a name="l00724"></a>00724   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l00725"></a>00725   
<a name="l00726"></a>00726   <span class="keywordflow">return</span> real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>;
<a name="l00727"></a>00727 }
<a name="l00728"></a>00728 <span class="preprocessor">#endif </span><span class="comment">/* !_dbus_string_get_length */</span>
<a name="l00729"></a>00729 
<a name="l00742"></a>00742 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00743"></a><a class="code" href="group__DBusString.html#ga8f13997d90ceed2f437706e6b7804d9b">00743</a> <a class="code" href="group__DBusString.html#ga8f13997d90ceed2f437706e6b7804d9b" title="Makes a string longer by the given number of bytes.">_dbus_string_lengthen</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00744"></a>00744                        <span class="keywordtype">int</span>         additional_length)
<a name="l00745"></a>00745 {
<a name="l00746"></a>00746   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);  
<a name="l00747"></a>00747   _dbus_assert (additional_length &gt;= 0);
<a name="l00748"></a>00748 
<a name="l00749"></a>00749   <span class="keywordflow">if</span> (_DBUS_UNLIKELY (additional_length &gt; <a class="code" href="group__DBusStringInternals.html#ga1e3535c07f25485129d9d17194e303af" title="The maximum length of a DBusString.">_DBUS_STRING_MAX_LENGTH</a> - real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>))
<a name="l00750"></a>00750     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>; <span class="comment">/* would overflow */</span>
<a name="l00751"></a>00751   
<a name="l00752"></a>00752   <span class="keywordflow">return</span> set_length (real,
<a name="l00753"></a>00753                      real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> + additional_length);
<a name="l00754"></a>00754 }
<a name="l00755"></a>00755 
<a name="l00762"></a>00762 <span class="keywordtype">void</span>
<a name="l00763"></a><a class="code" href="group__DBusString.html#ga7af1cbfa905f26d972ab644d890548b8">00763</a> <a class="code" href="group__DBusString.html#ga7af1cbfa905f26d972ab644d890548b8" title="Makes a string shorter by the given number of bytes.">_dbus_string_shorten</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00764"></a>00764                       <span class="keywordtype">int</span>         length_to_remove)
<a name="l00765"></a>00765 {
<a name="l00766"></a>00766   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00767"></a>00767   _dbus_assert (length_to_remove &gt;= 0);
<a name="l00768"></a>00768   _dbus_assert (length_to_remove &lt;= real-&gt;len);
<a name="l00769"></a>00769 
<a name="l00770"></a>00770   set_length (real,
<a name="l00771"></a>00771               real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> - length_to_remove);
<a name="l00772"></a>00772 }
<a name="l00773"></a>00773 
<a name="l00784"></a>00784 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00785"></a><a class="code" href="group__DBusString.html#ga08c423b93c28dd746dcb93e0461ab95c">00785</a> <a class="code" href="group__DBusString.html#ga08c423b93c28dd746dcb93e0461ab95c" title="Sets the length of a string.">_dbus_string_set_length</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00786"></a>00786                          <span class="keywordtype">int</span>         length)
<a name="l00787"></a>00787 {
<a name="l00788"></a>00788   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00789"></a>00789   _dbus_assert (length &gt;= 0);
<a name="l00790"></a>00790 
<a name="l00791"></a>00791   <span class="keywordflow">return</span> set_length (real, length);
<a name="l00792"></a>00792 }
<a name="l00793"></a>00793 
<a name="l00794"></a>00794 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00795"></a>00795 align_insert_point_then_open_gap (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00796"></a>00796                                   <span class="keywordtype">int</span>        *insert_at_p,
<a name="l00797"></a>00797                                   <span class="keywordtype">int</span>         alignment,
<a name="l00798"></a>00798                                   <span class="keywordtype">int</span>         gap_size)
<a name="l00799"></a>00799 {
<a name="l00800"></a>00800   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> new_len; <span class="comment">/* ulong to avoid _DBUS_ALIGN_VALUE overflow */</span>
<a name="l00801"></a>00801   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> gap_pos;
<a name="l00802"></a>00802   <span class="keywordtype">int</span> insert_at;
<a name="l00803"></a>00803   <span class="keywordtype">int</span> delta;
<a name="l00804"></a>00804   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00805"></a>00805   _dbus_assert (alignment &gt;= 1);
<a name="l00806"></a>00806   _dbus_assert (alignment &lt;= 8); <span class="comment">/* it has to be a bug if &gt; 8 */</span>
<a name="l00807"></a>00807 
<a name="l00808"></a>00808   insert_at = *insert_at_p;
<a name="l00809"></a>00809 
<a name="l00810"></a>00810   _dbus_assert (insert_at &lt;= real-&gt;len);
<a name="l00811"></a>00811   
<a name="l00812"></a>00812   gap_pos = _DBUS_ALIGN_VALUE (insert_at, alignment);
<a name="l00813"></a>00813   new_len = real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> + (gap_pos - insert_at) + gap_size;
<a name="l00814"></a>00814   
<a name="l00815"></a>00815   <span class="keywordflow">if</span> (_DBUS_UNLIKELY (new_len &gt; (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) <a class="code" href="group__DBusStringInternals.html#ga1e3535c07f25485129d9d17194e303af" title="The maximum length of a DBusString.">_DBUS_STRING_MAX_LENGTH</a>))
<a name="l00816"></a>00816     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00817"></a>00817   
<a name="l00818"></a>00818   delta = new_len - real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>;
<a name="l00819"></a>00819   _dbus_assert (delta &gt;= 0);
<a name="l00820"></a>00820 
<a name="l00821"></a>00821   <span class="keywordflow">if</span> (delta == 0) <span class="comment">/* only happens if gap_size == 0 and insert_at is aligned already */</span>
<a name="l00822"></a>00822     {
<a name="l00823"></a>00823       _dbus_assert (((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) *insert_at_p) == gap_pos);
<a name="l00824"></a>00824       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00825"></a>00825     }
<a name="l00826"></a>00826 
<a name="l00827"></a>00827   <span class="keywordflow">if</span> (_DBUS_UNLIKELY (!open_gap (new_len - real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>,
<a name="l00828"></a>00828                                  real, insert_at)))
<a name="l00829"></a>00829     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00830"></a>00830 
<a name="l00831"></a>00831   <span class="comment">/* nul the padding if we had to add any padding */</span>
<a name="l00832"></a>00832   <span class="keywordflow">if</span> (gap_size &lt; delta)
<a name="l00833"></a>00833     {
<a name="l00834"></a>00834       memset (&amp;real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[insert_at], <span class="charliteral">&#39;\0&#39;</span>,
<a name="l00835"></a>00835               gap_pos - insert_at);
<a name="l00836"></a>00836     }
<a name="l00837"></a>00837 
<a name="l00838"></a>00838   *insert_at_p = gap_pos;
<a name="l00839"></a>00839   
<a name="l00840"></a>00840   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00841"></a>00841 }
<a name="l00842"></a>00842 
<a name="l00843"></a>00843 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00844"></a>00844 align_length_then_lengthen (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00845"></a>00845                             <span class="keywordtype">int</span>         alignment,
<a name="l00846"></a>00846                             <span class="keywordtype">int</span>         then_lengthen_by)
<a name="l00847"></a>00847 {
<a name="l00848"></a>00848   <span class="keywordtype">int</span> insert_at;
<a name="l00849"></a>00849 
<a name="l00850"></a>00850   insert_at = <a class="code" href="group__DBusString.html#gaa5136e6fd2c5188f4b88de7863369c6d" title="Gets the length of a string (not including nul termination).">_dbus_string_get_length</a> (str);
<a name="l00851"></a>00851   
<a name="l00852"></a>00852   <span class="keywordflow">return</span> align_insert_point_then_open_gap (str,
<a name="l00853"></a>00853                                            &amp;insert_at,
<a name="l00854"></a>00854                                            alignment, then_lengthen_by);
<a name="l00855"></a>00855 }
<a name="l00856"></a>00856 
<a name="l00865"></a>00865 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00866"></a><a class="code" href="group__DBusString.html#gaeadfb67c4e796131610499c91d0d7813">00866</a> <a class="code" href="group__DBusString.html#gaeadfb67c4e796131610499c91d0d7813" title="Align the length of a string to a specific alignment (typically 4 or 8) by appending nul bytes to the...">_dbus_string_align_length</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00867"></a>00867                            <span class="keywordtype">int</span>         alignment)
<a name="l00868"></a>00868 {
<a name="l00869"></a>00869   <span class="keywordflow">return</span> align_length_then_lengthen (str, alignment, 0);
<a name="l00870"></a>00870 }
<a name="l00871"></a>00871 
<a name="l00881"></a>00881 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00882"></a><a class="code" href="group__DBusString.html#ga4764e75c464356408fc1a12df93177c1">00882</a> <a class="code" href="group__DBusString.html#ga4764e75c464356408fc1a12df93177c1" title="Preallocate extra_bytes such that a future lengthening of the string by extra_bytes is guaranteed to ...">_dbus_string_alloc_space</a> (<a class="code" href="structDBusString.html">DBusString</a>        *str,
<a name="l00883"></a>00883                           <span class="keywordtype">int</span>                extra_bytes)
<a name="l00884"></a>00884 {
<a name="l00885"></a>00885   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga8f13997d90ceed2f437706e6b7804d9b" title="Makes a string longer by the given number of bytes.">_dbus_string_lengthen</a> (str, extra_bytes))
<a name="l00886"></a>00886     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00887"></a>00887   <a class="code" href="group__DBusString.html#ga7af1cbfa905f26d972ab644d890548b8" title="Makes a string shorter by the given number of bytes.">_dbus_string_shorten</a> (str, extra_bytes);
<a name="l00888"></a>00888 
<a name="l00889"></a>00889   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00890"></a>00890 }
<a name="l00891"></a>00891 
<a name="l00892"></a>00892 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00893"></a>00893 append (<a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real,
<a name="l00894"></a>00894         <span class="keyword">const</span> <span class="keywordtype">char</span>     *buffer,
<a name="l00895"></a>00895         <span class="keywordtype">int</span>             buffer_len)
<a name="l00896"></a>00896 {
<a name="l00897"></a>00897   <span class="keywordflow">if</span> (buffer_len == 0)
<a name="l00898"></a>00898     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00899"></a>00899 
<a name="l00900"></a>00900   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga8f13997d90ceed2f437706e6b7804d9b" title="Makes a string longer by the given number of bytes.">_dbus_string_lengthen</a> ((<a class="code" href="structDBusString.html">DBusString</a>*)real, buffer_len))
<a name="l00901"></a>00901     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00902"></a>00902 
<a name="l00903"></a>00903   memcpy (real-&gt;str + (real-&gt;len - buffer_len),
<a name="l00904"></a>00904           buffer,
<a name="l00905"></a>00905           buffer_len);
<a name="l00906"></a>00906 
<a name="l00907"></a>00907   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00908"></a>00908 }
<a name="l00909"></a>00909 
<a name="l00917"></a>00917 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00918"></a><a class="code" href="group__DBusString.html#ga100c5ce0696822c5a4cfbdfaba674d96">00918</a> <a class="code" href="group__DBusString.html#ga100c5ce0696822c5a4cfbdfaba674d96" title="Appends a nul-terminated C-style string to a DBusString.">_dbus_string_append</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00919"></a>00919                      <span class="keyword">const</span> <span class="keywordtype">char</span> *buffer)
<a name="l00920"></a>00920 {
<a name="l00921"></a>00921   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> buffer_len;
<a name="l00922"></a>00922   
<a name="l00923"></a>00923   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00924"></a>00924   _dbus_assert (buffer != <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>);
<a name="l00925"></a>00925   
<a name="l00926"></a>00926   buffer_len = strlen (buffer);
<a name="l00927"></a>00927   <span class="keywordflow">if</span> (buffer_len &gt; (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) _DBUS_STRING_MAX_LENGTH)
<a name="l00928"></a>00928     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00929"></a>00929   
<a name="l00930"></a>00930   <span class="keywordflow">return</span> append (real, buffer, buffer_len);
<a name="l00931"></a>00931 }
<a name="l00932"></a>00932 
<a name="l00934"></a><a class="code" href="group__DBusString.html#ga4661e2b10dd3da080564b1191acb7619">00934</a> <span class="preprocessor">#define ASSIGN_2_OCTETS(p, octets) \</span>
<a name="l00935"></a>00935 <span class="preprocessor">  *((dbus_uint16_t*)(p)) = *((dbus_uint16_t*)(octets));</span>
<a name="l00936"></a>00936 <span class="preprocessor"></span>
<a name="l00938"></a><a class="code" href="group__DBusString.html#gae777c8fb39aef558604506d645af6420">00938</a> <span class="preprocessor">#define ASSIGN_4_OCTETS(p, octets) \</span>
<a name="l00939"></a>00939 <span class="preprocessor">  *((dbus_uint32_t*)(p)) = *((dbus_uint32_t*)(octets));</span>
<a name="l00940"></a>00940 <span class="preprocessor"></span>
<a name="l00942"></a><a class="code" href="group__DBusString.html#gad13077c6ef8f8b764611ef5ad23b4b8b">00942</a> <span class="preprocessor">#define ASSIGN_8_OCTETS(p, octets) \</span>
<a name="l00943"></a>00943 <span class="preprocessor">  *((dbus_uint64_t*)(p)) = *((dbus_uint64_t*)(octets));</span>
<a name="l00944"></a>00944 <span class="preprocessor"></span>
<a name="l00954"></a>00954 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00955"></a><a class="code" href="group__DBusString.html#gae7770fdabda32f3e8d9dd50b083dbf1e">00955</a> <a class="code" href="group__DBusString.html#gae7770fdabda32f3e8d9dd50b083dbf1e" title="Inserts 2 bytes aligned on a 2 byte boundary with any alignment padding initialized to 0...">_dbus_string_insert_2_aligned</a> (<a class="code" href="structDBusString.html">DBusString</a>         *str,
<a name="l00956"></a>00956                                <span class="keywordtype">int</span>                 insert_at,
<a name="l00957"></a>00957                                <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> octets[2])
<a name="l00958"></a>00958 {
<a name="l00959"></a>00959   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00960"></a>00960   
<a name="l00961"></a>00961   <span class="keywordflow">if</span> (!align_insert_point_then_open_gap (str, &amp;insert_at, 2, 2))
<a name="l00962"></a>00962     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00963"></a>00963 
<a name="l00964"></a>00964   <a class="code" href="group__DBusString.html#ga4661e2b10dd3da080564b1191acb7619" title="assign 2 bytes from one string to another">ASSIGN_2_OCTETS</a> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + insert_at, octets);
<a name="l00965"></a>00965 
<a name="l00966"></a>00966   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00967"></a>00967 }
<a name="l00968"></a>00968 
<a name="l00978"></a>00978 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l00979"></a><a class="code" href="group__DBusString.html#gadd296cf1e6af18cb5bec438e9d353b4e">00979</a> <a class="code" href="group__DBusString.html#gadd296cf1e6af18cb5bec438e9d353b4e" title="Inserts 4 bytes aligned on a 4 byte boundary with any alignment padding initialized to 0...">_dbus_string_insert_4_aligned</a> (<a class="code" href="structDBusString.html">DBusString</a>         *str,
<a name="l00980"></a>00980                                <span class="keywordtype">int</span>                 insert_at,
<a name="l00981"></a>00981                                <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> octets[4])
<a name="l00982"></a>00982 {
<a name="l00983"></a>00983   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00984"></a>00984   
<a name="l00985"></a>00985   <span class="keywordflow">if</span> (!align_insert_point_then_open_gap (str, &amp;insert_at, 4, 4))
<a name="l00986"></a>00986     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l00987"></a>00987 
<a name="l00988"></a>00988   <a class="code" href="group__DBusString.html#gae777c8fb39aef558604506d645af6420" title="assign 4 bytes from one string to another">ASSIGN_4_OCTETS</a> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + insert_at, octets);
<a name="l00989"></a>00989 
<a name="l00990"></a>00990   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l00991"></a>00991 }
<a name="l00992"></a>00992 
<a name="l01002"></a>01002 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01003"></a><a class="code" href="group__DBusString.html#ga108d7d64fb88fffca31e33181cefa232">01003</a> <a class="code" href="group__DBusString.html#ga108d7d64fb88fffca31e33181cefa232" title="Inserts 8 bytes aligned on an 8 byte boundary with any alignment padding initialized to 0...">_dbus_string_insert_8_aligned</a> (<a class="code" href="structDBusString.html">DBusString</a>         *str,
<a name="l01004"></a>01004                                <span class="keywordtype">int</span>                 insert_at,
<a name="l01005"></a>01005                                <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> octets[8])
<a name="l01006"></a>01006 {
<a name="l01007"></a>01007   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01008"></a>01008   
<a name="l01009"></a>01009   <span class="keywordflow">if</span> (!align_insert_point_then_open_gap (str, &amp;insert_at, 8, 8))
<a name="l01010"></a>01010     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01011"></a>01011 
<a name="l01012"></a>01012   _dbus_assert (_DBUS_ALIGN_VALUE (insert_at, 8) == (<span class="keywordtype">unsigned</span>) insert_at);
<a name="l01013"></a>01013   
<a name="l01014"></a>01014   <a class="code" href="group__DBusString.html#gad13077c6ef8f8b764611ef5ad23b4b8b" title="assign 8 bytes from one string to another">ASSIGN_8_OCTETS</a> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + insert_at, octets);
<a name="l01015"></a>01015 
<a name="l01016"></a>01016   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01017"></a>01017 }
<a name="l01018"></a>01018 
<a name="l01019"></a>01019 
<a name="l01030"></a>01030 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01031"></a><a class="code" href="group__DBusString.html#ga267217e412c74c74dc3a3e412da5c600">01031</a> <a class="code" href="group__DBusString.html#ga267217e412c74c74dc3a3e412da5c600" title="Inserts padding at *insert_at such to align it to the given boundary.">_dbus_string_insert_alignment</a> (<a class="code" href="structDBusString.html">DBusString</a>        *str,
<a name="l01032"></a>01032                                <span class="keywordtype">int</span>               *insert_at,
<a name="l01033"></a>01033                                <span class="keywordtype">int</span>                alignment)
<a name="l01034"></a>01034 {
<a name="l01035"></a>01035   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01036"></a>01036   
<a name="l01037"></a>01037   <span class="keywordflow">if</span> (!align_insert_point_then_open_gap (str, insert_at, alignment, 0))
<a name="l01038"></a>01038     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01039"></a>01039 
<a name="l01040"></a>01040   _dbus_assert (_DBUS_ALIGN_VALUE (*insert_at, alignment) == (<span class="keywordtype">unsigned</span>) *insert_at);
<a name="l01041"></a>01041 
<a name="l01042"></a>01042   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01043"></a>01043 }
<a name="l01044"></a>01044 
<a name="l01054"></a>01054 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01055"></a><a class="code" href="group__DBusString.html#ga8d794f292831d1a7edeb971b13a2c641">01055</a> <a class="code" href="group__DBusString.html#ga8d794f292831d1a7edeb971b13a2c641" title="Appends a printf-style formatted string to the DBusString.">_dbus_string_append_printf_valist</a>  (<a class="code" href="structDBusString.html">DBusString</a>        *str,
<a name="l01056"></a>01056                                     <span class="keyword">const</span> <span class="keywordtype">char</span>        *format,
<a name="l01057"></a>01057                                     va_list            args)
<a name="l01058"></a>01058 {
<a name="l01059"></a>01059   <span class="keywordtype">int</span> len;
<a name="l01060"></a>01060   va_list args_copy;
<a name="l01061"></a>01061 
<a name="l01062"></a>01062   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01063"></a>01063 
<a name="l01064"></a>01064   DBUS_VA_COPY (args_copy, args);
<a name="l01065"></a>01065 
<a name="l01066"></a>01066   <span class="comment">/* Measure the message length without terminating nul */</span>
<a name="l01067"></a>01067   len = <a class="code" href="group__DBusSysdeps.html#gaffaf8b5bb832c20a8ccb10f012920776" title="Measure the length of the given format string and arguments, not including the terminating nul...">_dbus_printf_string_upper_bound</a> (format, args);
<a name="l01068"></a>01068 
<a name="l01069"></a>01069   <span class="keywordflow">if</span> (len &lt; 0)
<a name="l01070"></a>01070     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01071"></a>01071 
<a name="l01072"></a>01072   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga8f13997d90ceed2f437706e6b7804d9b" title="Makes a string longer by the given number of bytes.">_dbus_string_lengthen</a> (str, len))
<a name="l01073"></a>01073     {
<a name="l01074"></a>01074       <span class="comment">/* don&#39;t leak the copy */</span>
<a name="l01075"></a>01075       va_end (args_copy);
<a name="l01076"></a>01076       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01077"></a>01077     }
<a name="l01078"></a>01078   
<a name="l01079"></a>01079   vsprintf ((<span class="keywordtype">char</span>*) (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + (real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> - len)),
<a name="l01080"></a>01080             format, args_copy);
<a name="l01081"></a>01081 
<a name="l01082"></a>01082   va_end (args_copy);
<a name="l01083"></a>01083 
<a name="l01084"></a>01084   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01085"></a>01085 }
<a name="l01086"></a>01086 
<a name="l01095"></a>01095 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01096"></a><a class="code" href="group__DBusString.html#gab0078cf7e0e5bd784ec6d6e0cc3923a2">01096</a> <a class="code" href="group__DBusString.html#gab0078cf7e0e5bd784ec6d6e0cc3923a2" title="Appends a printf-style formatted string to the DBusString.">_dbus_string_append_printf</a> (<a class="code" href="structDBusString.html">DBusString</a>        *str,
<a name="l01097"></a>01097                             <span class="keyword">const</span> <span class="keywordtype">char</span>        *format,
<a name="l01098"></a>01098                             ...)
<a name="l01099"></a>01099 {
<a name="l01100"></a>01100   va_list args;
<a name="l01101"></a>01101   <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a> retval;
<a name="l01102"></a>01102   
<a name="l01103"></a>01103   va_start (args, format);
<a name="l01104"></a>01104   retval = <a class="code" href="group__DBusString.html#ga8d794f292831d1a7edeb971b13a2c641" title="Appends a printf-style formatted string to the DBusString.">_dbus_string_append_printf_valist</a> (str, format, args);
<a name="l01105"></a>01105   va_end (args);
<a name="l01106"></a>01106 
<a name="l01107"></a>01107   <span class="keywordflow">return</span> retval;
<a name="l01108"></a>01108 }
<a name="l01109"></a>01109 
<a name="l01118"></a>01118 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01119"></a><a class="code" href="group__DBusString.html#ga724656b7091b910965bd1af42d0b7bab">01119</a> <a class="code" href="group__DBusString.html#ga724656b7091b910965bd1af42d0b7bab" title="Appends block of bytes with the given length to a DBusString.">_dbus_string_append_len</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01120"></a>01120                          <span class="keyword">const</span> <span class="keywordtype">char</span> *buffer,
<a name="l01121"></a>01121                          <span class="keywordtype">int</span>         len)
<a name="l01122"></a>01122 {
<a name="l01123"></a>01123   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01124"></a>01124   _dbus_assert (buffer != <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>);
<a name="l01125"></a>01125   _dbus_assert (len &gt;= 0);
<a name="l01126"></a>01126 
<a name="l01127"></a>01127   <span class="keywordflow">return</span> append (real, buffer, len);
<a name="l01128"></a>01128 }
<a name="l01129"></a>01129 
<a name="l01138"></a>01138 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01139"></a><a class="code" href="group__DBusString.html#gaa6ecf36e70263659f921a4ef0335db12">01139</a> <a class="code" href="group__DBusString.html#gaa6ecf36e70263659f921a4ef0335db12" title="Appends a single byte to the string, returning FALSE if not enough memory.">_dbus_string_append_byte</a> (<a class="code" href="structDBusString.html">DBusString</a>    *str,
<a name="l01140"></a>01140                           <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>  byte)
<a name="l01141"></a>01141 {
<a name="l01142"></a>01142   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01143"></a>01143 
<a name="l01144"></a>01144   <span class="keywordflow">if</span> (!set_length (real, real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> + 1))
<a name="l01145"></a>01145     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01146"></a>01146 
<a name="l01147"></a>01147   real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>-1] = byte;
<a name="l01148"></a>01148 
<a name="l01149"></a>01149   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01150"></a>01150 }
<a name="l01151"></a>01151 
<a name="l01152"></a>01152 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l01153"></a>01153 <span class="keyword">delete</span> (<a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real,
<a name="l01154"></a>01154         <span class="keywordtype">int</span>             start,
<a name="l01155"></a>01155         <span class="keywordtype">int</span>             len)
<a name="l01156"></a>01156 {
<a name="l01157"></a>01157   <span class="keywordflow">if</span> (len == 0)
<a name="l01158"></a>01158     <span class="keywordflow">return</span>;
<a name="l01159"></a>01159   
<a name="l01160"></a>01160   memmove (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + start, real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + start + len, real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> - (start + len));
<a name="l01161"></a>01161   real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> -= len;
<a name="l01162"></a>01162   real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>] = <span class="charliteral">&#39;\0&#39;</span>;
<a name="l01163"></a>01163 }
<a name="l01164"></a>01164 
<a name="l01174"></a>01174 <span class="keywordtype">void</span>
<a name="l01175"></a><a class="code" href="group__DBusString.html#ga7e0e164ad5bb094e5ccad9edc7ae4235">01175</a> <a class="code" href="group__DBusString.html#ga7e0e164ad5bb094e5ccad9edc7ae4235" title="Deletes a segment of a DBusString with length len starting at start.">_dbus_string_delete</a> (<a class="code" href="structDBusString.html">DBusString</a>       *str,
<a name="l01176"></a>01176                      <span class="keywordtype">int</span>               start,
<a name="l01177"></a>01177                      <span class="keywordtype">int</span>               len)
<a name="l01178"></a>01178 {
<a name="l01179"></a>01179   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01180"></a>01180   _dbus_assert (start &gt;= 0);
<a name="l01181"></a>01181   _dbus_assert (len &gt;= 0);
<a name="l01182"></a>01182   _dbus_assert (start &lt;= real-&gt;len);
<a name="l01183"></a>01183   _dbus_assert (len &lt;= real-&gt;len - start);
<a name="l01184"></a>01184   
<a name="l01185"></a>01185   <span class="keyword">delete</span> (real, start, len);
<a name="l01186"></a>01186 }
<a name="l01187"></a>01187 
<a name="l01188"></a>01188 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01189"></a>01189 copy (<a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *source,
<a name="l01190"></a>01190       <span class="keywordtype">int</span>             start,
<a name="l01191"></a>01191       <span class="keywordtype">int</span>             len,
<a name="l01192"></a>01192       <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *dest,
<a name="l01193"></a>01193       <span class="keywordtype">int</span>             insert_at)
<a name="l01194"></a>01194 {
<a name="l01195"></a>01195   <span class="keywordflow">if</span> (len == 0)
<a name="l01196"></a>01196     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01197"></a>01197 
<a name="l01198"></a>01198   <span class="keywordflow">if</span> (!open_gap (len, dest, insert_at))
<a name="l01199"></a>01199     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01200"></a>01200   
<a name="l01201"></a>01201   memmove (dest-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + insert_at,
<a name="l01202"></a>01202            source-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + start,
<a name="l01203"></a>01203            len);
<a name="l01204"></a>01204 
<a name="l01205"></a>01205   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01206"></a>01206 }
<a name="l01207"></a>01207 
<a name="l01217"></a><a class="code" href="group__DBusString.html#gaacbbd102b66aa34dd13f792e7f08c205">01217</a> <span class="preprocessor">#define DBUS_STRING_COPY_PREAMBLE(source, start, dest, insert_at)       \</span>
<a name="l01218"></a>01218 <span class="preprocessor">  DBusRealString *real_source = (DBusRealString*) source;               \</span>
<a name="l01219"></a>01219 <span class="preprocessor">  DBusRealString *real_dest = (DBusRealString*) dest;                   \</span>
<a name="l01220"></a>01220 <span class="preprocessor">  _dbus_assert ((source) != (dest));                                    \</span>
<a name="l01221"></a>01221 <span class="preprocessor">  DBUS_GENERIC_STRING_PREAMBLE (real_source);                           \</span>
<a name="l01222"></a>01222 <span class="preprocessor">  DBUS_GENERIC_STRING_PREAMBLE (real_dest);                             \</span>
<a name="l01223"></a>01223 <span class="preprocessor">  _dbus_assert (!real_dest-&gt;constant);                                  \</span>
<a name="l01224"></a>01224 <span class="preprocessor">  _dbus_assert (!real_dest-&gt;locked);                                    \</span>
<a name="l01225"></a>01225 <span class="preprocessor">  _dbus_assert ((start) &gt;= 0);                                          \</span>
<a name="l01226"></a>01226 <span class="preprocessor">  _dbus_assert ((start) &lt;= real_source-&gt;len);                           \</span>
<a name="l01227"></a>01227 <span class="preprocessor">  _dbus_assert ((insert_at) &gt;= 0);                                      \</span>
<a name="l01228"></a>01228 <span class="preprocessor">  _dbus_assert ((insert_at) &lt;= real_dest-&gt;len)</span>
<a name="l01229"></a>01229 <span class="preprocessor"></span>
<a name="l01240"></a>01240 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01241"></a><a class="code" href="group__DBusString.html#gad379fce8d4ef4f7e28f81f50b46ee4c9">01241</a> <a class="code" href="group__DBusString.html#gad379fce8d4ef4f7e28f81f50b46ee4c9" title="Moves the end of one string into another string.">_dbus_string_move</a> (<a class="code" href="structDBusString.html">DBusString</a>       *source,
<a name="l01242"></a>01242                    <span class="keywordtype">int</span>               start,
<a name="l01243"></a>01243                    <a class="code" href="structDBusString.html">DBusString</a>       *dest,
<a name="l01244"></a>01244                    <span class="keywordtype">int</span>               insert_at)
<a name="l01245"></a>01245 {
<a name="l01246"></a>01246   <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real_source = (<a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a>*) source;
<a name="l01247"></a>01247   _dbus_assert (start &lt;= real_source-&gt;len);
<a name="l01248"></a>01248   
<a name="l01249"></a>01249   <span class="keywordflow">return</span> <a class="code" href="group__DBusString.html#gab8e2dcb2dc71bf225da0827c6086a727" title="Like _dbus_string_move(), but can move a segment from the middle of the source string.">_dbus_string_move_len</a> (source, start,
<a name="l01250"></a>01250                                 real_source-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> - start,
<a name="l01251"></a>01251                                 dest, insert_at);
<a name="l01252"></a>01252 }
<a name="l01253"></a>01253 
<a name="l01264"></a>01264 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01265"></a><a class="code" href="group__DBusString.html#ga3c10f0d1bcaa3b450025b9c6a8b901d7">01265</a> <a class="code" href="group__DBusString.html#ga3c10f0d1bcaa3b450025b9c6a8b901d7" title="Like _dbus_string_move(), but does not delete the section of the source string that&#39;s copied to the d...">_dbus_string_copy</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *source,
<a name="l01266"></a>01266                    <span class="keywordtype">int</span>               start,
<a name="l01267"></a>01267                    <a class="code" href="structDBusString.html">DBusString</a>       *dest,
<a name="l01268"></a>01268                    <span class="keywordtype">int</span>               insert_at)
<a name="l01269"></a>01269 {
<a name="l01270"></a>01270   <a class="code" href="group__DBusString.html#gaacbbd102b66aa34dd13f792e7f08c205" title="Checks assertions for two strings we&#39;re copying a segment between, and declares real_source/real_dest...">DBUS_STRING_COPY_PREAMBLE</a> (source, start, dest, insert_at);
<a name="l01271"></a>01271 
<a name="l01272"></a>01272   <span class="keywordflow">return</span> copy (real_source, start,
<a name="l01273"></a>01273                real_source-&gt;len - start,
<a name="l01274"></a>01274                real_dest,
<a name="l01275"></a>01275                insert_at);
<a name="l01276"></a>01276 }
<a name="l01277"></a>01277 
<a name="l01289"></a>01289 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01290"></a><a class="code" href="group__DBusString.html#gab8e2dcb2dc71bf225da0827c6086a727">01290</a> <a class="code" href="group__DBusString.html#gab8e2dcb2dc71bf225da0827c6086a727" title="Like _dbus_string_move(), but can move a segment from the middle of the source string.">_dbus_string_move_len</a> (<a class="code" href="structDBusString.html">DBusString</a>       *source,
<a name="l01291"></a>01291                        <span class="keywordtype">int</span>               start,
<a name="l01292"></a>01292                        <span class="keywordtype">int</span>               len,
<a name="l01293"></a>01293                        <a class="code" href="structDBusString.html">DBusString</a>       *dest,
<a name="l01294"></a>01294                        <span class="keywordtype">int</span>               insert_at)
<a name="l01295"></a>01295 
<a name="l01296"></a>01296 {
<a name="l01297"></a>01297   <a class="code" href="group__DBusString.html#gaacbbd102b66aa34dd13f792e7f08c205" title="Checks assertions for two strings we&#39;re copying a segment between, and declares real_source/real_dest...">DBUS_STRING_COPY_PREAMBLE</a> (source, start, dest, insert_at);
<a name="l01298"></a>01298   _dbus_assert (len &gt;= 0);
<a name="l01299"></a>01299   _dbus_assert ((start + len) &lt;= real_source-&gt;len);
<a name="l01300"></a>01300 
<a name="l01301"></a>01301 
<a name="l01302"></a>01302   <span class="keywordflow">if</span> (len == 0)
<a name="l01303"></a>01303     {
<a name="l01304"></a>01304       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01305"></a>01305     }
<a name="l01306"></a>01306   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (start == 0 &amp;&amp;
<a name="l01307"></a>01307            len == real_source-&gt;len &amp;&amp;
<a name="l01308"></a>01308            real_dest-&gt;len == 0)
<a name="l01309"></a>01309     {
<a name="l01310"></a>01310       <span class="comment">/* Short-circuit moving an entire existing string to an empty string</span>
<a name="l01311"></a>01311 <span class="comment">       * by just swapping the buffers.</span>
<a name="l01312"></a>01312 <span class="comment">       */</span>
<a name="l01313"></a>01313       <span class="comment">/* we assume -&gt;constant doesn&#39;t matter as you can&#39;t have</span>
<a name="l01314"></a>01314 <span class="comment">       * a constant string involved in a move.</span>
<a name="l01315"></a>01315 <span class="comment">       */</span>
<a name="l01316"></a>01316 <span class="preprocessor">#define ASSIGN_DATA(a, b) do {                  \</span>
<a name="l01317"></a>01317 <span class="preprocessor">        (a)-&gt;str = (b)-&gt;str;                    \</span>
<a name="l01318"></a>01318 <span class="preprocessor">        (a)-&gt;len = (b)-&gt;len;                    \</span>
<a name="l01319"></a>01319 <span class="preprocessor">        (a)-&gt;allocated = (b)-&gt;allocated;        \</span>
<a name="l01320"></a>01320 <span class="preprocessor">        (a)-&gt;align_offset = (b)-&gt;align_offset;  \</span>
<a name="l01321"></a>01321 <span class="preprocessor">      } while (0)</span>
<a name="l01322"></a>01322 <span class="preprocessor"></span>      
<a name="l01323"></a>01323       <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> tmp;
<a name="l01324"></a>01324 
<a name="l01325"></a>01325       ASSIGN_DATA (&amp;tmp, real_source);
<a name="l01326"></a>01326       ASSIGN_DATA (real_source, real_dest);
<a name="l01327"></a>01327       ASSIGN_DATA (real_dest, &amp;tmp);
<a name="l01328"></a>01328 
<a name="l01329"></a>01329       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01330"></a>01330     }
<a name="l01331"></a>01331   <span class="keywordflow">else</span>
<a name="l01332"></a>01332     {
<a name="l01333"></a>01333       <span class="keywordflow">if</span> (!copy (real_source, start, len,
<a name="l01334"></a>01334                  real_dest,
<a name="l01335"></a>01335                  insert_at))
<a name="l01336"></a>01336         <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01337"></a>01337       
<a name="l01338"></a>01338       <span class="keyword">delete</span> (real_source, start,
<a name="l01339"></a>01339               len);
<a name="l01340"></a>01340       
<a name="l01341"></a>01341       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01342"></a>01342     }
<a name="l01343"></a>01343 }
<a name="l01344"></a>01344 
<a name="l01356"></a>01356 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01357"></a><a class="code" href="group__DBusString.html#gaf5f13bc7ac7a623516930d26ae2589bf">01357</a> <a class="code" href="group__DBusString.html#gaf5f13bc7ac7a623516930d26ae2589bf" title="Like _dbus_string_copy(), but can copy a segment from the middle of the source string.">_dbus_string_copy_len</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *source,
<a name="l01358"></a>01358                        <span class="keywordtype">int</span>               start,
<a name="l01359"></a>01359                        <span class="keywordtype">int</span>               len,
<a name="l01360"></a>01360                        <a class="code" href="structDBusString.html">DBusString</a>       *dest,
<a name="l01361"></a>01361                        <span class="keywordtype">int</span>               insert_at)
<a name="l01362"></a>01362 {
<a name="l01363"></a>01363   <a class="code" href="group__DBusString.html#gaacbbd102b66aa34dd13f792e7f08c205" title="Checks assertions for two strings we&#39;re copying a segment between, and declares real_source/real_dest...">DBUS_STRING_COPY_PREAMBLE</a> (source, start, dest, insert_at);
<a name="l01364"></a>01364   _dbus_assert (len &gt;= 0);
<a name="l01365"></a>01365   _dbus_assert (start &lt;= real_source-&gt;len);
<a name="l01366"></a>01366   _dbus_assert (len &lt;= real_source-&gt;len - start);
<a name="l01367"></a>01367   
<a name="l01368"></a>01368   <span class="keywordflow">return</span> copy (real_source, start, len,
<a name="l01369"></a>01369                real_dest,
<a name="l01370"></a>01370                insert_at);
<a name="l01371"></a>01371 }
<a name="l01372"></a>01372 
<a name="l01385"></a>01385 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01386"></a><a class="code" href="group__DBusString.html#gafe7921a92467cdefaa0a7829d6cf260b">01386</a> <a class="code" href="group__DBusString.html#gafe7921a92467cdefaa0a7829d6cf260b" title="Replaces a segment of dest string with a segment of source string.">_dbus_string_replace_len</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *source,
<a name="l01387"></a>01387                           <span class="keywordtype">int</span>               start,
<a name="l01388"></a>01388                           <span class="keywordtype">int</span>               len,
<a name="l01389"></a>01389                           <a class="code" href="structDBusString.html">DBusString</a>       *dest,
<a name="l01390"></a>01390                           <span class="keywordtype">int</span>               replace_at,
<a name="l01391"></a>01391                           <span class="keywordtype">int</span>               replace_len)
<a name="l01392"></a>01392 {
<a name="l01393"></a>01393   <a class="code" href="group__DBusString.html#gaacbbd102b66aa34dd13f792e7f08c205" title="Checks assertions for two strings we&#39;re copying a segment between, and declares real_source/real_dest...">DBUS_STRING_COPY_PREAMBLE</a> (source, start, dest, replace_at);
<a name="l01394"></a>01394   _dbus_assert (len &gt;= 0);
<a name="l01395"></a>01395   _dbus_assert (start &lt;= real_source-&gt;len);
<a name="l01396"></a>01396   _dbus_assert (len &lt;= real_source-&gt;len - start);
<a name="l01397"></a>01397   _dbus_assert (replace_at &gt;= 0);
<a name="l01398"></a>01398   _dbus_assert (replace_at &lt;= real_dest-&gt;len);
<a name="l01399"></a>01399   _dbus_assert (replace_len &lt;= real_dest-&gt;len - replace_at);
<a name="l01400"></a>01400 
<a name="l01401"></a>01401   <span class="keywordflow">if</span> (len == replace_len)
<a name="l01402"></a>01402     {
<a name="l01403"></a>01403       memmove (real_dest-&gt;str + replace_at,
<a name="l01404"></a>01404                real_source-&gt;str + start, len);
<a name="l01405"></a>01405     }
<a name="l01406"></a>01406   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len &lt; replace_len)
<a name="l01407"></a>01407     {
<a name="l01408"></a>01408       memmove (real_dest-&gt;str + replace_at,
<a name="l01409"></a>01409                real_source-&gt;str + start, len);
<a name="l01410"></a>01410       <span class="keyword">delete</span> (real_dest, replace_at + len,
<a name="l01411"></a>01411               replace_len - len);
<a name="l01412"></a>01412     }
<a name="l01413"></a>01413   <span class="keywordflow">else</span>
<a name="l01414"></a>01414     {
<a name="l01415"></a>01415       <span class="keywordtype">int</span> diff;
<a name="l01416"></a>01416 
<a name="l01417"></a>01417       _dbus_assert (len &gt; replace_len);
<a name="l01418"></a>01418 
<a name="l01419"></a>01419       diff = len - replace_len;
<a name="l01420"></a>01420 
<a name="l01421"></a>01421       <span class="comment">/* First of all we check if destination string can be enlarged as</span>
<a name="l01422"></a>01422 <span class="comment">       * required, then we overwrite previous bytes</span>
<a name="l01423"></a>01423 <span class="comment">       */</span>
<a name="l01424"></a>01424 
<a name="l01425"></a>01425       <span class="keywordflow">if</span> (!copy (real_source, start + replace_len, diff,
<a name="l01426"></a>01426                  real_dest, replace_at + replace_len))
<a name="l01427"></a>01427         <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01428"></a>01428 
<a name="l01429"></a>01429       memmove (real_dest-&gt;str + replace_at,
<a name="l01430"></a>01430                real_source-&gt;str + start, replace_len);
<a name="l01431"></a>01431     }
<a name="l01432"></a>01432 
<a name="l01433"></a>01433   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01434"></a>01434 }
<a name="l01435"></a>01435 
<a name="l01448"></a>01448 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01449"></a><a class="code" href="group__DBusString.html#ga5d293b49b6afbbd74069d0823acce6b5">01449</a> <a class="code" href="group__DBusString.html#ga5d293b49b6afbbd74069d0823acce6b5" title="Looks for the first occurance of a byte, deletes that byte, and moves everything after the byte to th...">_dbus_string_split_on_byte</a> (<a class="code" href="structDBusString.html">DBusString</a>        *source,
<a name="l01450"></a>01450                             <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>      byte,
<a name="l01451"></a>01451                             <a class="code" href="structDBusString.html">DBusString</a>        *tail)
<a name="l01452"></a>01452 {
<a name="l01453"></a>01453   <span class="keywordtype">int</span> byte_position;
<a name="l01454"></a>01454   <span class="keywordtype">char</span> byte_string[2] = <span class="stringliteral">&quot;&quot;</span>;
<a name="l01455"></a>01455   <span class="keywordtype">int</span> head_length;
<a name="l01456"></a>01456   <span class="keywordtype">int</span> tail_length;
<a name="l01457"></a>01457 
<a name="l01458"></a>01458   byte_string[0] = (char) byte;
<a name="l01459"></a>01459 
<a name="l01460"></a>01460   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga5fe47873b2838339107c3e1f03d1a703" title="Finds the given substring in the string, returning TRUE and filling in the byte index where the subst...">_dbus_string_find</a> (source, 0, byte_string, &amp;byte_position))
<a name="l01461"></a>01461     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01462"></a>01462 
<a name="l01463"></a>01463   head_length = byte_position;
<a name="l01464"></a>01464   tail_length = <a class="code" href="group__DBusString.html#gaa5136e6fd2c5188f4b88de7863369c6d" title="Gets the length of a string (not including nul termination).">_dbus_string_get_length</a> (source) - head_length - 1;
<a name="l01465"></a>01465 
<a name="l01466"></a>01466   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gab8e2dcb2dc71bf225da0827c6086a727" title="Like _dbus_string_move(), but can move a segment from the middle of the source string.">_dbus_string_move_len</a> (source, byte_position + 1, tail_length,
<a name="l01467"></a>01467                               tail, 0))
<a name="l01468"></a>01468     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01469"></a>01469 
<a name="l01470"></a>01470   <span class="comment">/* remove the trailing delimiter byte from the head now.</span>
<a name="l01471"></a>01471 <span class="comment">   */</span>
<a name="l01472"></a>01472   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga08c423b93c28dd746dcb93e0461ab95c" title="Sets the length of a string.">_dbus_string_set_length</a> (source, head_length))
<a name="l01473"></a>01473     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01474"></a>01474 
<a name="l01475"></a>01475   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01476"></a>01476 }
<a name="l01477"></a>01477 
<a name="l01478"></a>01478 <span class="comment">/* Unicode macros and utf8_validate() from GLib Owen Taylor, Havoc</span>
<a name="l01479"></a>01479 <span class="comment"> * Pennington, and Tom Tromey are the authors and authorized relicense.</span>
<a name="l01480"></a>01480 <span class="comment"> */</span>
<a name="l01481"></a>01481 
<a name="l01487"></a><a class="code" href="group__DBusString.html#ga30614080229a4fb63460ffdc8ab484fb">01487</a> <span class="preprocessor">#define UTF8_COMPUTE(Char, Mask, Len)                                         \</span>
<a name="l01488"></a>01488 <span class="preprocessor">  if (Char &lt; 128)                                                             \</span>
<a name="l01489"></a>01489 <span class="preprocessor">    {                                                                         \</span>
<a name="l01490"></a>01490 <span class="preprocessor">      Len = 1;                                                                \</span>
<a name="l01491"></a>01491 <span class="preprocessor">      Mask = 0x7f;                                                            \</span>
<a name="l01492"></a>01492 <span class="preprocessor">    }                                                                         \</span>
<a name="l01493"></a>01493 <span class="preprocessor">  else if ((Char &amp; 0xe0) == 0xc0)                                             \</span>
<a name="l01494"></a>01494 <span class="preprocessor">    {                                                                         \</span>
<a name="l01495"></a>01495 <span class="preprocessor">      Len = 2;                                                                \</span>
<a name="l01496"></a>01496 <span class="preprocessor">      Mask = 0x1f;                                                            \</span>
<a name="l01497"></a>01497 <span class="preprocessor">    }                                                                         \</span>
<a name="l01498"></a>01498 <span class="preprocessor">  else if ((Char &amp; 0xf0) == 0xe0)                                             \</span>
<a name="l01499"></a>01499 <span class="preprocessor">    {                                                                         \</span>
<a name="l01500"></a>01500 <span class="preprocessor">      Len = 3;                                                                \</span>
<a name="l01501"></a>01501 <span class="preprocessor">      Mask = 0x0f;                                                            \</span>
<a name="l01502"></a>01502 <span class="preprocessor">    }                                                                         \</span>
<a name="l01503"></a>01503 <span class="preprocessor">  else if ((Char &amp; 0xf8) == 0xf0)                                             \</span>
<a name="l01504"></a>01504 <span class="preprocessor">    {                                                                         \</span>
<a name="l01505"></a>01505 <span class="preprocessor">      Len = 4;                                                                \</span>
<a name="l01506"></a>01506 <span class="preprocessor">      Mask = 0x07;                                                            \</span>
<a name="l01507"></a>01507 <span class="preprocessor">    }                                                                         \</span>
<a name="l01508"></a>01508 <span class="preprocessor">  else if ((Char &amp; 0xfc) == 0xf8)                                             \</span>
<a name="l01509"></a>01509 <span class="preprocessor">    {                                                                         \</span>
<a name="l01510"></a>01510 <span class="preprocessor">      Len = 5;                                                                \</span>
<a name="l01511"></a>01511 <span class="preprocessor">      Mask = 0x03;                                                            \</span>
<a name="l01512"></a>01512 <span class="preprocessor">    }                                                                         \</span>
<a name="l01513"></a>01513 <span class="preprocessor">  else if ((Char &amp; 0xfe) == 0xfc)                                             \</span>
<a name="l01514"></a>01514 <span class="preprocessor">    {                                                                         \</span>
<a name="l01515"></a>01515 <span class="preprocessor">      Len = 6;                                                                \</span>
<a name="l01516"></a>01516 <span class="preprocessor">      Mask = 0x01;                                                            \</span>
<a name="l01517"></a>01517 <span class="preprocessor">    }                                                                         \</span>
<a name="l01518"></a>01518 <span class="preprocessor">  else                                                                        \</span>
<a name="l01519"></a>01519 <span class="preprocessor">    {                                                                         \</span>
<a name="l01520"></a>01520 <span class="preprocessor">      Len = 0;                                                               \</span>
<a name="l01521"></a>01521 <span class="preprocessor">      Mask = 0;                                                               \</span>
<a name="l01522"></a>01522 <span class="preprocessor">    }</span>
<a name="l01523"></a>01523 <span class="preprocessor"></span>
<a name="l01528"></a><a class="code" href="group__DBusString.html#ga9691ff5386e218870299de1d9e77ceea">01528</a> <span class="preprocessor">#define UTF8_LENGTH(Char)              \</span>
<a name="l01529"></a>01529 <span class="preprocessor">  ((Char) &lt; 0x80 ? 1 :                 \</span>
<a name="l01530"></a>01530 <span class="preprocessor">   ((Char) &lt; 0x800 ? 2 :               \</span>
<a name="l01531"></a>01531 <span class="preprocessor">    ((Char) &lt; 0x10000 ? 3 :            \</span>
<a name="l01532"></a>01532 <span class="preprocessor">     ((Char) &lt; 0x200000 ? 4 :          \</span>
<a name="l01533"></a>01533 <span class="preprocessor">      ((Char) &lt; 0x4000000 ? 5 : 6)))))</span>
<a name="l01534"></a>01534 <span class="preprocessor"></span>   
<a name="l01544"></a><a class="code" href="group__DBusString.html#gab5b4b316a69f78611a14e6b1fd091992">01544</a> <span class="preprocessor">#define UTF8_GET(Result, Chars, Count, Mask, Len)                             \</span>
<a name="l01545"></a>01545 <span class="preprocessor">  (Result) = (Chars)[0] &amp; (Mask);                                             \</span>
<a name="l01546"></a>01546 <span class="preprocessor">  for ((Count) = 1; (Count) &lt; (Len); ++(Count))                               \</span>
<a name="l01547"></a>01547 <span class="preprocessor">    {                                                                         \</span>
<a name="l01548"></a>01548 <span class="preprocessor">      if (((Chars)[(Count)] &amp; 0xc0) != 0x80)                                  \</span>
<a name="l01549"></a>01549 <span class="preprocessor">        {                                                                     \</span>
<a name="l01550"></a>01550 <span class="preprocessor">          (Result) = -1;                                                      \</span>
<a name="l01551"></a>01551 <span class="preprocessor">          break;                                                              \</span>
<a name="l01552"></a>01552 <span class="preprocessor">        }                                                                     \</span>
<a name="l01553"></a>01553 <span class="preprocessor">      (Result) &lt;&lt;= 6;                                                         \</span>
<a name="l01554"></a>01554 <span class="preprocessor">      (Result) |= ((Chars)[(Count)] &amp; 0x3f);                                  \</span>
<a name="l01555"></a>01555 <span class="preprocessor">    }</span>
<a name="l01556"></a>01556 <span class="preprocessor"></span>
<a name="l01567"></a><a class="code" href="group__DBusString.html#ga25f0a93fc023fa0eec07ac1e32011e89">01567</a> <span class="preprocessor">#define UNICODE_VALID(Char)                   \</span>
<a name="l01568"></a>01568 <span class="preprocessor">    ((Char) &lt; 0x110000 &amp;&amp;                     \</span>
<a name="l01569"></a>01569 <span class="preprocessor">     (((Char) &amp; 0xFFFFF800) != 0xD800))</span>
<a name="l01570"></a>01570 <span class="preprocessor"></span>
<a name="l01585"></a>01585 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01586"></a><a class="code" href="group__DBusString.html#ga5fe47873b2838339107c3e1f03d1a703">01586</a> <a class="code" href="group__DBusString.html#ga5fe47873b2838339107c3e1f03d1a703" title="Finds the given substring in the string, returning TRUE and filling in the byte index where the subst...">_dbus_string_find</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01587"></a>01587                    <span class="keywordtype">int</span>               start,
<a name="l01588"></a>01588                    <span class="keyword">const</span> <span class="keywordtype">char</span>       *substr,
<a name="l01589"></a>01589                    <span class="keywordtype">int</span>              *found)
<a name="l01590"></a>01590 {
<a name="l01591"></a>01591   <span class="keywordflow">return</span> <a class="code" href="group__DBusString.html#gaf2281731c3119f946726680242a5ae02" title="Finds the given substring in the string, up to a certain position, returning TRUE and filling in the ...">_dbus_string_find_to</a> (str, start,
<a name="l01592"></a>01592                                ((<span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a>*)str)-&gt;len,
<a name="l01593"></a>01593                                substr, found);
<a name="l01594"></a>01594 }
<a name="l01595"></a>01595 
<a name="l01608"></a>01608 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01609"></a><a class="code" href="group__DBusString.html#ga3c98d1913e3ba4deb8eda60b2e262fdb">01609</a> <a class="code" href="group__DBusString.html#ga3c98d1913e3ba4deb8eda60b2e262fdb" title="Finds end of line (&quot;\r\n&quot; or &quot;\n&quot;) in the string, returning TRUE and filling in the byte index where ...">_dbus_string_find_eol</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01610"></a>01610                        <span class="keywordtype">int</span>               start,
<a name="l01611"></a>01611                        <span class="keywordtype">int</span>              *found,
<a name="l01612"></a>01612                        <span class="keywordtype">int</span>              *found_len)
<a name="l01613"></a>01613 {
<a name="l01614"></a>01614   <span class="keywordtype">int</span> i;
<a name="l01615"></a>01615 
<a name="l01616"></a>01616   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l01617"></a>01617   _dbus_assert (start &lt;= real-&gt;len);
<a name="l01618"></a>01618   _dbus_assert (start &gt;= 0);
<a name="l01619"></a>01619   
<a name="l01620"></a>01620   i = start;
<a name="l01621"></a>01621   <span class="keywordflow">while</span> (i &lt; real-&gt;len)
<a name="l01622"></a>01622     {
<a name="l01623"></a>01623       <span class="keywordflow">if</span> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i] == <span class="charliteral">&#39;\r&#39;</span>) 
<a name="l01624"></a>01624         {
<a name="l01625"></a>01625           <span class="keywordflow">if</span> ((i+1) &lt; real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> &amp;&amp; real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i+1] == <span class="charliteral">&#39;\n&#39;</span>) <span class="comment">/* &quot;\r\n&quot; */</span>
<a name="l01626"></a>01626             {
<a name="l01627"></a>01627               <span class="keywordflow">if</span> (found) 
<a name="l01628"></a>01628                 *found = i;
<a name="l01629"></a>01629               <span class="keywordflow">if</span> (found_len)
<a name="l01630"></a>01630                 *found_len = 2;
<a name="l01631"></a>01631               <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01632"></a>01632             } 
<a name="l01633"></a>01633           <span class="keywordflow">else</span> <span class="comment">/* only &quot;\r&quot; */</span>
<a name="l01634"></a>01634             {
<a name="l01635"></a>01635               <span class="keywordflow">if</span> (found) 
<a name="l01636"></a>01636                 *found = i;
<a name="l01637"></a>01637               <span class="keywordflow">if</span> (found_len)
<a name="l01638"></a>01638                 *found_len = 1;
<a name="l01639"></a>01639               <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01640"></a>01640             }
<a name="l01641"></a>01641         } 
<a name="l01642"></a>01642       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i] == <span class="charliteral">&#39;\n&#39;</span>)  <span class="comment">/* only &quot;\n&quot; */</span>
<a name="l01643"></a>01643         {
<a name="l01644"></a>01644           <span class="keywordflow">if</span> (found) 
<a name="l01645"></a>01645             *found = i;
<a name="l01646"></a>01646           <span class="keywordflow">if</span> (found_len)
<a name="l01647"></a>01647             *found_len = 1;
<a name="l01648"></a>01648           <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01649"></a>01649         }
<a name="l01650"></a>01650       ++i;
<a name="l01651"></a>01651     }
<a name="l01652"></a>01652 
<a name="l01653"></a>01653   <span class="keywordflow">if</span> (found)
<a name="l01654"></a>01654     *found = real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>;
<a name="l01655"></a>01655 
<a name="l01656"></a>01656   <span class="keywordflow">if</span> (found_len)
<a name="l01657"></a>01657     *found_len = 0;
<a name="l01658"></a>01658   
<a name="l01659"></a>01659   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01660"></a>01660 }
<a name="l01661"></a>01661 
<a name="l01678"></a>01678 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01679"></a><a class="code" href="group__DBusString.html#gaf2281731c3119f946726680242a5ae02">01679</a> <a class="code" href="group__DBusString.html#gaf2281731c3119f946726680242a5ae02" title="Finds the given substring in the string, up to a certain position, returning TRUE and filling in the ...">_dbus_string_find_to</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01680"></a>01680                       <span class="keywordtype">int</span>               start,
<a name="l01681"></a>01681                       <span class="keywordtype">int</span>               end,
<a name="l01682"></a>01682                       <span class="keyword">const</span> <span class="keywordtype">char</span>       *substr,
<a name="l01683"></a>01683                       <span class="keywordtype">int</span>              *found)
<a name="l01684"></a>01684 {
<a name="l01685"></a>01685   <span class="keywordtype">int</span> i;
<a name="l01686"></a>01686   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l01687"></a>01687   _dbus_assert (substr != <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>);
<a name="l01688"></a>01688   _dbus_assert (start &lt;= real-&gt;len);
<a name="l01689"></a>01689   _dbus_assert (start &gt;= 0);
<a name="l01690"></a>01690   _dbus_assert (substr != <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>);
<a name="l01691"></a>01691   _dbus_assert (end &lt;= real-&gt;len);
<a name="l01692"></a>01692   _dbus_assert (start &lt;= end);
<a name="l01693"></a>01693 
<a name="l01694"></a>01694   <span class="comment">/* we always &quot;find&quot; an empty string */</span>
<a name="l01695"></a>01695   <span class="keywordflow">if</span> (*substr == <span class="charliteral">&#39;\0&#39;</span>)
<a name="l01696"></a>01696     {
<a name="l01697"></a>01697       <span class="keywordflow">if</span> (found)
<a name="l01698"></a>01698         *found = start;
<a name="l01699"></a>01699       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01700"></a>01700     }
<a name="l01701"></a>01701 
<a name="l01702"></a>01702   i = start;
<a name="l01703"></a>01703   <span class="keywordflow">while</span> (i &lt; end)
<a name="l01704"></a>01704     {
<a name="l01705"></a>01705       <span class="keywordflow">if</span> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i] == substr[0])
<a name="l01706"></a>01706         {
<a name="l01707"></a>01707           <span class="keywordtype">int</span> j = i + 1;
<a name="l01708"></a>01708           
<a name="l01709"></a>01709           <span class="keywordflow">while</span> (j &lt; end)
<a name="l01710"></a>01710             {
<a name="l01711"></a>01711               <span class="keywordflow">if</span> (substr[j - i] == <span class="charliteral">&#39;\0&#39;</span>)
<a name="l01712"></a>01712                 <span class="keywordflow">break</span>;
<a name="l01713"></a>01713               <span class="keywordflow">else</span> <span class="keywordflow">if</span> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[j] != substr[j - i])
<a name="l01714"></a>01714                 <span class="keywordflow">break</span>;
<a name="l01715"></a>01715               
<a name="l01716"></a>01716               ++j;
<a name="l01717"></a>01717             }
<a name="l01718"></a>01718 
<a name="l01719"></a>01719           <span class="keywordflow">if</span> (substr[j - i] == <span class="charliteral">&#39;\0&#39;</span>)
<a name="l01720"></a>01720             {
<a name="l01721"></a>01721               <span class="keywordflow">if</span> (found)
<a name="l01722"></a>01722                 *found = i;
<a name="l01723"></a>01723               <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01724"></a>01724             }
<a name="l01725"></a>01725         }
<a name="l01726"></a>01726       
<a name="l01727"></a>01727       ++i;
<a name="l01728"></a>01728     }
<a name="l01729"></a>01729 
<a name="l01730"></a>01730   <span class="keywordflow">if</span> (found)
<a name="l01731"></a>01731     *found = end;
<a name="l01732"></a>01732   
<a name="l01733"></a>01733   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;  
<a name="l01734"></a>01734 }
<a name="l01735"></a>01735 
<a name="l01746"></a>01746 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01747"></a><a class="code" href="group__DBusString.html#ga677ddb4246c7e7f67ed3145dc3c1c96b">01747</a> <a class="code" href="group__DBusString.html#ga677ddb4246c7e7f67ed3145dc3c1c96b" title="Finds a blank (space or tab) in the string.">_dbus_string_find_blank</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01748"></a>01748                          <span class="keywordtype">int</span>               start,
<a name="l01749"></a>01749                          <span class="keywordtype">int</span>              *found)
<a name="l01750"></a>01750 {
<a name="l01751"></a>01751   <span class="keywordtype">int</span> i;
<a name="l01752"></a>01752   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l01753"></a>01753   _dbus_assert (start &lt;= real-&gt;len);
<a name="l01754"></a>01754   _dbus_assert (start &gt;= 0);
<a name="l01755"></a>01755   
<a name="l01756"></a>01756   i = start;
<a name="l01757"></a>01757   <span class="keywordflow">while</span> (i &lt; real-&gt;len)
<a name="l01758"></a>01758     {
<a name="l01759"></a>01759       <span class="keywordflow">if</span> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i] == <span class="charliteral">&#39; &#39;</span> ||
<a name="l01760"></a>01760           real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i] == <span class="charliteral">&#39;\t&#39;</span>)
<a name="l01761"></a>01761         {
<a name="l01762"></a>01762           <span class="keywordflow">if</span> (found)
<a name="l01763"></a>01763             *found = i;
<a name="l01764"></a>01764           <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01765"></a>01765         }
<a name="l01766"></a>01766       
<a name="l01767"></a>01767       ++i;
<a name="l01768"></a>01768     }
<a name="l01769"></a>01769 
<a name="l01770"></a>01770   <span class="keywordflow">if</span> (found)
<a name="l01771"></a>01771     *found = real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>;
<a name="l01772"></a>01772   
<a name="l01773"></a>01773   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01774"></a>01774 }
<a name="l01775"></a>01775 
<a name="l01784"></a>01784 <span class="keywordtype">void</span>
<a name="l01785"></a><a class="code" href="group__DBusString.html#ga5698b163289be0066cf10c0f1caf877a">01785</a> <a class="code" href="group__DBusString.html#ga5698b163289be0066cf10c0f1caf877a" title="Skips blanks from start, storing the first non-blank in *end (blank is space or tab).">_dbus_string_skip_blank</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01786"></a>01786                          <span class="keywordtype">int</span>               start,
<a name="l01787"></a>01787                          <span class="keywordtype">int</span>              *end)
<a name="l01788"></a>01788 {
<a name="l01789"></a>01789   <span class="keywordtype">int</span> i;
<a name="l01790"></a>01790   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l01791"></a>01791   _dbus_assert (start &lt;= real-&gt;len);
<a name="l01792"></a>01792   _dbus_assert (start &gt;= 0);
<a name="l01793"></a>01793   
<a name="l01794"></a>01794   i = start;
<a name="l01795"></a>01795   <span class="keywordflow">while</span> (i &lt; real-&gt;len)
<a name="l01796"></a>01796     {
<a name="l01797"></a>01797       <span class="keywordflow">if</span> (!<a class="code" href="group__DBusStringInternals.html#ga8f488964e430c0ae6a1a4204e0098dfe" title="Checks for ASCII blank byte.">DBUS_IS_ASCII_BLANK</a> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i]))
<a name="l01798"></a>01798         <span class="keywordflow">break</span>;
<a name="l01799"></a>01799       
<a name="l01800"></a>01800       ++i;
<a name="l01801"></a>01801     }
<a name="l01802"></a>01802 
<a name="l01803"></a>01803   _dbus_assert (i == real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> || !<a class="code" href="group__DBusStringInternals.html#ga9c88845804be152df28b81d7cad5673a" title="Checks for ASCII whitespace byte.">DBUS_IS_ASCII_WHITE</a> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i]));
<a name="l01804"></a>01804   
<a name="l01805"></a>01805   <span class="keywordflow">if</span> (end)
<a name="l01806"></a>01806     *end = i;
<a name="l01807"></a>01807 }
<a name="l01808"></a>01808 
<a name="l01809"></a>01809 
<a name="l01818"></a>01818 <span class="keywordtype">void</span>
<a name="l01819"></a><a class="code" href="group__DBusString.html#ga8600259d71a4adc14ab4558a9d2a0f7d">01819</a> <a class="code" href="group__DBusString.html#ga8600259d71a4adc14ab4558a9d2a0f7d" title="Skips whitespace from start, storing the first non-whitespace in *end.">_dbus_string_skip_white</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01820"></a>01820                          <span class="keywordtype">int</span>               start,
<a name="l01821"></a>01821                          <span class="keywordtype">int</span>              *end)
<a name="l01822"></a>01822 {
<a name="l01823"></a>01823   <span class="keywordtype">int</span> i;
<a name="l01824"></a>01824   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l01825"></a>01825   _dbus_assert (start &lt;= real-&gt;len);
<a name="l01826"></a>01826   _dbus_assert (start &gt;= 0);
<a name="l01827"></a>01827   
<a name="l01828"></a>01828   i = start;
<a name="l01829"></a>01829   <span class="keywordflow">while</span> (i &lt; real-&gt;len)
<a name="l01830"></a>01830     {
<a name="l01831"></a>01831       <span class="keywordflow">if</span> (!<a class="code" href="group__DBusStringInternals.html#ga9c88845804be152df28b81d7cad5673a" title="Checks for ASCII whitespace byte.">DBUS_IS_ASCII_WHITE</a> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i]))
<a name="l01832"></a>01832         <span class="keywordflow">break</span>;
<a name="l01833"></a>01833       
<a name="l01834"></a>01834       ++i;
<a name="l01835"></a>01835     }
<a name="l01836"></a>01836 
<a name="l01837"></a>01837   _dbus_assert (i == real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> || !(<a class="code" href="group__DBusStringInternals.html#ga9c88845804be152df28b81d7cad5673a" title="Checks for ASCII whitespace byte.">DBUS_IS_ASCII_WHITE</a> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i])));
<a name="l01838"></a>01838   
<a name="l01839"></a>01839   <span class="keywordflow">if</span> (end)
<a name="l01840"></a>01840     *end = i;
<a name="l01841"></a>01841 }
<a name="l01842"></a>01842 
<a name="l01851"></a>01851 <span class="keywordtype">void</span>
<a name="l01852"></a><a class="code" href="group__DBusString.html#ga578bb88acec5520825f2ba792cad7938">01852</a> <a class="code" href="group__DBusString.html#ga578bb88acec5520825f2ba792cad7938" title="Skips whitespace from end, storing the start index of the trailing whitespace in *start.">_dbus_string_skip_white_reverse</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01853"></a>01853                                  <span class="keywordtype">int</span>               end,
<a name="l01854"></a>01854                                  <span class="keywordtype">int</span>              *start)
<a name="l01855"></a>01855 {
<a name="l01856"></a>01856   <span class="keywordtype">int</span> i;
<a name="l01857"></a>01857   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l01858"></a>01858   _dbus_assert (end &lt;= real-&gt;len);
<a name="l01859"></a>01859   _dbus_assert (end &gt;= 0);
<a name="l01860"></a>01860   
<a name="l01861"></a>01861   i = end;
<a name="l01862"></a>01862   <span class="keywordflow">while</span> (i &gt; 0)
<a name="l01863"></a>01863     {
<a name="l01864"></a>01864       <span class="keywordflow">if</span> (!<a class="code" href="group__DBusStringInternals.html#ga9c88845804be152df28b81d7cad5673a" title="Checks for ASCII whitespace byte.">DBUS_IS_ASCII_WHITE</a> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i-1]))
<a name="l01865"></a>01865         <span class="keywordflow">break</span>;
<a name="l01866"></a>01866       --i;
<a name="l01867"></a>01867     }
<a name="l01868"></a>01868 
<a name="l01869"></a>01869   _dbus_assert (i &gt;= 0 &amp;&amp; (i == 0 || !(<a class="code" href="group__DBusStringInternals.html#ga9c88845804be152df28b81d7cad5673a" title="Checks for ASCII whitespace byte.">DBUS_IS_ASCII_WHITE</a> (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i-1]))));
<a name="l01870"></a>01870   
<a name="l01871"></a>01871   <span class="keywordflow">if</span> (start)
<a name="l01872"></a>01872     *start = i;
<a name="l01873"></a>01873 }
<a name="l01874"></a>01874 
<a name="l01890"></a>01890 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01891"></a><a class="code" href="group__DBusString.html#ga8b7fc22e6738173e1b2cef4b91b9c3c1">01891</a> <a class="code" href="group__DBusString.html#ga8b7fc22e6738173e1b2cef4b91b9c3c1" title="Assigns a newline-terminated or \r\n-terminated line from the front of the string to the given dest s...">_dbus_string_pop_line</a> (<a class="code" href="structDBusString.html">DBusString</a> *source,
<a name="l01892"></a>01892                        <a class="code" href="structDBusString.html">DBusString</a> *dest)
<a name="l01893"></a>01893 {
<a name="l01894"></a>01894   <span class="keywordtype">int</span> eol, eol_len;
<a name="l01895"></a>01895   
<a name="l01896"></a>01896   <a class="code" href="group__DBusString.html#ga08c423b93c28dd746dcb93e0461ab95c" title="Sets the length of a string.">_dbus_string_set_length</a> (dest, 0);
<a name="l01897"></a>01897   
<a name="l01898"></a>01898   eol = 0;
<a name="l01899"></a>01899   eol_len = 0;
<a name="l01900"></a>01900   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga3c98d1913e3ba4deb8eda60b2e262fdb" title="Finds end of line (&quot;\r\n&quot; or &quot;\n&quot;) in the string, returning TRUE and filling in the byte index where ...">_dbus_string_find_eol</a> (source, 0, &amp;eol, &amp;eol_len))
<a name="l01901"></a>01901     {
<a name="l01902"></a>01902       _dbus_assert (eol == <a class="code" href="group__DBusString.html#gaa5136e6fd2c5188f4b88de7863369c6d" title="Gets the length of a string (not including nul termination).">_dbus_string_get_length</a> (source));
<a name="l01903"></a>01903       <span class="keywordflow">if</span> (eol == 0)
<a name="l01904"></a>01904         {
<a name="l01905"></a>01905           <span class="comment">/* If there&#39;s no newline and source has zero length, we&#39;re done */</span>
<a name="l01906"></a>01906           <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01907"></a>01907         }
<a name="l01908"></a>01908       <span class="comment">/* otherwise, the last line of the file has no eol characters */</span>
<a name="l01909"></a>01909     }
<a name="l01910"></a>01910 
<a name="l01911"></a>01911   <span class="comment">/* remember eol can be 0 if it&#39;s an empty line, but eol_len should not be zero also</span>
<a name="l01912"></a>01912 <span class="comment">   * since find_eol returned TRUE</span>
<a name="l01913"></a>01913 <span class="comment">   */</span>
<a name="l01914"></a>01914   
<a name="l01915"></a>01915   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gab8e2dcb2dc71bf225da0827c6086a727" title="Like _dbus_string_move(), but can move a segment from the middle of the source string.">_dbus_string_move_len</a> (source, 0, eol + eol_len, dest, 0))
<a name="l01916"></a>01916     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01917"></a>01917   
<a name="l01918"></a>01918   <span class="comment">/* remove line ending */</span>
<a name="l01919"></a>01919   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga08c423b93c28dd746dcb93e0461ab95c" title="Sets the length of a string.">_dbus_string_set_length</a> (dest, eol))
<a name="l01920"></a>01920     {
<a name="l01921"></a>01921       _dbus_assert_not_reached (<span class="stringliteral">&quot;out of memory when shortening a string&quot;</span>);
<a name="l01922"></a>01922       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l01923"></a>01923     }
<a name="l01924"></a>01924 
<a name="l01925"></a>01925   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l01926"></a>01926 }
<a name="l01927"></a>01927 
<a name="l01928"></a>01928 <span class="preprocessor">#ifdef DBUS_ENABLE_EMBEDDED_TESTS</span>
<a name="l01929"></a>01929 <span class="preprocessor"></span>
<a name="l01935"></a>01935 <span class="keywordtype">void</span>
<a name="l01936"></a>01936 _dbus_string_delete_first_word (<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l01937"></a>01937 {
<a name="l01938"></a>01938   <span class="keywordtype">int</span> i;
<a name="l01939"></a>01939   
<a name="l01940"></a>01940   <span class="keywordflow">if</span> (<a class="code" href="group__DBusString.html#ga677ddb4246c7e7f67ed3145dc3c1c96b" title="Finds a blank (space or tab) in the string.">_dbus_string_find_blank</a> (str, 0, &amp;i))
<a name="l01941"></a>01941     <a class="code" href="group__DBusString.html#ga5698b163289be0066cf10c0f1caf877a" title="Skips blanks from start, storing the first non-blank in *end (blank is space or tab).">_dbus_string_skip_blank</a> (str, i, &amp;i);
<a name="l01942"></a>01942 
<a name="l01943"></a>01943   <a class="code" href="group__DBusString.html#ga7e0e164ad5bb094e5ccad9edc7ae4235" title="Deletes a segment of a DBusString with length len starting at start.">_dbus_string_delete</a> (str, 0, i);
<a name="l01944"></a>01944 }
<a name="l01945"></a>01945 <span class="preprocessor">#endif</span>
<a name="l01946"></a>01946 <span class="preprocessor"></span>
<a name="l01947"></a>01947 <span class="preprocessor">#ifdef DBUS_ENABLE_EMBEDDED_TESTS</span>
<a name="l01948"></a>01948 <span class="preprocessor"></span>
<a name="l01953"></a>01953 <span class="keywordtype">void</span>
<a name="l01954"></a>01954 _dbus_string_delete_leading_blanks (<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l01955"></a>01955 {
<a name="l01956"></a>01956   <span class="keywordtype">int</span> i;
<a name="l01957"></a>01957   
<a name="l01958"></a>01958   <a class="code" href="group__DBusString.html#ga5698b163289be0066cf10c0f1caf877a" title="Skips blanks from start, storing the first non-blank in *end (blank is space or tab).">_dbus_string_skip_blank</a> (str, 0, &amp;i);
<a name="l01959"></a>01959 
<a name="l01960"></a>01960   <span class="keywordflow">if</span> (i &gt; 0)
<a name="l01961"></a>01961     <a class="code" href="group__DBusString.html#ga7e0e164ad5bb094e5ccad9edc7ae4235" title="Deletes a segment of a DBusString with length len starting at start.">_dbus_string_delete</a> (str, 0, i);
<a name="l01962"></a>01962 }
<a name="l01963"></a>01963 <span class="preprocessor">#endif</span>
<a name="l01964"></a>01964 <span class="preprocessor"></span>
<a name="l01970"></a>01970 <span class="keywordtype">void</span>
<a name="l01971"></a><a class="code" href="group__DBusString.html#gaa92c6ab2c5e24cbefef0a3f3fc76f98b">01971</a> <a class="code" href="group__DBusString.html#gaa92c6ab2c5e24cbefef0a3f3fc76f98b" title="Deletes leading and trailing whitespace.">_dbus_string_chop_white</a>(<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l01972"></a>01972 {
<a name="l01973"></a>01973   <span class="keywordtype">int</span> i;
<a name="l01974"></a>01974   
<a name="l01975"></a>01975   <a class="code" href="group__DBusString.html#ga8600259d71a4adc14ab4558a9d2a0f7d" title="Skips whitespace from start, storing the first non-whitespace in *end.">_dbus_string_skip_white</a> (str, 0, &amp;i);
<a name="l01976"></a>01976 
<a name="l01977"></a>01977   <span class="keywordflow">if</span> (i &gt; 0)
<a name="l01978"></a>01978     <a class="code" href="group__DBusString.html#ga7e0e164ad5bb094e5ccad9edc7ae4235" title="Deletes a segment of a DBusString with length len starting at start.">_dbus_string_delete</a> (str, 0, i);
<a name="l01979"></a>01979   
<a name="l01980"></a>01980   <a class="code" href="group__DBusString.html#ga578bb88acec5520825f2ba792cad7938" title="Skips whitespace from end, storing the start index of the trailing whitespace in *start.">_dbus_string_skip_white_reverse</a> (str, <a class="code" href="group__DBusString.html#gaa5136e6fd2c5188f4b88de7863369c6d" title="Gets the length of a string (not including nul termination).">_dbus_string_get_length</a> (str), &amp;i);
<a name="l01981"></a>01981 
<a name="l01982"></a>01982   <a class="code" href="group__DBusString.html#ga08c423b93c28dd746dcb93e0461ab95c" title="Sets the length of a string.">_dbus_string_set_length</a> (str, i);
<a name="l01983"></a>01983 }
<a name="l01984"></a>01984 
<a name="l01994"></a>01994 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l01995"></a><a class="code" href="group__DBusString.html#gad79c34af55b58f0e8b81ecf11b8694bb">01995</a> <a class="code" href="group__DBusString.html#gad79c34af55b58f0e8b81ecf11b8694bb" title="Tests two DBusString for equality.">_dbus_string_equal</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *a,
<a name="l01996"></a>01996                     <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *b)
<a name="l01997"></a>01997 {
<a name="l01998"></a>01998   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ap;
<a name="l01999"></a>01999   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bp;
<a name="l02000"></a>02000   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *a_end;
<a name="l02001"></a>02001   <span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real_a = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a>*) a;
<a name="l02002"></a>02002   <span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real_b = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a>*) b;
<a name="l02003"></a>02003   <a class="code" href="group__DBusStringInternals.html#ga862cb88a139179981e1fcd5643165b56" title="Checks a bunch of assertions about a string object.">DBUS_GENERIC_STRING_PREAMBLE</a> (real_a);
<a name="l02004"></a>02004   <a class="code" href="group__DBusStringInternals.html#ga862cb88a139179981e1fcd5643165b56" title="Checks a bunch of assertions about a string object.">DBUS_GENERIC_STRING_PREAMBLE</a> (real_b);
<a name="l02005"></a>02005 
<a name="l02006"></a>02006   <span class="keywordflow">if</span> (real_a-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> != real_b-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>)
<a name="l02007"></a>02007     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02008"></a>02008 
<a name="l02009"></a>02009   ap = real_a-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>;
<a name="l02010"></a>02010   bp = real_b-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>;
<a name="l02011"></a>02011   a_end = real_a-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + real_a-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>;
<a name="l02012"></a>02012   <span class="keywordflow">while</span> (ap != a_end)
<a name="l02013"></a>02013     {
<a name="l02014"></a>02014       <span class="keywordflow">if</span> (*ap != *bp)
<a name="l02015"></a>02015         <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02016"></a>02016       
<a name="l02017"></a>02017       ++ap;
<a name="l02018"></a>02018       ++bp;
<a name="l02019"></a>02019     }
<a name="l02020"></a>02020 
<a name="l02021"></a>02021   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l02022"></a>02022 }
<a name="l02023"></a>02023 
<a name="l02037"></a>02037 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l02038"></a><a class="code" href="group__DBusString.html#gacf39727ae9eb411b0c4cb3b891588fb0">02038</a> <a class="code" href="group__DBusString.html#gacf39727ae9eb411b0c4cb3b891588fb0" title="Tests two DBusString for equality up to the given length.">_dbus_string_equal_len</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *a,
<a name="l02039"></a>02039                         <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *b,
<a name="l02040"></a>02040                         <span class="keywordtype">int</span>               len)
<a name="l02041"></a>02041 {
<a name="l02042"></a>02042   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ap;
<a name="l02043"></a>02043   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bp;
<a name="l02044"></a>02044   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *a_end;
<a name="l02045"></a>02045   <span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real_a = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a>*) a;
<a name="l02046"></a>02046   <span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real_b = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a>*) b;
<a name="l02047"></a>02047   <a class="code" href="group__DBusStringInternals.html#ga862cb88a139179981e1fcd5643165b56" title="Checks a bunch of assertions about a string object.">DBUS_GENERIC_STRING_PREAMBLE</a> (real_a);
<a name="l02048"></a>02048   <a class="code" href="group__DBusStringInternals.html#ga862cb88a139179981e1fcd5643165b56" title="Checks a bunch of assertions about a string object.">DBUS_GENERIC_STRING_PREAMBLE</a> (real_b);
<a name="l02049"></a>02049 
<a name="l02050"></a>02050   <span class="keywordflow">if</span> (real_a-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> != real_b-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> &amp;&amp;
<a name="l02051"></a>02051       (real_a-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> &lt; len || real_b-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> &lt; len))
<a name="l02052"></a>02052     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02053"></a>02053 
<a name="l02054"></a>02054   ap = real_a-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>;
<a name="l02055"></a>02055   bp = real_b-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>;
<a name="l02056"></a>02056   a_end = real_a-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + MIN (real_a-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>, len);
<a name="l02057"></a>02057   <span class="keywordflow">while</span> (ap != a_end)
<a name="l02058"></a>02058     {
<a name="l02059"></a>02059       <span class="keywordflow">if</span> (*ap != *bp)
<a name="l02060"></a>02060         <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02061"></a>02061       
<a name="l02062"></a>02062       ++ap;
<a name="l02063"></a>02063       ++bp;
<a name="l02064"></a>02064     }
<a name="l02065"></a>02065 
<a name="l02066"></a>02066   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l02067"></a>02067 }
<a name="l02068"></a>02068 
<a name="l02085"></a>02085 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l02086"></a><a class="code" href="group__DBusString.html#ga2095c2a797ae245521a7588b32279110">02086</a> <a class="code" href="group__DBusString.html#ga2095c2a797ae245521a7588b32279110" title="Tests two sub-parts of two DBusString for equality.">_dbus_string_equal_substring</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a>  *a,
<a name="l02087"></a>02087                               <span class="keywordtype">int</span>                a_start,
<a name="l02088"></a>02088                               <span class="keywordtype">int</span>                a_len,
<a name="l02089"></a>02089                               <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a>  *b,
<a name="l02090"></a>02090                               <span class="keywordtype">int</span>                b_start)
<a name="l02091"></a>02091 {
<a name="l02092"></a>02092   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ap;
<a name="l02093"></a>02093   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bp;
<a name="l02094"></a>02094   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *a_end;
<a name="l02095"></a>02095   <span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real_a = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a>*) a;
<a name="l02096"></a>02096   <span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real_b = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a>*) b;
<a name="l02097"></a>02097   <a class="code" href="group__DBusStringInternals.html#ga862cb88a139179981e1fcd5643165b56" title="Checks a bunch of assertions about a string object.">DBUS_GENERIC_STRING_PREAMBLE</a> (real_a);
<a name="l02098"></a>02098   <a class="code" href="group__DBusStringInternals.html#ga862cb88a139179981e1fcd5643165b56" title="Checks a bunch of assertions about a string object.">DBUS_GENERIC_STRING_PREAMBLE</a> (real_b);
<a name="l02099"></a>02099   _dbus_assert (a_start &gt;= 0);
<a name="l02100"></a>02100   _dbus_assert (a_len &gt;= 0);
<a name="l02101"></a>02101   _dbus_assert (a_start &lt;= real_a-&gt;len);
<a name="l02102"></a>02102   _dbus_assert (a_len &lt;= real_a-&gt;len - a_start);
<a name="l02103"></a>02103   _dbus_assert (b_start &gt;= 0);
<a name="l02104"></a>02104   _dbus_assert (b_start &lt;= real_b-&gt;len);
<a name="l02105"></a>02105   
<a name="l02106"></a>02106   <span class="keywordflow">if</span> (a_len &gt; real_b-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> - b_start)
<a name="l02107"></a>02107     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02108"></a>02108 
<a name="l02109"></a>02109   ap = real_a-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + a_start;
<a name="l02110"></a>02110   bp = real_b-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + b_start;
<a name="l02111"></a>02111   a_end = ap + a_len;
<a name="l02112"></a>02112   <span class="keywordflow">while</span> (ap != a_end)
<a name="l02113"></a>02113     {
<a name="l02114"></a>02114       <span class="keywordflow">if</span> (*ap != *bp)
<a name="l02115"></a>02115         <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02116"></a>02116       
<a name="l02117"></a>02117       ++ap;
<a name="l02118"></a>02118       ++bp;
<a name="l02119"></a>02119     }
<a name="l02120"></a>02120 
<a name="l02121"></a>02121   _dbus_assert (bp &lt;= (real_b-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + real_b-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>));
<a name="l02122"></a>02122   
<a name="l02123"></a>02123   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l02124"></a>02124 }
<a name="l02125"></a>02125 
<a name="l02133"></a>02133 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l02134"></a><a class="code" href="group__DBusString.html#ga84f39f1bf398697920637d2982248c72">02134</a> <a class="code" href="group__DBusString.html#ga84f39f1bf398697920637d2982248c72" title="Checks whether a string is equal to a C string.">_dbus_string_equal_c_str</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *a,
<a name="l02135"></a>02135                           <span class="keyword">const</span> <span class="keywordtype">char</span>       *c_str)
<a name="l02136"></a>02136 {
<a name="l02137"></a>02137   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ap;
<a name="l02138"></a>02138   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bp;
<a name="l02139"></a>02139   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *a_end;
<a name="l02140"></a>02140   <span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real_a = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a>*) a;
<a name="l02141"></a>02141   <a class="code" href="group__DBusStringInternals.html#ga862cb88a139179981e1fcd5643165b56" title="Checks a bunch of assertions about a string object.">DBUS_GENERIC_STRING_PREAMBLE</a> (real_a);
<a name="l02142"></a>02142   _dbus_assert (c_str != <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>);
<a name="l02143"></a>02143   
<a name="l02144"></a>02144   ap = real_a-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>;
<a name="l02145"></a>02145   bp = (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*) c_str;
<a name="l02146"></a>02146   a_end = real_a-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + real_a-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>;
<a name="l02147"></a>02147   <span class="keywordflow">while</span> (ap != a_end &amp;&amp; *bp)
<a name="l02148"></a>02148     {
<a name="l02149"></a>02149       <span class="keywordflow">if</span> (*ap != *bp)
<a name="l02150"></a>02150         <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02151"></a>02151       
<a name="l02152"></a>02152       ++ap;
<a name="l02153"></a>02153       ++bp;
<a name="l02154"></a>02154     }
<a name="l02155"></a>02155 
<a name="l02156"></a>02156   <span class="keywordflow">if</span> (ap != a_end || *bp)
<a name="l02157"></a>02157     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02158"></a>02158   
<a name="l02159"></a>02159   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l02160"></a>02160 }
<a name="l02161"></a>02161 
<a name="l02169"></a>02169 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l02170"></a><a class="code" href="group__DBusString.html#ga4763d06a65cca36986bff030b404c90d">02170</a> <a class="code" href="group__DBusString.html#ga4763d06a65cca36986bff030b404c90d" title="Checks whether a string starts with the given C string.">_dbus_string_starts_with_c_str</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *a,
<a name="l02171"></a>02171                                 <span class="keyword">const</span> <span class="keywordtype">char</span>       *c_str)
<a name="l02172"></a>02172 {
<a name="l02173"></a>02173   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ap;
<a name="l02174"></a>02174   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bp;
<a name="l02175"></a>02175   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *a_end;
<a name="l02176"></a>02176   <span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a> *real_a = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html" title="Internals of DBusString.">DBusRealString</a>*) a;
<a name="l02177"></a>02177   <a class="code" href="group__DBusStringInternals.html#ga862cb88a139179981e1fcd5643165b56" title="Checks a bunch of assertions about a string object.">DBUS_GENERIC_STRING_PREAMBLE</a> (real_a);
<a name="l02178"></a>02178   _dbus_assert (c_str != <a class="code" href="group__DBusMacros.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="A null pointer, defined appropriately for C or C++.">NULL</a>);
<a name="l02179"></a>02179   
<a name="l02180"></a>02180   ap = real_a-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>;
<a name="l02181"></a>02181   bp = (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*) c_str;
<a name="l02182"></a>02182   a_end = real_a-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + real_a-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>;
<a name="l02183"></a>02183   <span class="keywordflow">while</span> (ap != a_end &amp;&amp; *bp)
<a name="l02184"></a>02184     {
<a name="l02185"></a>02185       <span class="keywordflow">if</span> (*ap != *bp)
<a name="l02186"></a>02186         <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02187"></a>02187       
<a name="l02188"></a>02188       ++ap;
<a name="l02189"></a>02189       ++bp;
<a name="l02190"></a>02190     }
<a name="l02191"></a>02191 
<a name="l02192"></a>02192   <span class="keywordflow">if</span> (*bp == <span class="charliteral">&#39;\0&#39;</span>)
<a name="l02193"></a>02193     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l02194"></a>02194   <span class="keywordflow">else</span>
<a name="l02195"></a>02195     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02196"></a>02196 }
<a name="l02197"></a>02197 
<a name="l02206"></a>02206 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l02207"></a><a class="code" href="group__DBusString.html#gae99a331d4e5b7758652b78dc9c89de84">02207</a> <a class="code" href="group__DBusString.html#gae99a331d4e5b7758652b78dc9c89de84" title="Appends a two-character hex digit to a string, where the hex digit has the value of the given byte...">_dbus_string_append_byte_as_hex</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l02208"></a>02208                                  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> byte)
<a name="l02209"></a>02209 {
<a name="l02210"></a>02210   <span class="keyword">const</span> <span class="keywordtype">char</span> hexdigits[16] = {
<a name="l02211"></a>02211     <span class="charliteral">&#39;0&#39;</span>, <span class="charliteral">&#39;1&#39;</span>, <span class="charliteral">&#39;2&#39;</span>, <span class="charliteral">&#39;3&#39;</span>, <span class="charliteral">&#39;4&#39;</span>, <span class="charliteral">&#39;5&#39;</span>, <span class="charliteral">&#39;6&#39;</span>, <span class="charliteral">&#39;7&#39;</span>, <span class="charliteral">&#39;8&#39;</span>, <span class="charliteral">&#39;9&#39;</span>,
<a name="l02212"></a>02212     <span class="charliteral">&#39;a&#39;</span>, <span class="charliteral">&#39;b&#39;</span>, <span class="charliteral">&#39;c&#39;</span>, <span class="charliteral">&#39;d&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;f&#39;</span>
<a name="l02213"></a>02213   };
<a name="l02214"></a>02214 
<a name="l02215"></a>02215   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gaa6ecf36e70263659f921a4ef0335db12" title="Appends a single byte to the string, returning FALSE if not enough memory.">_dbus_string_append_byte</a> (str,
<a name="l02216"></a>02216                                  hexdigits[(byte &gt;&gt; 4)]))
<a name="l02217"></a>02217     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02218"></a>02218   
<a name="l02219"></a>02219   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gaa6ecf36e70263659f921a4ef0335db12" title="Appends a single byte to the string, returning FALSE if not enough memory.">_dbus_string_append_byte</a> (str,
<a name="l02220"></a>02220                                  hexdigits[(byte &amp; 0x0f)]))
<a name="l02221"></a>02221     {
<a name="l02222"></a>02222       <a class="code" href="group__DBusString.html#ga08c423b93c28dd746dcb93e0461ab95c" title="Sets the length of a string.">_dbus_string_set_length</a> (str,
<a name="l02223"></a>02223                                <a class="code" href="group__DBusString.html#gaa5136e6fd2c5188f4b88de7863369c6d" title="Gets the length of a string (not including nul termination).">_dbus_string_get_length</a> (str) - 1);
<a name="l02224"></a>02224       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02225"></a>02225     }
<a name="l02226"></a>02226 
<a name="l02227"></a>02227   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l02228"></a>02228 }
<a name="l02229"></a>02229 
<a name="l02240"></a>02240 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l02241"></a><a class="code" href="group__DBusString.html#gaabb4873f436e015944a33cd1e3815cc9">02241</a> <a class="code" href="group__DBusString.html#gaabb4873f436e015944a33cd1e3815cc9" title="Encodes a string in hex, the way MD5 and SHA-1 are usually encoded.">_dbus_string_hex_encode</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *source,
<a name="l02242"></a>02242                          <span class="keywordtype">int</span>               start,
<a name="l02243"></a>02243                          <a class="code" href="structDBusString.html">DBusString</a>       *dest,
<a name="l02244"></a>02244                          <span class="keywordtype">int</span>               insert_at)
<a name="l02245"></a>02245 {
<a name="l02246"></a>02246   <a class="code" href="structDBusString.html">DBusString</a> result;
<a name="l02247"></a>02247   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *p;
<a name="l02248"></a>02248   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end;
<a name="l02249"></a>02249   <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a> retval;
<a name="l02250"></a>02250   
<a name="l02251"></a>02251   _dbus_assert (start &lt;= <a class="code" href="group__DBusString.html#gaa5136e6fd2c5188f4b88de7863369c6d" title="Gets the length of a string (not including nul termination).">_dbus_string_get_length</a> (source));
<a name="l02252"></a>02252 
<a name="l02253"></a>02253   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga348252317f7bb8ac43529972945830ae" title="Initializes a string.">_dbus_string_init</a> (&amp;result))
<a name="l02254"></a>02254     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02255"></a>02255 
<a name="l02256"></a>02256   retval = <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02257"></a>02257   
<a name="l02258"></a>02258   p = (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*) <a class="code" href="group__DBusString.html#ga33e20241ae7d784624f97d89b1a0539e" title="Gets the raw character buffer from a const string.">_dbus_string_get_const_data</a> (source);
<a name="l02259"></a>02259   end = p + <a class="code" href="group__DBusString.html#gaa5136e6fd2c5188f4b88de7863369c6d" title="Gets the length of a string (not including nul termination).">_dbus_string_get_length</a> (source);
<a name="l02260"></a>02260   p += start;
<a name="l02261"></a>02261   
<a name="l02262"></a>02262   <span class="keywordflow">while</span> (p != end)
<a name="l02263"></a>02263     {
<a name="l02264"></a>02264       <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gae99a331d4e5b7758652b78dc9c89de84" title="Appends a two-character hex digit to a string, where the hex digit has the value of the given byte...">_dbus_string_append_byte_as_hex</a> (&amp;result, *p))
<a name="l02265"></a>02265         <span class="keywordflow">goto</span> out;
<a name="l02266"></a>02266       
<a name="l02267"></a>02267       ++p;
<a name="l02268"></a>02268     }
<a name="l02269"></a>02269 
<a name="l02270"></a>02270   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gad379fce8d4ef4f7e28f81f50b46ee4c9" title="Moves the end of one string into another string.">_dbus_string_move</a> (&amp;result, 0, dest, insert_at))
<a name="l02271"></a>02271     <span class="keywordflow">goto</span> out;
<a name="l02272"></a>02272 
<a name="l02273"></a>02273   retval = <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l02274"></a>02274 
<a name="l02275"></a>02275  out:
<a name="l02276"></a>02276   <a class="code" href="group__DBusString.html#ga781ca91acda49a834dce7d0ed0eef212" title="Frees a string created by _dbus_string_init().">_dbus_string_free</a> (&amp;result);
<a name="l02277"></a>02277   <span class="keywordflow">return</span> retval;
<a name="l02278"></a>02278 }
<a name="l02279"></a>02279 
<a name="l02290"></a>02290 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l02291"></a><a class="code" href="group__DBusString.html#ga0a8c20d855f9ddc05718b9e2ac0e33d8">02291</a> <a class="code" href="group__DBusString.html#ga0a8c20d855f9ddc05718b9e2ac0e33d8" title="Decodes a string from hex encoding.">_dbus_string_hex_decode</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *source,
<a name="l02292"></a>02292                          <span class="keywordtype">int</span>               start,
<a name="l02293"></a>02293                          <span class="keywordtype">int</span>              *end_return,
<a name="l02294"></a>02294                          <a class="code" href="structDBusString.html">DBusString</a>       *dest,
<a name="l02295"></a>02295                          <span class="keywordtype">int</span>               insert_at)
<a name="l02296"></a>02296 {
<a name="l02297"></a>02297   <a class="code" href="structDBusString.html">DBusString</a> result;
<a name="l02298"></a>02298   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *p;
<a name="l02299"></a>02299   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end;
<a name="l02300"></a>02300   <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a> retval;
<a name="l02301"></a>02301   <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a> high_bits;
<a name="l02302"></a>02302   
<a name="l02303"></a>02303   _dbus_assert (start &lt;= <a class="code" href="group__DBusString.html#gaa5136e6fd2c5188f4b88de7863369c6d" title="Gets the length of a string (not including nul termination).">_dbus_string_get_length</a> (source));
<a name="l02304"></a>02304 
<a name="l02305"></a>02305   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga348252317f7bb8ac43529972945830ae" title="Initializes a string.">_dbus_string_init</a> (&amp;result))
<a name="l02306"></a>02306     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02307"></a>02307 
<a name="l02308"></a>02308   retval = <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02309"></a>02309 
<a name="l02310"></a>02310   high_bits = <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l02311"></a>02311   p = (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*) <a class="code" href="group__DBusString.html#ga33e20241ae7d784624f97d89b1a0539e" title="Gets the raw character buffer from a const string.">_dbus_string_get_const_data</a> (source);
<a name="l02312"></a>02312   end = p + <a class="code" href="group__DBusString.html#gaa5136e6fd2c5188f4b88de7863369c6d" title="Gets the length of a string (not including nul termination).">_dbus_string_get_length</a> (source);
<a name="l02313"></a>02313   p += start;
<a name="l02314"></a>02314   
<a name="l02315"></a>02315   <span class="keywordflow">while</span> (p != end)
<a name="l02316"></a>02316     {
<a name="l02317"></a>02317       <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> val;
<a name="l02318"></a>02318 
<a name="l02319"></a>02319       <span class="keywordflow">switch</span> (*p)
<a name="l02320"></a>02320         {
<a name="l02321"></a>02321         <span class="keywordflow">case</span> <span class="charliteral">&#39;0&#39;</span>:
<a name="l02322"></a>02322           val = 0;
<a name="l02323"></a>02323           <span class="keywordflow">break</span>;
<a name="l02324"></a>02324         <span class="keywordflow">case</span> <span class="charliteral">&#39;1&#39;</span>:
<a name="l02325"></a>02325           val = 1;
<a name="l02326"></a>02326           <span class="keywordflow">break</span>;
<a name="l02327"></a>02327         <span class="keywordflow">case</span> <span class="charliteral">&#39;2&#39;</span>:
<a name="l02328"></a>02328           val = 2;
<a name="l02329"></a>02329           <span class="keywordflow">break</span>;
<a name="l02330"></a>02330         <span class="keywordflow">case</span> <span class="charliteral">&#39;3&#39;</span>:
<a name="l02331"></a>02331           val = 3;
<a name="l02332"></a>02332           <span class="keywordflow">break</span>;
<a name="l02333"></a>02333         <span class="keywordflow">case</span> <span class="charliteral">&#39;4&#39;</span>:
<a name="l02334"></a>02334           val = 4;
<a name="l02335"></a>02335           <span class="keywordflow">break</span>;
<a name="l02336"></a>02336         <span class="keywordflow">case</span> <span class="charliteral">&#39;5&#39;</span>:
<a name="l02337"></a>02337           val = 5;
<a name="l02338"></a>02338           <span class="keywordflow">break</span>;
<a name="l02339"></a>02339         <span class="keywordflow">case</span> <span class="charliteral">&#39;6&#39;</span>:
<a name="l02340"></a>02340           val = 6;
<a name="l02341"></a>02341           <span class="keywordflow">break</span>;
<a name="l02342"></a>02342         <span class="keywordflow">case</span> <span class="charliteral">&#39;7&#39;</span>:
<a name="l02343"></a>02343           val = 7;
<a name="l02344"></a>02344           <span class="keywordflow">break</span>;
<a name="l02345"></a>02345         <span class="keywordflow">case</span> <span class="charliteral">&#39;8&#39;</span>:
<a name="l02346"></a>02346           val = 8;
<a name="l02347"></a>02347           <span class="keywordflow">break</span>;
<a name="l02348"></a>02348         <span class="keywordflow">case</span> <span class="charliteral">&#39;9&#39;</span>:
<a name="l02349"></a>02349           val = 9;
<a name="l02350"></a>02350           <span class="keywordflow">break</span>;
<a name="l02351"></a>02351         <span class="keywordflow">case</span> <span class="charliteral">&#39;a&#39;</span>:
<a name="l02352"></a>02352         <span class="keywordflow">case</span> <span class="charliteral">&#39;A&#39;</span>:
<a name="l02353"></a>02353           val = 10;
<a name="l02354"></a>02354           <span class="keywordflow">break</span>;
<a name="l02355"></a>02355         <span class="keywordflow">case</span> <span class="charliteral">&#39;b&#39;</span>:
<a name="l02356"></a>02356         <span class="keywordflow">case</span> <span class="charliteral">&#39;B&#39;</span>:
<a name="l02357"></a>02357           val = 11;
<a name="l02358"></a>02358           <span class="keywordflow">break</span>;
<a name="l02359"></a>02359         <span class="keywordflow">case</span> <span class="charliteral">&#39;c&#39;</span>:
<a name="l02360"></a>02360         <span class="keywordflow">case</span> <span class="charliteral">&#39;C&#39;</span>:
<a name="l02361"></a>02361           val = 12;
<a name="l02362"></a>02362           <span class="keywordflow">break</span>;
<a name="l02363"></a>02363         <span class="keywordflow">case</span> <span class="charliteral">&#39;d&#39;</span>:
<a name="l02364"></a>02364         <span class="keywordflow">case</span> <span class="charliteral">&#39;D&#39;</span>:
<a name="l02365"></a>02365           val = 13;
<a name="l02366"></a>02366           <span class="keywordflow">break</span>;
<a name="l02367"></a>02367         <span class="keywordflow">case</span> <span class="charliteral">&#39;e&#39;</span>:
<a name="l02368"></a>02368         <span class="keywordflow">case</span> <span class="charliteral">&#39;E&#39;</span>:
<a name="l02369"></a>02369           val = 14;
<a name="l02370"></a>02370           <span class="keywordflow">break</span>;
<a name="l02371"></a>02371         <span class="keywordflow">case</span> <span class="charliteral">&#39;f&#39;</span>:
<a name="l02372"></a>02372         <span class="keywordflow">case</span> <span class="charliteral">&#39;F&#39;</span>:
<a name="l02373"></a>02373           val = 15;
<a name="l02374"></a>02374           <span class="keywordflow">break</span>;
<a name="l02375"></a>02375         <span class="keywordflow">default</span>:
<a name="l02376"></a>02376           <span class="keywordflow">goto</span> done;
<a name="l02377"></a>02377         }
<a name="l02378"></a>02378 
<a name="l02379"></a>02379       <span class="keywordflow">if</span> (high_bits)
<a name="l02380"></a>02380         {
<a name="l02381"></a>02381           <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gaa6ecf36e70263659f921a4ef0335db12" title="Appends a single byte to the string, returning FALSE if not enough memory.">_dbus_string_append_byte</a> (&amp;result,
<a name="l02382"></a>02382                                          val &lt;&lt; 4))
<a name="l02383"></a>02383             <span class="keywordflow">goto</span> out;
<a name="l02384"></a>02384         }
<a name="l02385"></a>02385       <span class="keywordflow">else</span>
<a name="l02386"></a>02386         {
<a name="l02387"></a>02387           <span class="keywordtype">int</span> len;
<a name="l02388"></a>02388           <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> b;
<a name="l02389"></a>02389 
<a name="l02390"></a>02390           len = <a class="code" href="group__DBusString.html#gaa5136e6fd2c5188f4b88de7863369c6d" title="Gets the length of a string (not including nul termination).">_dbus_string_get_length</a> (&amp;result);
<a name="l02391"></a>02391           
<a name="l02392"></a>02392           b = <a class="code" href="group__DBusString.html#gac1cb7b207eac3c6527a5d42fbc5449b1" title="Gets the byte at the given position.">_dbus_string_get_byte</a> (&amp;result, len - 1);
<a name="l02393"></a>02393 
<a name="l02394"></a>02394           b |= val;
<a name="l02395"></a>02395 
<a name="l02396"></a>02396           <a class="code" href="group__DBusString.html#gab6c823e9406208363fcb5e96d580e738" title="Sets the value of the byte at the given position.">_dbus_string_set_byte</a> (&amp;result, len - 1, b);
<a name="l02397"></a>02397         }
<a name="l02398"></a>02398 
<a name="l02399"></a>02399       high_bits = !high_bits;
<a name="l02400"></a>02400 
<a name="l02401"></a>02401       ++p;
<a name="l02402"></a>02402     }
<a name="l02403"></a>02403 
<a name="l02404"></a>02404  done:
<a name="l02405"></a>02405   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gad379fce8d4ef4f7e28f81f50b46ee4c9" title="Moves the end of one string into another string.">_dbus_string_move</a> (&amp;result, 0, dest, insert_at))
<a name="l02406"></a>02406     <span class="keywordflow">goto</span> out;
<a name="l02407"></a>02407 
<a name="l02408"></a>02408   <span class="keywordflow">if</span> (end_return)
<a name="l02409"></a>02409     *end_return = p - (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*) <a class="code" href="group__DBusString.html#ga33e20241ae7d784624f97d89b1a0539e" title="Gets the raw character buffer from a const string.">_dbus_string_get_const_data</a> (source);
<a name="l02410"></a>02410 
<a name="l02411"></a>02411   retval = <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l02412"></a>02412   
<a name="l02413"></a>02413  out:
<a name="l02414"></a>02414   <a class="code" href="group__DBusString.html#ga781ca91acda49a834dce7d0ed0eef212" title="Frees a string created by _dbus_string_init().">_dbus_string_free</a> (&amp;result);  
<a name="l02415"></a>02415   <span class="keywordflow">return</span> retval;
<a name="l02416"></a>02416 }
<a name="l02417"></a>02417 
<a name="l02431"></a>02431 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l02432"></a><a class="code" href="group__DBusString.html#gaa4324cd667e21beb31a5481cb0c12b6d">02432</a> <a class="code" href="group__DBusString.html#gaa4324cd667e21beb31a5481cb0c12b6d" title="Checks that the given range of the string is valid ASCII with no nul bytes.">_dbus_string_validate_ascii</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l02433"></a>02433                              <span class="keywordtype">int</span>               start,
<a name="l02434"></a>02434                              <span class="keywordtype">int</span>               len)
<a name="l02435"></a>02435 {
<a name="l02436"></a>02436   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s;
<a name="l02437"></a>02437   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end;
<a name="l02438"></a>02438   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l02439"></a>02439   _dbus_assert (start &gt;= 0);
<a name="l02440"></a>02440   _dbus_assert (start &lt;= real-&gt;len);
<a name="l02441"></a>02441   _dbus_assert (len &gt;= 0);
<a name="l02442"></a>02442   
<a name="l02443"></a>02443   <span class="keywordflow">if</span> (len &gt; real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> - start)
<a name="l02444"></a>02444     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02445"></a>02445   
<a name="l02446"></a>02446   s = real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + start;
<a name="l02447"></a>02447   end = s + len;
<a name="l02448"></a>02448   <span class="keywordflow">while</span> (s != end)
<a name="l02449"></a>02449     {
<a name="l02450"></a>02450       <span class="keywordflow">if</span> (_DBUS_UNLIKELY (!_DBUS_ISASCII (*s)))
<a name="l02451"></a>02451         <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02452"></a>02452         
<a name="l02453"></a>02453       ++s;
<a name="l02454"></a>02454     }
<a name="l02455"></a>02455   
<a name="l02456"></a>02456   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l02457"></a>02457 }
<a name="l02458"></a>02458 
<a name="l02466"></a>02466 <span class="keywordtype">void</span>
<a name="l02467"></a><a class="code" href="group__DBusString.html#ga698f4b0299e6c6a707fd7e9c14915f00">02467</a> <a class="code" href="group__DBusString.html#ga698f4b0299e6c6a707fd7e9c14915f00" title="Converts the given range of the string to lower case.">_dbus_string_tolower_ascii</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l02468"></a>02468                             <span class="keywordtype">int</span>               start,
<a name="l02469"></a>02469                             <span class="keywordtype">int</span>               len)
<a name="l02470"></a>02470 {
<a name="l02471"></a>02471   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s;
<a name="l02472"></a>02472   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end;
<a name="l02473"></a>02473   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l02474"></a>02474   _dbus_assert (start &gt;= 0);
<a name="l02475"></a>02475   _dbus_assert (start &lt;= real-&gt;len);
<a name="l02476"></a>02476   _dbus_assert (len &gt;= 0);
<a name="l02477"></a>02477   _dbus_assert (len &lt;= real-&gt;len - start);
<a name="l02478"></a>02478 
<a name="l02479"></a>02479   s = real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + start;
<a name="l02480"></a>02480   end = s + len;
<a name="l02481"></a>02481 
<a name="l02482"></a>02482   <span class="keywordflow">while</span> (s != end)
<a name="l02483"></a>02483     {
<a name="l02484"></a>02484       <span class="keywordflow">if</span> (*s &gt;= <span class="charliteral">&#39;A&#39;</span> &amp;&amp; *s &lt;= <span class="charliteral">&#39;Z&#39;</span>)
<a name="l02485"></a>02485           *s += <span class="charliteral">&#39;a&#39;</span> - <span class="charliteral">&#39;A&#39;</span>;
<a name="l02486"></a>02486       ++s;
<a name="l02487"></a>02487     }
<a name="l02488"></a>02488 }
<a name="l02489"></a>02489 
<a name="l02497"></a>02497 <span class="keywordtype">void</span>
<a name="l02498"></a><a class="code" href="group__DBusString.html#ga9c959f7d18ff21c5ae51846c6ba065f1">02498</a> <a class="code" href="group__DBusString.html#ga9c959f7d18ff21c5ae51846c6ba065f1" title="Converts the given range of the string to upper case.">_dbus_string_toupper_ascii</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l02499"></a>02499                             <span class="keywordtype">int</span>               start,
<a name="l02500"></a>02500                             <span class="keywordtype">int</span>               len)
<a name="l02501"></a>02501 {
<a name="l02502"></a>02502   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s;
<a name="l02503"></a>02503   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end;
<a name="l02504"></a>02504   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l02505"></a>02505   _dbus_assert (start &gt;= 0);
<a name="l02506"></a>02506   _dbus_assert (start &lt;= real-&gt;len);
<a name="l02507"></a>02507   _dbus_assert (len &gt;= 0);
<a name="l02508"></a>02508   _dbus_assert (len &lt;= real-&gt;len - start);
<a name="l02509"></a>02509 
<a name="l02510"></a>02510   s = real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + start;
<a name="l02511"></a>02511   end = s + len;
<a name="l02512"></a>02512 
<a name="l02513"></a>02513   <span class="keywordflow">while</span> (s != end)
<a name="l02514"></a>02514     {
<a name="l02515"></a>02515       <span class="keywordflow">if</span> (*s &gt;= <span class="charliteral">&#39;a&#39;</span> &amp;&amp; *s &lt;= <span class="charliteral">&#39;z&#39;</span>)
<a name="l02516"></a>02516           *s += <span class="charliteral">&#39;A&#39;</span> - <span class="charliteral">&#39;a&#39;</span>;
<a name="l02517"></a>02517       ++s;
<a name="l02518"></a>02518     }
<a name="l02519"></a>02519 }
<a name="l02520"></a>02520 
<a name="l02536"></a>02536 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l02537"></a><a class="code" href="group__DBusString.html#ga65f0f04b7c9371406fc87343f691e8da">02537</a> <a class="code" href="group__DBusString.html#ga65f0f04b7c9371406fc87343f691e8da" title="Checks that the given range of the string is valid UTF-8.">_dbus_string_validate_utf8</a>  (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l02538"></a>02538                              <span class="keywordtype">int</span>               start,
<a name="l02539"></a>02539                              <span class="keywordtype">int</span>               len)
<a name="l02540"></a>02540 {
<a name="l02541"></a>02541   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *p;
<a name="l02542"></a>02542   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end;
<a name="l02543"></a>02543   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l02544"></a>02544   _dbus_assert (start &gt;= 0);
<a name="l02545"></a>02545   _dbus_assert (start &lt;= real-&gt;len);
<a name="l02546"></a>02546   _dbus_assert (len &gt;= 0);
<a name="l02547"></a>02547 
<a name="l02548"></a>02548   <span class="comment">/* we are doing _DBUS_UNLIKELY() here which might be</span>
<a name="l02549"></a>02549 <span class="comment">   * dubious in a generic library like GLib, but in D-Bus</span>
<a name="l02550"></a>02550 <span class="comment">   * we know we&#39;re validating messages and that it would</span>
<a name="l02551"></a>02551 <span class="comment">   * only be evil/broken apps that would have invalid</span>
<a name="l02552"></a>02552 <span class="comment">   * UTF-8. Also, this function seems to be a performance</span>
<a name="l02553"></a>02553 <span class="comment">   * bottleneck in profiles.</span>
<a name="l02554"></a>02554 <span class="comment">   */</span>
<a name="l02555"></a>02555   
<a name="l02556"></a>02556   <span class="keywordflow">if</span> (_DBUS_UNLIKELY (len &gt; real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> - start))
<a name="l02557"></a>02557     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02558"></a>02558   
<a name="l02559"></a>02559   p = real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + start;
<a name="l02560"></a>02560   end = p + len;
<a name="l02561"></a>02561   
<a name="l02562"></a>02562   <span class="keywordflow">while</span> (p &lt; end)
<a name="l02563"></a>02563     {
<a name="l02564"></a>02564       <span class="keywordtype">int</span> i, mask, char_len;
<a name="l02565"></a>02565       dbus_unichar_t result;
<a name="l02566"></a>02566 
<a name="l02567"></a>02567       <span class="comment">/* nul bytes considered invalid */</span>
<a name="l02568"></a>02568       <span class="keywordflow">if</span> (*p == <span class="charliteral">&#39;\0&#39;</span>)
<a name="l02569"></a>02569         <span class="keywordflow">break</span>;
<a name="l02570"></a>02570       
<a name="l02571"></a>02571       <span class="comment">/* Special-case ASCII; this makes us go a lot faster in</span>
<a name="l02572"></a>02572 <span class="comment">       * D-Bus profiles where we are typically validating</span>
<a name="l02573"></a>02573 <span class="comment">       * function names and such. We have to know that</span>
<a name="l02574"></a>02574 <span class="comment">       * all following checks will pass for ASCII though,</span>
<a name="l02575"></a>02575 <span class="comment">       * comments follow ...</span>
<a name="l02576"></a>02576 <span class="comment">       */</span>      
<a name="l02577"></a>02577       <span class="keywordflow">if</span> (*p &lt; 128)
<a name="l02578"></a>02578         {
<a name="l02579"></a>02579           ++p;
<a name="l02580"></a>02580           <span class="keywordflow">continue</span>;
<a name="l02581"></a>02581         }
<a name="l02582"></a>02582       
<a name="l02583"></a>02583       <a class="code" href="group__DBusString.html#ga30614080229a4fb63460ffdc8ab484fb" title="computes length and mask of a unicode character">UTF8_COMPUTE</a> (*p, mask, char_len);
<a name="l02584"></a>02584 
<a name="l02585"></a>02585       <span class="keywordflow">if</span> (_DBUS_UNLIKELY (char_len == 0))  <span class="comment">/* ASCII: char_len == 1 */</span>
<a name="l02586"></a>02586         <span class="keywordflow">break</span>;
<a name="l02587"></a>02587 
<a name="l02588"></a>02588       <span class="comment">/* check that the expected number of bytes exists in the remaining length */</span>
<a name="l02589"></a>02589       <span class="keywordflow">if</span> (_DBUS_UNLIKELY ((end - p) &lt; char_len)) <span class="comment">/* ASCII: p &lt; end and char_len == 1 */</span>
<a name="l02590"></a>02590         <span class="keywordflow">break</span>;
<a name="l02591"></a>02591         
<a name="l02592"></a>02592       <a class="code" href="group__DBusString.html#gab5b4b316a69f78611a14e6b1fd091992" title="Gets a UTF-8 value.">UTF8_GET</a> (result, p, i, mask, char_len);
<a name="l02593"></a>02593 
<a name="l02594"></a>02594       <span class="comment">/* Check for overlong UTF-8 */</span>
<a name="l02595"></a>02595       <span class="keywordflow">if</span> (_DBUS_UNLIKELY (<a class="code" href="group__DBusString.html#ga9691ff5386e218870299de1d9e77ceea" title="computes length of a unicode character in UTF-8">UTF8_LENGTH</a> (result) != char_len)) <span class="comment">/* ASCII: UTF8_LENGTH == 1 */</span>
<a name="l02596"></a>02596         <span class="keywordflow">break</span>;
<a name="l02597"></a>02597 <span class="preprocessor">#if 0</span>
<a name="l02598"></a>02598 <span class="preprocessor"></span>      <span class="comment">/* The UNICODE_VALID check below will catch this */</span>
<a name="l02599"></a>02599       <span class="keywordflow">if</span> (_DBUS_UNLIKELY (result == (dbus_unichar_t)-1)) <span class="comment">/* ASCII: result = ascii value */</span>
<a name="l02600"></a>02600         <span class="keywordflow">break</span>;
<a name="l02601"></a>02601 <span class="preprocessor">#endif</span>
<a name="l02602"></a>02602 <span class="preprocessor"></span>
<a name="l02603"></a>02603       <span class="keywordflow">if</span> (_DBUS_UNLIKELY (!<a class="code" href="group__DBusString.html#ga25f0a93fc023fa0eec07ac1e32011e89" title="Check whether a Unicode (5.2) char is in a valid range.">UNICODE_VALID</a> (result))) <span class="comment">/* ASCII: always valid */</span>
<a name="l02604"></a>02604         <span class="keywordflow">break</span>;
<a name="l02605"></a>02605 
<a name="l02606"></a>02606       <span class="comment">/* UNICODE_VALID should have caught it */</span>
<a name="l02607"></a>02607       _dbus_assert (result != (dbus_unichar_t)-1);
<a name="l02608"></a>02608       
<a name="l02609"></a>02609       p += char_len;
<a name="l02610"></a>02610     }
<a name="l02611"></a>02611 
<a name="l02612"></a>02612   <span class="comment">/* See that we covered the entire length if a length was</span>
<a name="l02613"></a>02613 <span class="comment">   * passed in</span>
<a name="l02614"></a>02614 <span class="comment">   */</span>
<a name="l02615"></a>02615   <span class="keywordflow">if</span> (_DBUS_UNLIKELY (p != end))
<a name="l02616"></a>02616     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02617"></a>02617   <span class="keywordflow">else</span>
<a name="l02618"></a>02618     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l02619"></a>02619 }
<a name="l02620"></a>02620 
<a name="l02634"></a>02634 <a class="code" href="group__DBusTypes.html#ga39c9cb0f3a2a8ad6f55cc4855d035349" title="A boolean, valid values are TRUE and FALSE.">dbus_bool_t</a>
<a name="l02635"></a><a class="code" href="group__DBusString.html#ga199d0fc00ee3cd0300a1b3870d7986a3">02635</a> <a class="code" href="group__DBusString.html#ga199d0fc00ee3cd0300a1b3870d7986a3" title="Checks that the given range of the string is all nul bytes.">_dbus_string_validate_nul</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l02636"></a>02636                            <span class="keywordtype">int</span>               start,
<a name="l02637"></a>02637                            <span class="keywordtype">int</span>               len)
<a name="l02638"></a>02638 {
<a name="l02639"></a>02639   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s;
<a name="l02640"></a>02640   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end;
<a name="l02641"></a>02641   <a class="code" href="group__DBusStringInternals.html#ga5cf5f12f6d8f839e9a7c3ad790a83316" title="Checks assertions about a string that may be const or locked.">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l02642"></a>02642   _dbus_assert (start &gt;= 0);
<a name="l02643"></a>02643   _dbus_assert (len &gt;= 0);
<a name="l02644"></a>02644   _dbus_assert (start &lt;= real-&gt;len);
<a name="l02645"></a>02645   
<a name="l02646"></a>02646   <span class="keywordflow">if</span> (len &gt; real-&gt;<a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> - start)
<a name="l02647"></a>02647     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02648"></a>02648   
<a name="l02649"></a>02649   s = real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + start;
<a name="l02650"></a>02650   end = s + len;
<a name="l02651"></a>02651   <span class="keywordflow">while</span> (s != end)
<a name="l02652"></a>02652     {
<a name="l02653"></a>02653       <span class="keywordflow">if</span> (_DBUS_UNLIKELY (*s != <span class="charliteral">&#39;\0&#39;</span>))
<a name="l02654"></a>02654         <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to &quot;0&quot;.">FALSE</a>;
<a name="l02655"></a>02655       ++s;
<a name="l02656"></a>02656     }
<a name="l02657"></a>02657   
<a name="l02658"></a>02658   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to &quot;1&quot;.">TRUE</a>;
<a name="l02659"></a>02659 }
<a name="l02660"></a>02660 
<a name="l02666"></a>02666 <span class="keywordtype">void</span>
<a name="l02667"></a><a class="code" href="group__DBusString.html#ga9385fd0de31b3f5f4f8baa96bad3fac6">02667</a> <a class="code" href="group__DBusString.html#ga9385fd0de31b3f5f4f8baa96bad3fac6" title="Clears all allocated bytes in the string to zero.">_dbus_string_zero</a> (<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l02668"></a>02668 {
<a name="l02669"></a>02669   <a class="code" href="group__DBusStringInternals.html#ga376570af2af3ebb7e59d45b49b9582b3" title="Checks assertions about a string object that needs to be modifiable - may not be locked or const...">DBUS_STRING_PREAMBLE</a> (str);
<a name="l02670"></a>02670 
<a name="l02671"></a>02671   memset (real-&gt;<a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> - real-&gt;<a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a>, <span class="charliteral">&#39;\0&#39;</span>, real-&gt;<a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a>);
<a name="l02672"></a>02672 }
<a name="l02675"></a>02675 <span class="comment">/* tests are in dbus-string-util.c */</span>
</pre></div></div><!-- contents -->


<hr class="footer"/><address class="footer"><small>
Generated on Thu Mar 3 2016 17:50:31 for D-Bus by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.7.6.1
</small></address>

</body>
</html>