| 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
 <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 Page</span></a></li>
<li><a href="pages.html"><span>Related Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data Structures</span></a></li>
<li 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 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: "gnu"; 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 <ralf.habacker@freenet.de></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 <config.h></span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "dbus-internals.h"</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "dbus-string.h"</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 <string.h></span>
<a name="l00030"></a>00030 <span class="comment">/* for vsnprintf */</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include <stdio.h></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 "dbus-string-private.h"</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include "dbus-marshal-basic.h"</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 "dbus-sysdeps.h"</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->allocated for the align offset and nul byte */</span>
<a name="l00086"></a>00086 _dbus_assert (real-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> <= real-><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-><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-><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-><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-><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-><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-><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-><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-><a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a> < 8);
<a name="l00105"></a>00105 _dbus_assert (_DBUS_ALIGN_ADDRESS (real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>, 8) == real-><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-><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-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> - real-><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-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>,
<a name="l00115"></a>00115 real-><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-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> = real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> - real-><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-><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's very important not to touch anything</span>
<a name="l00144"></a>00144 <span class="comment"> * other than real->str if we'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-><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-><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 "0".">FALSE</a>;
<a name="l00152"></a>00152
<a name="l00153"></a>00153 real-><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-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> = 0;
<a name="l00155"></a>00155 real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[real-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>] = <span class="charliteral">'\0'</span>;
<a name="l00156"></a>00156
<a name="l00157"></a>00157 real-><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 "0".">FALSE</a>;
<a name="l00158"></a>00158 real-><a class="code" href="structDBusRealString.html#a865d892d7cacedd598b828c15c5815c5" title="DBusString has been locked and can't be changed.">locked</a> = <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to "0".">FALSE</a>;
<a name="l00159"></a>00159 real-><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 "0".">FALSE</a>;
<a name="l00160"></a>00160 real-><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 "1".">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 <= <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 >= 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-><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-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> = len;
<a name="l00225"></a>00225 real-><a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a> = real-><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-><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 "1".">TRUE</a>;
<a name="l00227"></a>00227 real-><a class="code" href="structDBusRealString.html#a865d892d7cacedd598b828c15c5815c5" title="DBusString has been locked and can't be changed.">locked</a> = <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to "1".">TRUE</a>;
<a name="l00228"></a>00228 real-><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 "0".">FALSE</a>;
<a name="l00229"></a>00229 real-><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'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-><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'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-><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-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> - real-><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-><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 "1".">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-><a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a> - (real-><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 <= max_waste)
<a name="l00273"></a>00273 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to "1".">TRUE</a>;
<a name="l00274"></a>00274
<a name="l00275"></a>00275 new_allocated = real-><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-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> - real-><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 "0".">FALSE</a>;
<a name="l00280"></a>00280
<a name="l00281"></a>00281 real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> = new_str + real-><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-><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 "1".">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'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-><a class="code" href="structDBusRealString.html#a865d892d7cacedd598b828c15c5815c5" title="DBusString has been locked and can't be changed.">locked</a> = <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to "1".">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'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-><a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a> > (<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-><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'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) && !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 >= real-><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-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> - real-><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 "0".">FALSE</a>;
<a name="l00352"></a>00352
<a name="l00353"></a>00353 real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> = new_str + real-><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-><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 "1".">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 > <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 "0".">FALSE</a>;
<a name="l00389"></a>00389 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (new_length > (real-><a class="code" href="structDBusRealString.html#ae12ec58c271e47f3f89fae1410b7c5e5" title="Allocated size of data.">allocated</a> - _DBUS_STRING_ALLOCATION_PADDING) &&
<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 "0".">FALSE</a>;
<a name="l00392"></a>00392 <span class="keywordflow">else</span>
<a name="l00393"></a>00393 {
<a name="l00394"></a>00394 real-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> = new_length;
<a name="l00395"></a>00395 real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[new_length] = <span class="charliteral">'\0'</span>;
<a name="l00396"></a>00396 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to "1".">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 "1".">TRUE</a>;
<a name="l00407"></a>00407
<a name="l00408"></a>00408 <span class="keywordflow">if</span> (len > <a class="code" href="group__DBusStringInternals.html#ga1e3535c07f25485129d9d17194e303af" title="The maximum length of a DBusString.">_DBUS_STRING_MAX_LENGTH</a> - dest-><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 "0".">FALSE</a>; <span class="comment">/* detected overflow of dest->len + len below */</span>
<a name="l00410"></a>00410
<a name="l00411"></a>00411 <span class="keywordflow">if</span> (!set_length (dest, dest-><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 "0".">FALSE</a>;
<a name="l00413"></a>00413
<a name="l00414"></a>00414 memmove (dest-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + insert_at + len,
<a name="l00415"></a>00415 dest-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + insert_at,
<a name="l00416"></a>00416 dest-><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 "1".">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-><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'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-><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 >= 0);
<a name="l00479"></a>00479 _dbus_assert (len >= 0);
<a name="l00480"></a>00480 _dbus_assert (start <= real->len);
<a name="l00481"></a>00481 _dbus_assert (len <= real->len - start);
<a name="l00482"></a>00482
<a name="l00483"></a>00483 <span class="keywordflow">return</span> (<span class="keywordtype">char</span>*) real-><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'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 >= 0);
<a name="l00503"></a>00503 _dbus_assert (len >= 0);
<a name="l00504"></a>00504 _dbus_assert (start <= real->len);
<a name="l00505"></a>00505 _dbus_assert (len <= real->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-><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'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 < real->len);
<a name="l00527"></a>00527 _dbus_assert (i >= 0);
<a name="l00528"></a>00528
<a name="l00529"></a>00529 real-><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'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 <= real->len);
<a name="l00550"></a>00550 _dbus_assert (start >= 0);
<a name="l00551"></a>00551
<a name="l00552"></a>00552 <span class="keywordflow">return</span> real-><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 <= real->len);
<a name="l00574"></a>00574 _dbus_assert (i >= 0);
<a name="l00575"></a>00575 _dbus_assert (n_bytes >= 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 "1".">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 "0".">FALSE</a>;
<a name="l00582"></a>00582
<a name="l00583"></a>00583 memset (real-><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 "1".">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 <= real->len);
<a name="l00603"></a>00603 _dbus_assert (i >= 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 "0".">FALSE</a>;
<a name="l00607"></a>00607
<a name="l00608"></a>00608 real-><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 "1".">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-><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-><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 "0".">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 "1".">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-><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 "0".">FALSE</a>;
<a name="l00664"></a>00664
<a name="l00665"></a>00665 memcpy (*data_return, real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>, real-><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 "1".">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 >= 0);
<a name="l00687"></a>00687 _dbus_assert (avail_len >= real-><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-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>, real-><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 >= 0);
<a name="l00709"></a>00709 _dbus_assert (avail_len > real-><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-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>, real-><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'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-><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 >= 0);
<a name="l00748"></a>00748
<a name="l00749"></a>00749 <span class="keywordflow">if</span> (_DBUS_UNLIKELY (additional_length > <a class="code" href="group__DBusStringInternals.html#ga1e3535c07f25485129d9d17194e303af" title="The maximum length of a DBusString.">_DBUS_STRING_MAX_LENGTH</a> - real-><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 "0".">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-><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 >= 0);
<a name="l00768"></a>00768 _dbus_assert (length_to_remove <= real->len);
<a name="l00769"></a>00769
<a name="l00770"></a>00770 set_length (real,
<a name="l00771"></a>00771 real-><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 >= 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 >= 1);
<a name="l00806"></a>00806 _dbus_assert (alignment <= 8); <span class="comment">/* it has to be a bug if > 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 <= real->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-><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 > (<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 "0".">FALSE</a>;
<a name="l00817"></a>00817
<a name="l00818"></a>00818 delta = new_len - real-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>;
<a name="l00819"></a>00819 _dbus_assert (delta >= 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 "1".">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-><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 "0".">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 < delta)
<a name="l00833"></a>00833 {
<a name="l00834"></a>00834 memset (&real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[insert_at], <span class="charliteral">'\0'</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 "1".">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 &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 "0".">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 "1".">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 "1".">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 "0".">FALSE</a>;
<a name="l00902"></a>00902
<a name="l00903"></a>00903 memcpy (real->str + (real->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 "1".">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 > (<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 "0".">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, &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 "0".">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-><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 "1".">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, &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 "0".">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-><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 "1".">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, &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 "0".">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-><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 "1".">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 "0".">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 "1".">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 < 0)
<a name="l01070"></a>01070 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to "0".">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'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 "0".">FALSE</a>;
<a name="l01077"></a>01077 }
<a name="l01078"></a>01078
<a name="l01079"></a>01079 vsprintf ((<span class="keywordtype">char</span>*) (real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + (real-><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 "1".">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 >= 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-><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 "0".">FALSE</a>;
<a name="l01146"></a>01146
<a name="l01147"></a>01147 real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[real-><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 "1".">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-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + start, real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + start + len, real-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> - (start + len));
<a name="l01161"></a>01161 real-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> -= len;
<a name="l01162"></a>01162 real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[real-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a>] = <span class="charliteral">'\0'</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 >= 0);
<a name="l01181"></a>01181 _dbus_assert (len >= 0);
<a name="l01182"></a>01182 _dbus_assert (start <= real->len);
<a name="l01183"></a>01183 _dbus_assert (len <= real->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 "1".">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 "0".">FALSE</a>;
<a name="l01200"></a>01200
<a name="l01201"></a>01201 memmove (dest-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + insert_at,
<a name="l01202"></a>01202 source-><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 "1".">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->constant); \</span>
<a name="l01224"></a>01224 <span class="preprocessor"> _dbus_assert (!real_dest->locked); \</span>
<a name="l01225"></a>01225 <span class="preprocessor"> _dbus_assert ((start) >= 0); \</span>
<a name="l01226"></a>01226 <span class="preprocessor"> _dbus_assert ((start) <= real_source->len); \</span>
<a name="l01227"></a>01227 <span class="preprocessor"> _dbus_assert ((insert_at) >= 0); \</span>
<a name="l01228"></a>01228 <span class="preprocessor"> _dbus_assert ((insert_at) <= real_dest->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 <= real_source->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-><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'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'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->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'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 >= 0);
<a name="l01299"></a>01299 _dbus_assert ((start + len) <= real_source->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 "1".">TRUE</a>;
<a name="l01305"></a>01305 }
<a name="l01306"></a>01306 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (start == 0 &&
<a name="l01307"></a>01307 len == real_source->len &&
<a name="l01308"></a>01308 real_dest->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 ->constant doesn't matter as you can'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)->str = (b)->str; \</span>
<a name="l01318"></a>01318 <span class="preprocessor"> (a)->len = (b)->len; \</span>
<a name="l01319"></a>01319 <span class="preprocessor"> (a)->allocated = (b)->allocated; \</span>
<a name="l01320"></a>01320 <span class="preprocessor"> (a)->align_offset = (b)->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 (&tmp, real_source);
<a name="l01326"></a>01326 ASSIGN_DATA (real_source, real_dest);
<a name="l01327"></a>01327 ASSIGN_DATA (real_dest, &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 "1".">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 "0".">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 "1".">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'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 >= 0);
<a name="l01365"></a>01365 _dbus_assert (start <= real_source->len);
<a name="l01366"></a>01366 _dbus_assert (len <= real_source->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'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 >= 0);
<a name="l01395"></a>01395 _dbus_assert (start <= real_source->len);
<a name="l01396"></a>01396 _dbus_assert (len <= real_source->len - start);
<a name="l01397"></a>01397 _dbus_assert (replace_at >= 0);
<a name="l01398"></a>01398 _dbus_assert (replace_at <= real_dest->len);
<a name="l01399"></a>01399 _dbus_assert (replace_len <= real_dest->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->str + replace_at,
<a name="l01404"></a>01404 real_source->str + start, len);
<a name="l01405"></a>01405 }
<a name="l01406"></a>01406 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len < replace_len)
<a name="l01407"></a>01407 {
<a name="l01408"></a>01408 memmove (real_dest->str + replace_at,
<a name="l01409"></a>01409 real_source->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 > 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 "0".">FALSE</a>;
<a name="l01428"></a>01428
<a name="l01429"></a>01429 memmove (real_dest->str + replace_at,
<a name="l01430"></a>01430 real_source->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 "1".">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">""</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, &byte_position))
<a name="l01461"></a>01461 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to "0".">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 "0".">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 "0".">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 "1".">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 < 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 & 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 & 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 & 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 & 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 & 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) < 0x80 ? 1 : \</span>
<a name="l01530"></a>01530 <span class="preprocessor"> ((Char) < 0x800 ? 2 : \</span>
<a name="l01531"></a>01531 <span class="preprocessor"> ((Char) < 0x10000 ? 3 : \</span>
<a name="l01532"></a>01532 <span class="preprocessor"> ((Char) < 0x200000 ? 4 : \</span>
<a name="l01533"></a>01533 <span class="preprocessor"> ((Char) < 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] & (Mask); \</span>
<a name="l01546"></a>01546 <span class="preprocessor"> for ((Count) = 1; (Count) < (Len); ++(Count)) \</span>
<a name="l01547"></a>01547 <span class="preprocessor"> { \</span>
<a name="l01548"></a>01548 <span class="preprocessor"> if (((Chars)[(Count)] & 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) <<= 6; \</span>
<a name="l01554"></a>01554 <span class="preprocessor"> (Result) |= ((Chars)[(Count)] & 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) < 0x110000 && \</span>
<a name="l01569"></a>01569 <span class="preprocessor"> (((Char) & 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)->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 ("\r\n" or "\n") 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 <= real->len);
<a name="l01618"></a>01618 _dbus_assert (start >= 0);
<a name="l01619"></a>01619
<a name="l01620"></a>01620 i = start;
<a name="l01621"></a>01621 <span class="keywordflow">while</span> (i < real->len)
<a name="l01622"></a>01622 {
<a name="l01623"></a>01623 <span class="keywordflow">if</span> (real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i] == <span class="charliteral">'\r'</span>)
<a name="l01624"></a>01624 {
<a name="l01625"></a>01625 <span class="keywordflow">if</span> ((i+1) < real-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> && real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i+1] == <span class="charliteral">'\n'</span>) <span class="comment">/* "\r\n" */</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 "1".">TRUE</a>;
<a name="l01632"></a>01632 }
<a name="l01633"></a>01633 <span class="keywordflow">else</span> <span class="comment">/* only "\r" */</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 "1".">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-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i] == <span class="charliteral">'\n'</span>) <span class="comment">/* only "\n" */</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 "1".">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-><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 "0".">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 <= real->len);
<a name="l01689"></a>01689 _dbus_assert (start >= 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 <= real->len);
<a name="l01692"></a>01692 _dbus_assert (start <= end);
<a name="l01693"></a>01693
<a name="l01694"></a>01694 <span class="comment">/* we always "find" an empty string */</span>
<a name="l01695"></a>01695 <span class="keywordflow">if</span> (*substr == <span class="charliteral">'\0'</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 "1".">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 < end)
<a name="l01704"></a>01704 {
<a name="l01705"></a>01705 <span class="keywordflow">if</span> (real-><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 < end)
<a name="l01710"></a>01710 {
<a name="l01711"></a>01711 <span class="keywordflow">if</span> (substr[j - i] == <span class="charliteral">'\0'</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-><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">'\0'</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 "1".">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 "0".">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 <= real->len);
<a name="l01754"></a>01754 _dbus_assert (start >= 0);
<a name="l01755"></a>01755
<a name="l01756"></a>01756 i = start;
<a name="l01757"></a>01757 <span class="keywordflow">while</span> (i < real->len)
<a name="l01758"></a>01758 {
<a name="l01759"></a>01759 <span class="keywordflow">if</span> (real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i] == <span class="charliteral">' '</span> ||
<a name="l01760"></a>01760 real-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>[i] == <span class="charliteral">'\t'</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 "1".">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-><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 "0".">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 <= real->len);
<a name="l01792"></a>01792 _dbus_assert (start >= 0);
<a name="l01793"></a>01793
<a name="l01794"></a>01794 i = start;
<a name="l01795"></a>01795 <span class="keywordflow">while</span> (i < real->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-><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-><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-><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 <= real->len);
<a name="l01826"></a>01826 _dbus_assert (start >= 0);
<a name="l01827"></a>01827
<a name="l01828"></a>01828 i = start;
<a name="l01829"></a>01829 <span class="keywordflow">while</span> (i < real->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-><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-><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-><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 <= real->len);
<a name="l01859"></a>01859 _dbus_assert (end >= 0);
<a name="l01860"></a>01860
<a name="l01861"></a>01861 i = end;
<a name="l01862"></a>01862 <span class="keywordflow">while</span> (i > 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-><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 >= 0 && (i == 0 || !(<a class="code" href="group__DBusStringInternals.html#ga9c88845804be152df28b81d7cad5673a" title="Checks for ASCII whitespace byte.">DBUS_IS_ASCII_WHITE</a> (real-><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 ("\r\n" or "\n") in the string, returning TRUE and filling in the byte index where ...">_dbus_string_find_eol</a> (source, 0, &eol, &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's no newline and source has zero length, we're done */</span>
<a name="l01906"></a>01906 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to "0".">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'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 "0".">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">"out of memory when shortening a string"</span>);
<a name="l01922"></a>01922 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to "0".">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 "1".">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, &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, &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, &i);
<a name="l01959"></a>01959
<a name="l01960"></a>01960 <span class="keywordflow">if</span> (i > 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, &i);
<a name="l01976"></a>01976
<a name="l01977"></a>01977 <span class="keywordflow">if</span> (i > 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), &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-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> != real_b-><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 "0".">FALSE</a>;
<a name="l02008"></a>02008
<a name="l02009"></a>02009 ap = real_a-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>;
<a name="l02010"></a>02010 bp = real_b-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>;
<a name="l02011"></a>02011 a_end = real_a-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + real_a-><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 "0".">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 "1".">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-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> != real_b-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> &&
<a name="l02051"></a>02051 (real_a-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> < len || real_b-><a class="code" href="structDBusRealString.html#aed6f543f7b748c4f5cf92b9aedd5f68d" title="Length without nul.">len</a> < len))
<a name="l02052"></a>02052 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to "0".">FALSE</a>;
<a name="l02053"></a>02053
<a name="l02054"></a>02054 ap = real_a-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>;
<a name="l02055"></a>02055 bp = real_b-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a>;
<a name="l02056"></a>02056 a_end = real_a-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + MIN (real_a-><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 "0".">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 "1".">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 >= 0);
<a name="l02100"></a>02100 _dbus_assert (a_len >= 0);
<a name="l02101"></a>02101 _dbus_assert (a_start <= real_a->len);
<a name="l02102"></a>02102 _dbus_assert (a_len <= real_a->len - a_start);
<a name="l02103"></a>02103 _dbus_assert (b_start >= 0);
<a name="l02104"></a>02104 _dbus_assert (b_start <= real_b->len);
<a name="l02105"></a>02105
<a name="l02106"></a>02106 <span class="keywordflow">if</span> (a_len > real_b-><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 "0".">FALSE</a>;
<a name="l02108"></a>02108
<a name="l02109"></a>02109 ap = real_a-><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-><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 "0".">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 <= (real_b-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + real_b-><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 "1".">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-><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-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + real_a-><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 && *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 "0".">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 "0".">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 "1".">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-><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-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> + real_a-><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 && *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 "0".">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">'\0'</span>)
<a name="l02193"></a>02193 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa8cecfc5c5c054d2875c03e77b7be15d" title="Expands to "1".">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 "0".">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">'0'</span>, <span class="charliteral">'1'</span>, <span class="charliteral">'2'</span>, <span class="charliteral">'3'</span>, <span class="charliteral">'4'</span>, <span class="charliteral">'5'</span>, <span class="charliteral">'6'</span>, <span class="charliteral">'7'</span>, <span class="charliteral">'8'</span>, <span class="charliteral">'9'</span>,
<a name="l02212"></a>02212 <span class="charliteral">'a'</span>, <span class="charliteral">'b'</span>, <span class="charliteral">'c'</span>, <span class="charliteral">'d'</span>, <span class="charliteral">'e'</span>, <span class="charliteral">'f'</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 >> 4)]))
<a name="l02217"></a>02217 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to "0".">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 & 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 "0".">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 "1".">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 <= <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> (&result))
<a name="l02254"></a>02254 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to "0".">FALSE</a>;
<a name="l02255"></a>02255
<a name="l02256"></a>02256 retval = <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to "0".">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> (&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> (&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 "1".">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> (&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 <= <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> (&result))
<a name="l02306"></a>02306 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to "0".">FALSE</a>;
<a name="l02307"></a>02307
<a name="l02308"></a>02308 retval = <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to "0".">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 "1".">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">'0'</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">'1'</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">'2'</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">'3'</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">'4'</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">'5'</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">'6'</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">'7'</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">'8'</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">'9'</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">'a'</span>:
<a name="l02352"></a>02352 <span class="keywordflow">case</span> <span class="charliteral">'A'</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">'b'</span>:
<a name="l02356"></a>02356 <span class="keywordflow">case</span> <span class="charliteral">'B'</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">'c'</span>:
<a name="l02360"></a>02360 <span class="keywordflow">case</span> <span class="charliteral">'C'</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">'d'</span>:
<a name="l02364"></a>02364 <span class="keywordflow">case</span> <span class="charliteral">'D'</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">'e'</span>:
<a name="l02368"></a>02368 <span class="keywordflow">case</span> <span class="charliteral">'E'</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">'f'</span>:
<a name="l02372"></a>02372 <span class="keywordflow">case</span> <span class="charliteral">'F'</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> (&result,
<a name="l02382"></a>02382 val << 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> (&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> (&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> (&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> (&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 "1".">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> (&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 >= 0);
<a name="l02440"></a>02440 _dbus_assert (start <= real->len);
<a name="l02441"></a>02441 _dbus_assert (len >= 0);
<a name="l02442"></a>02442
<a name="l02443"></a>02443 <span class="keywordflow">if</span> (len > real-><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 "0".">FALSE</a>;
<a name="l02445"></a>02445
<a name="l02446"></a>02446 s = real-><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 "0".">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 "1".">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 >= 0);
<a name="l02475"></a>02475 _dbus_assert (start <= real->len);
<a name="l02476"></a>02476 _dbus_assert (len >= 0);
<a name="l02477"></a>02477 _dbus_assert (len <= real->len - start);
<a name="l02478"></a>02478
<a name="l02479"></a>02479 s = real-><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 >= <span class="charliteral">'A'</span> && *s <= <span class="charliteral">'Z'</span>)
<a name="l02485"></a>02485 *s += <span class="charliteral">'a'</span> - <span class="charliteral">'A'</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 >= 0);
<a name="l02506"></a>02506 _dbus_assert (start <= real->len);
<a name="l02507"></a>02507 _dbus_assert (len >= 0);
<a name="l02508"></a>02508 _dbus_assert (len <= real->len - start);
<a name="l02509"></a>02509
<a name="l02510"></a>02510 s = real-><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 >= <span class="charliteral">'a'</span> && *s <= <span class="charliteral">'z'</span>)
<a name="l02516"></a>02516 *s += <span class="charliteral">'A'</span> - <span class="charliteral">'a'</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 >= 0);
<a name="l02545"></a>02545 _dbus_assert (start <= real->len);
<a name="l02546"></a>02546 _dbus_assert (len >= 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'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 > real-><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 "0".">FALSE</a>;
<a name="l02558"></a>02558
<a name="l02559"></a>02559 p = real-><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 < 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">'\0'</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 < 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) < char_len)) <span class="comment">/* ASCII: p < 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 "0".">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 "1".">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 >= 0);
<a name="l02643"></a>02643 _dbus_assert (len >= 0);
<a name="l02644"></a>02644 _dbus_assert (start <= real->len);
<a name="l02645"></a>02645
<a name="l02646"></a>02646 <span class="keywordflow">if</span> (len > real-><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 "0".">FALSE</a>;
<a name="l02648"></a>02648
<a name="l02649"></a>02649 s = real-><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">'\0'</span>))
<a name="l02654"></a>02654 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#gaa93f0eb578d23995850d61f7d61c55c1" title="Expands to "0".">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 "1".">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-><a class="code" href="structDBusRealString.html#ad60d27edba516b0a179ce1ead1e74725" title="String data, plus nul termination.">str</a> - real-><a class="code" href="structDBusRealString.html#a21fb373a65e36646787392a3dfe62443" title="str - align_offset is the actual malloc block">align_offset</a>, <span class="charliteral">'\0'</span>, real-><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  <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>