|
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17 System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64 User : nobody ( 99) PHP Version : 5.2.17 Disable Function : NONE Directory : /usr/share/devhelp/books/dbus/api/ |
Upload File : |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>D-Bus: dbus-string.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data Structures</span></a></li>
<li id="current"><a href="files.html"><span>Files</span></a></li>
<li><a href="pages.html"><span>Related Pages</span></a></li>
</ul></div>
<h1>dbus-string.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */</span>
<a name="l00002"></a>00002 <span class="comment">/* dbus-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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 "dbus-internals.h"</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "dbus-string.h"</span>
<a name="l00027"></a>00027 <span class="comment">/* we allow a system header here, for speed/convenience */</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include <string.h></span>
<a name="l00029"></a>00029 <span class="comment">/* for vsnprintf */</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include <stdio.h></span>
<a name="l00031"></a>00031 <span class="preprocessor">#define DBUS_CAN_USE_DBUS_STRING_PRIVATE 1</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#include "dbus-string-private.h"</span>
<a name="l00033"></a>00033 <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="l00034"></a>00034 <span class="comment"> * into the marshaling-related files</span>
<a name="l00035"></a>00035 <span class="comment"> */</span>
<a name="l00036"></a>00036 <span class="comment">/* for DBUS_VA_COPY */</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include "dbus-sysdeps.h"</span>
<a name="l00038"></a>00038
<a name="l00077"></a>00077 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00078"></a>00078 fixup_alignment (<a class="code" href="structDBusRealString.html">DBusRealString</a> *real)
<a name="l00079"></a>00079 {
<a name="l00080"></a>00080 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *aligned;
<a name="l00081"></a>00081 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *real_block;
<a name="l00082"></a>00082 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> old_align_offset;
<a name="l00083"></a>00083
<a name="l00084"></a>00084 <span class="comment">/* we have to have extra space in real->allocated for the align offset and nul byte */</span>
<a name="l00085"></a>00085 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> <= real-><a class="code" href="structDBusRealString.html#e12ec58c271e47f3f89fae1410b7c5e5">allocated</a> - _DBUS_STRING_ALLOCATION_PADDING);
<a name="l00086"></a>00086
<a name="l00087"></a>00087 old_align_offset = real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a>;
<a name="l00088"></a>00088 real_block = real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> - old_align_offset;
<a name="l00089"></a>00089
<a name="l00090"></a>00090 aligned = _DBUS_ALIGN_ADDRESS (real_block, 8);
<a name="l00091"></a>00091
<a name="l00092"></a>00092 real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a> = aligned - real_block;
<a name="l00093"></a>00093 real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> = aligned;
<a name="l00094"></a>00094
<a name="l00095"></a>00095 <span class="keywordflow">if</span> (old_align_offset != real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a>)
<a name="l00096"></a>00096 {
<a name="l00097"></a>00097 <span class="comment">/* Here comes the suck */</span>
<a name="l00098"></a>00098 memmove (real_block + real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a>,
<a name="l00099"></a>00099 real_block + old_align_offset,
<a name="l00100"></a>00100 real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> + 1);
<a name="l00101"></a>00101 }
<a name="l00102"></a>00102
<a name="l00103"></a>00103 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a> < 8);
<a name="l00104"></a>00104 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (_DBUS_ALIGN_ADDRESS (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>, 8) == real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>);
<a name="l00105"></a>00105 }
<a name="l00106"></a>00106
<a name="l00107"></a>00107 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00108"></a>00108 undo_alignment (<a class="code" href="structDBusRealString.html">DBusRealString</a> *real)
<a name="l00109"></a>00109 {
<a name="l00110"></a>00110 <span class="keywordflow">if</span> (real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a> != 0)
<a name="l00111"></a>00111 {
<a name="l00112"></a>00112 memmove (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> - real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a>,
<a name="l00113"></a>00113 real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>,
<a name="l00114"></a>00114 real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> + 1);
<a name="l00115"></a>00115
<a name="l00116"></a>00116 real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> = real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> - real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a>;
<a name="l00117"></a>00117 real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a> = 0;
<a name="l00118"></a>00118 }
<a name="l00119"></a>00119 }
<a name="l00120"></a>00120
<a name="l00130"></a>00130 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00131"></a><a class="code" href="group__DBusString.html#g569b784beea1b4fa98f05d27e6dd0e72">00131</a> <a class="code" href="group__DBusString.html#g569b784beea1b4fa98f05d27e6dd0e72">_dbus_string_init_preallocated</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00132"></a>00132 <span class="keywordtype">int</span> allocate_size)
<a name="l00133"></a>00133 {
<a name="l00134"></a>00134 <a class="code" href="structDBusRealString.html">DBusRealString</a> *real;
<a name="l00135"></a>00135
<a name="l00136"></a>00136 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (str != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00137"></a>00137
<a name="l00138"></a>00138 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (<span class="keyword">sizeof</span> (<a class="code" href="structDBusString.html">DBusString</a>) == <span class="keyword">sizeof</span> (<a class="code" href="structDBusRealString.html">DBusRealString</a>));
<a name="l00139"></a>00139
<a name="l00140"></a>00140 real = (DBusRealString*) str;
<a name="l00141"></a>00141
<a name="l00142"></a>00142 <span class="comment">/* It's very important not to touch anything</span>
<a name="l00143"></a>00143 <span class="comment"> * other than real->str if we're going to fail,</span>
<a name="l00144"></a>00144 <span class="comment"> * since we also use this function to reset</span>
<a name="l00145"></a>00145 <span class="comment"> * an existing string, e.g. in _dbus_string_steal_data()</span>
<a name="l00146"></a>00146 <span class="comment"> */</span>
<a name="l00147"></a>00147
<a name="l00148"></a>00148 real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> = <a class="code" href="group__DBusMemory.html#g0fff22bd7f055f5581a9898116a744b1">dbus_malloc</a> (_DBUS_STRING_ALLOCATION_PADDING + allocate_size);
<a name="l00149"></a>00149 <span class="keywordflow">if</span> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00150"></a>00150 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00151"></a>00151
<a name="l00152"></a>00152 real-><a class="code" href="structDBusRealString.html#e12ec58c271e47f3f89fae1410b7c5e5">allocated</a> = _DBUS_STRING_ALLOCATION_PADDING + allocate_size;
<a name="l00153"></a>00153 real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> = 0;
<a name="l00154"></a>00154 real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>] = <span class="charliteral">'\0'</span>;
<a name="l00155"></a>00155
<a name="l00156"></a>00156 real-><a class="code" href="structDBusRealString.html#eb48dcb099660ffc277883166fa72159">max_length</a> = <a class="code" href="group__DBusStringInternals.html#gff1c3814294a9db8ea968d159e8fd092">_DBUS_STRING_MAX_MAX_LENGTH</a>;
<a name="l00157"></a>00157 real-><a class="code" href="structDBusRealString.html#79675cfbe443cc779e3c668fbcb99578">constant</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00158"></a>00158 real-><a class="code" href="structDBusRealString.html#865d892d7cacedd598b828c15c5815c5">locked</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00159"></a>00159 real-><a class="code" href="structDBusRealString.html#062f6b092cc6c4baf01f2a820e2ba5ad">invalid</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00160"></a>00160 real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">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#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00165"></a>00165 }
<a name="l00166"></a>00166
<a name="l00174"></a>00174 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00175"></a><a class="code" href="group__DBusString.html#g348252317f7bb8ac43529972945830ae">00175</a> <a class="code" href="group__DBusString.html#g348252317f7bb8ac43529972945830ae">_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#g569b784beea1b4fa98f05d27e6dd0e72">_dbus_string_init_preallocated</a> (str, 0);
<a name="l00178"></a>00178 }
<a name="l00179"></a>00179
<a name="l00180"></a>00180 <span class="preprocessor">#ifdef DBUS_BUILD_TESTS</span>
<a name="l00181"></a>00181 <span class="preprocessor"></span><span class="comment">/* The max length thing is sort of a historical artifact</span>
<a name="l00182"></a>00182 <span class="comment"> * from a feature that turned out to be dumb; perhaps</span>
<a name="l00183"></a>00183 <span class="comment"> * we should purge it entirely. The problem with</span>
<a name="l00184"></a>00184 <span class="comment"> * the feature is that it looks like memory allocation</span>
<a name="l00185"></a>00185 <span class="comment"> * failure, but is not a transient or resolvable failure.</span>
<a name="l00186"></a>00186 <span class="comment"> */</span>
<a name="l00187"></a>00187 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00188"></a>00188 set_max_length (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00189"></a>00189 <span class="keywordtype">int</span> max_length)
<a name="l00190"></a>00190 {
<a name="l00191"></a>00191 <a class="code" href="structDBusRealString.html">DBusRealString</a> *real;
<a name="l00192"></a>00192
<a name="l00193"></a>00193 real = (<a class="code" href="structDBusRealString.html">DBusRealString</a>*) str;
<a name="l00194"></a>00194
<a name="l00195"></a>00195 real-><a class="code" href="structDBusRealString.html#eb48dcb099660ffc277883166fa72159">max_length</a> = max_length;
<a name="l00196"></a>00196 }
<a name="l00197"></a>00197 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_BUILD_TESTS */</span>
<a name="l00198"></a>00198
<a name="l00208"></a>00208 <span class="keywordtype">void</span>
<a name="l00209"></a><a class="code" href="group__DBusString.html#g374640ddfa2f0b27a8356e2379ba8043">00209</a> <a class="code" href="group__DBusString.html#g374640ddfa2f0b27a8356e2379ba8043">_dbus_string_init_const</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00210"></a>00210 <span class="keyword">const</span> <span class="keywordtype">char</span> *value)
<a name="l00211"></a>00211 {
<a name="l00212"></a>00212 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (value != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00213"></a>00213
<a name="l00214"></a>00214 <a class="code" href="group__DBusString.html#g6792a5c1725faa9d635d95f7a3b5bfae">_dbus_string_init_const_len</a> (str, value,
<a name="l00215"></a>00215 strlen (value));
<a name="l00216"></a>00216 }
<a name="l00217"></a>00217
<a name="l00228"></a>00228 <span class="keywordtype">void</span>
<a name="l00229"></a><a class="code" href="group__DBusString.html#g6792a5c1725faa9d635d95f7a3b5bfae">00229</a> <a class="code" href="group__DBusString.html#g6792a5c1725faa9d635d95f7a3b5bfae">_dbus_string_init_const_len</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00230"></a>00230 <span class="keyword">const</span> <span class="keywordtype">char</span> *value,
<a name="l00231"></a>00231 <span class="keywordtype">int</span> len)
<a name="l00232"></a>00232 {
<a name="l00233"></a>00233 <a class="code" href="structDBusRealString.html">DBusRealString</a> *real;
<a name="l00234"></a>00234
<a name="l00235"></a>00235 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (str != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00236"></a>00236 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len == 0 || value != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00237"></a>00237 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len <= <a class="code" href="group__DBusStringInternals.html#gff1c3814294a9db8ea968d159e8fd092">_DBUS_STRING_MAX_MAX_LENGTH</a>);
<a name="l00238"></a>00238 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len >= 0);
<a name="l00239"></a>00239
<a name="l00240"></a>00240 real = (<a class="code" href="structDBusRealString.html">DBusRealString</a>*) str;
<a name="l00241"></a>00241
<a name="l00242"></a>00242 real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*) value;
<a name="l00243"></a>00243 real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> = len;
<a name="l00244"></a>00244 real-><a class="code" href="structDBusRealString.html#e12ec58c271e47f3f89fae1410b7c5e5">allocated</a> = real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> + _DBUS_STRING_ALLOCATION_PADDING; <span class="comment">/* a lie, just to avoid special-case assertions... */</span>
<a name="l00245"></a>00245 real-><a class="code" href="structDBusRealString.html#eb48dcb099660ffc277883166fa72159">max_length</a> = real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> + 1;
<a name="l00246"></a>00246 real-><a class="code" href="structDBusRealString.html#79675cfbe443cc779e3c668fbcb99578">constant</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00247"></a>00247 real-><a class="code" href="structDBusRealString.html#865d892d7cacedd598b828c15c5815c5">locked</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00248"></a>00248 real-><a class="code" href="structDBusRealString.html#062f6b092cc6c4baf01f2a820e2ba5ad">invalid</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00249"></a>00249 real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a> = 0;
<a name="l00250"></a>00250
<a name="l00251"></a>00251 <span class="comment">/* We don't require const strings to be 8-byte aligned as the</span>
<a name="l00252"></a>00252 <span class="comment"> * memory is coming from elsewhere.</span>
<a name="l00253"></a>00253 <span class="comment"> */</span>
<a name="l00254"></a>00254 }
<a name="l00255"></a>00255
<a name="l00261"></a>00261 <span class="keywordtype">void</span>
<a name="l00262"></a><a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">00262</a> <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l00263"></a>00263 {
<a name="l00264"></a>00264 <a class="code" href="structDBusRealString.html">DBusRealString</a> *real = (<a class="code" href="structDBusRealString.html">DBusRealString</a>*) str;
<a name="l00265"></a>00265 <a class="code" href="group__DBusStringInternals.html#g862cb88a139179981e1fcd5643165b56">DBUS_GENERIC_STRING_PREAMBLE</a> (real);
<a name="l00266"></a>00266
<a name="l00267"></a>00267 <span class="keywordflow">if</span> (real->constant)
<a name="l00268"></a>00268 <span class="keywordflow">return</span>;
<a name="l00269"></a>00269 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (real->str - real->align_offset);
<a name="l00270"></a>00270
<a name="l00271"></a>00271 real->invalid = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00272"></a>00272 }
<a name="l00273"></a>00273
<a name="l00274"></a>00274 <span class="preprocessor">#ifdef DBUS_BUILD_TESTS</span>
<a name="l00275"></a>00275 <span class="preprocessor"></span><span class="comment">/* Not using this feature at the moment,</span>
<a name="l00276"></a>00276 <span class="comment"> * so marked DBUS_BUILD_TESTS-only</span>
<a name="l00277"></a>00277 <span class="comment"> */</span>
<a name="l00287"></a>00287 <span class="keywordtype">void</span>
<a name="l00288"></a>00288 _dbus_string_lock (<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l00289"></a>00289 {
<a name="l00290"></a>00290 <a class="code" href="group__DBusStringInternals.html#gd9f957c4027c34a5c330822aa98b9307">DBUS_LOCKED_STRING_PREAMBLE</a> (str); <span class="comment">/* can lock multiple times */</span>
<a name="l00291"></a>00291
<a name="l00292"></a>00292 real-><a class="code" href="structDBusRealString.html#865d892d7cacedd598b828c15c5815c5">locked</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00293"></a>00293
<a name="l00294"></a>00294 <span class="comment">/* Try to realloc to avoid excess memory usage, since</span>
<a name="l00295"></a>00295 <span class="comment"> * we know we won't change the string further</span>
<a name="l00296"></a>00296 <span class="comment"> */</span>
<a name="l00297"></a>00297 <span class="preprocessor">#define MAX_WASTE 48</span>
<a name="l00298"></a>00298 <span class="preprocessor"></span> <span class="keywordflow">if</span> (real-><a class="code" href="structDBusRealString.html#e12ec58c271e47f3f89fae1410b7c5e5">allocated</a> - MAX_WASTE > real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>)
<a name="l00299"></a>00299 {
<a name="l00300"></a>00300 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *new_str;
<a name="l00301"></a>00301 <span class="keywordtype">int</span> new_allocated;
<a name="l00302"></a>00302
<a name="l00303"></a>00303 new_allocated = real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> + _DBUS_STRING_ALLOCATION_PADDING;
<a name="l00304"></a>00304
<a name="l00305"></a>00305 new_str = <a class="code" href="group__DBusMemory.html#g621d9ba15ea8ae44501b0fbf756cbeac">dbus_realloc</a> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> - real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a>,
<a name="l00306"></a>00306 new_allocated);
<a name="l00307"></a>00307 <span class="keywordflow">if</span> (new_str != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00308"></a>00308 {
<a name="l00309"></a>00309 real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> = new_str + real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a>;
<a name="l00310"></a>00310 real-><a class="code" href="structDBusRealString.html#e12ec58c271e47f3f89fae1410b7c5e5">allocated</a> = new_allocated;
<a name="l00311"></a>00311 fixup_alignment (real);
<a name="l00312"></a>00312 }
<a name="l00313"></a>00313 }
<a name="l00314"></a>00314 }
<a name="l00315"></a>00315 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_BUILD_TESTS */</span>
<a name="l00316"></a>00316
<a name="l00317"></a>00317 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00318"></a>00318 reallocate_for_length (<a class="code" href="structDBusRealString.html">DBusRealString</a> *real,
<a name="l00319"></a>00319 <span class="keywordtype">int</span> new_length)
<a name="l00320"></a>00320 {
<a name="l00321"></a>00321 <span class="keywordtype">int</span> new_allocated;
<a name="l00322"></a>00322 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *new_str;
<a name="l00323"></a>00323
<a name="l00324"></a>00324 <span class="comment">/* at least double our old allocation to avoid O(n), avoiding</span>
<a name="l00325"></a>00325 <span class="comment"> * overflow</span>
<a name="l00326"></a>00326 <span class="comment"> */</span>
<a name="l00327"></a>00327 <span class="keywordflow">if</span> (real-><a class="code" href="structDBusRealString.html#e12ec58c271e47f3f89fae1410b7c5e5">allocated</a> > (<a class="code" href="group__DBusStringInternals.html#gff1c3814294a9db8ea968d159e8fd092">_DBUS_STRING_MAX_MAX_LENGTH</a> + _DBUS_STRING_ALLOCATION_PADDING) / 2)
<a name="l00328"></a>00328 new_allocated = <a class="code" href="group__DBusStringInternals.html#gff1c3814294a9db8ea968d159e8fd092">_DBUS_STRING_MAX_MAX_LENGTH</a> + _DBUS_STRING_ALLOCATION_PADDING;
<a name="l00329"></a>00329 <span class="keywordflow">else</span>
<a name="l00330"></a>00330 new_allocated = real-><a class="code" href="structDBusRealString.html#e12ec58c271e47f3f89fae1410b7c5e5">allocated</a> * 2;
<a name="l00331"></a>00331
<a name="l00332"></a>00332 <span class="comment">/* if you change the code just above here, run the tests without</span>
<a name="l00333"></a>00333 <span class="comment"> * the following assert-only hack before you commit</span>
<a name="l00334"></a>00334 <span class="comment"> */</span>
<a name="l00335"></a>00335 <span class="comment">/* This is keyed off asserts in addition to tests so when you</span>
<a name="l00336"></a>00336 <span class="comment"> * disable asserts to profile, you don't get this destroyer</span>
<a name="l00337"></a>00337 <span class="comment"> * of profiles.</span>
<a name="l00338"></a>00338 <span class="comment"> */</span>
<a name="l00339"></a>00339 <span class="preprocessor">#ifdef DBUS_DISABLE_ASSERT</span>
<a name="l00340"></a>00340 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00341"></a>00341 <span class="preprocessor"></span><span class="preprocessor">#ifdef DBUS_BUILD_TESTS</span>
<a name="l00342"></a>00342 <span class="preprocessor"></span> new_allocated = 0; <span class="comment">/* ensure a realloc every time so that we go</span>
<a name="l00343"></a>00343 <span class="comment"> * through all malloc failure codepaths</span>
<a name="l00344"></a>00344 <span class="comment"> */</span>
<a name="l00345"></a>00345 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_BUILD_TESTS */</span>
<a name="l00346"></a>00346 <span class="preprocessor">#endif </span><span class="comment">/* !DBUS_DISABLE_ASSERT */</span>
<a name="l00347"></a>00347
<a name="l00348"></a>00348 <span class="comment">/* But be sure we always alloc at least space for the new length */</span>
<a name="l00349"></a>00349 new_allocated = MAX (new_allocated,
<a name="l00350"></a>00350 new_length + _DBUS_STRING_ALLOCATION_PADDING);
<a name="l00351"></a>00351
<a name="l00352"></a>00352 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (new_allocated >= real-><a class="code" href="structDBusRealString.html#e12ec58c271e47f3f89fae1410b7c5e5">allocated</a>); <span class="comment">/* code relies on this */</span>
<a name="l00353"></a>00353 new_str = <a class="code" href="group__DBusMemory.html#g621d9ba15ea8ae44501b0fbf756cbeac">dbus_realloc</a> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> - real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a>, new_allocated);
<a name="l00354"></a>00354 <span class="keywordflow">if</span> (_DBUS_UNLIKELY (new_str == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>))
<a name="l00355"></a>00355 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00356"></a>00356
<a name="l00357"></a>00357 real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> = new_str + real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a>;
<a name="l00358"></a>00358 real-><a class="code" href="structDBusRealString.html#e12ec58c271e47f3f89fae1410b7c5e5">allocated</a> = new_allocated;
<a name="l00359"></a>00359 fixup_alignment (real);
<a name="l00360"></a>00360
<a name="l00361"></a>00361 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00362"></a>00362 }
<a name="l00363"></a>00363
<a name="l00364"></a>00364 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00365"></a>00365 set_length (<a class="code" href="structDBusRealString.html">DBusRealString</a> *real,
<a name="l00366"></a>00366 <span class="keywordtype">int</span> new_length)
<a name="l00367"></a>00367 {
<a name="l00368"></a>00368 <span class="comment">/* Note, we are setting the length not including nul termination */</span>
<a name="l00369"></a>00369
<a name="l00370"></a>00370 <span class="comment">/* exceeding max length is the same as failure to allocate memory */</span>
<a name="l00371"></a>00371 <span class="keywordflow">if</span> (_DBUS_UNLIKELY (new_length > real-><a class="code" href="structDBusRealString.html#eb48dcb099660ffc277883166fa72159">max_length</a>))
<a name="l00372"></a>00372 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00373"></a>00373 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (new_length > (real-><a class="code" href="structDBusRealString.html#e12ec58c271e47f3f89fae1410b7c5e5">allocated</a> - _DBUS_STRING_ALLOCATION_PADDING) &&
<a name="l00374"></a>00374 _DBUS_UNLIKELY (!reallocate_for_length (real, new_length)))
<a name="l00375"></a>00375 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00376"></a>00376 <span class="keywordflow">else</span>
<a name="l00377"></a>00377 {
<a name="l00378"></a>00378 real->len = new_length;
<a name="l00379"></a>00379 real->str[new_length] = <span class="charliteral">'\0'</span>;
<a name="l00380"></a>00380 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00381"></a>00381 }
<a name="l00382"></a>00382 }
<a name="l00383"></a>00383
<a name="l00384"></a>00384 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00385"></a>00385 open_gap (<span class="keywordtype">int</span> len,
<a name="l00386"></a>00386 <a class="code" href="structDBusRealString.html">DBusRealString</a> *dest,
<a name="l00387"></a>00387 <span class="keywordtype">int</span> insert_at)
<a name="l00388"></a>00388 {
<a name="l00389"></a>00389 <span class="keywordflow">if</span> (len == 0)
<a name="l00390"></a>00390 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00391"></a>00391
<a name="l00392"></a>00392 <span class="keywordflow">if</span> (len > dest-><a class="code" href="structDBusRealString.html#eb48dcb099660ffc277883166fa72159">max_length</a> - dest-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>)
<a name="l00393"></a>00393 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>; <span class="comment">/* detected overflow of dest->len + len below */</span>
<a name="l00394"></a>00394
<a name="l00395"></a>00395 <span class="keywordflow">if</span> (!set_length (dest, dest-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> + len))
<a name="l00396"></a>00396 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00397"></a>00397
<a name="l00398"></a>00398 memmove (dest->str + insert_at + len,
<a name="l00399"></a>00399 dest->str + insert_at,
<a name="l00400"></a>00400 dest->len - len - insert_at);
<a name="l00401"></a>00401
<a name="l00402"></a>00402 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00403"></a>00403 }
<a name="l00404"></a>00404
<a name="l00405"></a>00405 <span class="preprocessor">#ifndef _dbus_string_get_data</span>
<a name="l00406"></a>00406 <span class="preprocessor"></span>
<a name="l00417"></a>00417 <span class="keywordtype">char</span>*
<a name="l00418"></a>00418 _dbus_string_get_data (<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l00419"></a>00419 {
<a name="l00420"></a>00420 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00421"></a>00421
<a name="l00422"></a>00422 <span class="keywordflow">return</span> (<span class="keywordtype">char</span>*) real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>;
<a name="l00423"></a>00423 }
<a name="l00424"></a>00424 <span class="preprocessor">#endif </span><span class="comment">/* _dbus_string_get_data */</span>
<a name="l00425"></a>00425
<a name="l00426"></a>00426 <span class="comment">/* only do the function if we don't have the macro */</span>
<a name="l00427"></a>00427 <span class="preprocessor">#ifndef _dbus_string_get_const_data</span>
<a name="l00428"></a>00428 <span class="preprocessor"></span>
<a name="l00434"></a>00434 <span class="keyword">const</span> <span class="keywordtype">char</span>*
<a name="l00435"></a>00435 _dbus_string_get_const_data (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l00436"></a>00436 {
<a name="l00437"></a>00437 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l00438"></a>00438
<a name="l00439"></a>00439 <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>*) real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>;
<a name="l00440"></a>00440 }
<a name="l00441"></a>00441 <span class="preprocessor">#endif </span><span class="comment">/* _dbus_string_get_const_data */</span>
<a name="l00442"></a>00442
<a name="l00456"></a>00456 <span class="keywordtype">char</span>*
<a name="l00457"></a><a class="code" href="group__DBusString.html#g7a73fb373398606e6e1d0a86c4587a3c">00457</a> <a class="code" href="group__DBusString.html#g7a73fb373398606e6e1d0a86c4587a3c">_dbus_string_get_data_len</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00458"></a>00458 <span class="keywordtype">int</span> start,
<a name="l00459"></a>00459 <span class="keywordtype">int</span> len)
<a name="l00460"></a>00460 {
<a name="l00461"></a>00461 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00462"></a>00462 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l00463"></a>00463 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len >= 0);
<a name="l00464"></a>00464 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l00465"></a>00465 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len <= real->len - start);
<a name="l00466"></a>00466
<a name="l00467"></a>00467 <span class="keywordflow">return</span> (<span class="keywordtype">char</span>*) real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + start;
<a name="l00468"></a>00468 }
<a name="l00469"></a>00469
<a name="l00470"></a>00470 <span class="comment">/* only do the function if we don't have the macro */</span>
<a name="l00471"></a>00471 <span class="preprocessor">#ifndef _dbus_string_get_const_data_len</span>
<a name="l00472"></a>00472 <span class="preprocessor"></span>
<a name="l00480"></a>00480 <span class="keyword">const</span> <span class="keywordtype">char</span>*
<a name="l00481"></a>00481 _dbus_string_get_const_data_len (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00482"></a>00482 <span class="keywordtype">int</span> start,
<a name="l00483"></a>00483 <span class="keywordtype">int</span> len)
<a name="l00484"></a>00484 {
<a name="l00485"></a>00485 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l00486"></a>00486 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l00487"></a>00487 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len >= 0);
<a name="l00488"></a>00488 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l00489"></a>00489 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len <= real->len - start);
<a name="l00490"></a>00490
<a name="l00491"></a>00491 <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>*) real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + start;
<a name="l00492"></a>00492 }
<a name="l00493"></a>00493 <span class="preprocessor">#endif </span><span class="comment">/* _dbus_string_get_const_data_len */</span>
<a name="l00494"></a>00494
<a name="l00495"></a>00495 <span class="comment">/* only do the function if we don't have the macro */</span>
<a name="l00496"></a>00496 <span class="preprocessor">#ifndef _dbus_string_set_byte</span>
<a name="l00497"></a>00497 <span class="preprocessor"></span>
<a name="l00504"></a>00504 <span class="keywordtype">void</span>
<a name="l00505"></a>00505 _dbus_string_set_byte (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00506"></a>00506 <span class="keywordtype">int</span> i,
<a name="l00507"></a>00507 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> byte)
<a name="l00508"></a>00508 {
<a name="l00509"></a>00509 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00510"></a>00510 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (i < real->len);
<a name="l00511"></a>00511 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (i >= 0);
<a name="l00512"></a>00512
<a name="l00513"></a>00513 real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[i] = byte;
<a name="l00514"></a>00514 }
<a name="l00515"></a>00515 <span class="preprocessor">#endif </span><span class="comment">/* _dbus_string_set_byte */</span>
<a name="l00516"></a>00516
<a name="l00517"></a>00517 <span class="comment">/* only have the function if we didn't create a macro */</span>
<a name="l00518"></a>00518 <span class="preprocessor">#ifndef _dbus_string_get_byte</span>
<a name="l00519"></a>00519 <span class="preprocessor"></span>
<a name="l00528"></a>00528 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>
<a name="l00529"></a>00529 _dbus_string_get_byte (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00530"></a>00530 <span class="keywordtype">int</span> start)
<a name="l00531"></a>00531 {
<a name="l00532"></a>00532 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l00533"></a>00533 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l00534"></a>00534 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l00535"></a>00535
<a name="l00536"></a>00536 <span class="keywordflow">return</span> real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[start];
<a name="l00537"></a>00537 }
<a name="l00538"></a>00538 <span class="preprocessor">#endif </span><span class="comment">/* _dbus_string_get_byte */</span>
<a name="l00539"></a>00539
<a name="l00550"></a>00550 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00551"></a><a class="code" href="group__DBusString.html#ga0964d662ad17c58eb044c1b153017a6">00551</a> <a class="code" href="group__DBusString.html#ga0964d662ad17c58eb044c1b153017a6">_dbus_string_insert_bytes</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00552"></a>00552 <span class="keywordtype">int</span> i,
<a name="l00553"></a>00553 <span class="keywordtype">int</span> n_bytes,
<a name="l00554"></a>00554 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> byte)
<a name="l00555"></a>00555 {
<a name="l00556"></a>00556 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00557"></a>00557 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (i <= real->len);
<a name="l00558"></a>00558 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (i >= 0);
<a name="l00559"></a>00559 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (n_bytes >= 0);
<a name="l00560"></a>00560
<a name="l00561"></a>00561 <span class="keywordflow">if</span> (n_bytes == 0)
<a name="l00562"></a>00562 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00563"></a>00563
<a name="l00564"></a>00564 <span class="keywordflow">if</span> (!open_gap (n_bytes, real, i))
<a name="l00565"></a>00565 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00566"></a>00566
<a name="l00567"></a>00567 memset (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + i, byte, n_bytes);
<a name="l00568"></a>00568
<a name="l00569"></a>00569 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00570"></a>00570 }
<a name="l00571"></a>00571
<a name="l00580"></a>00580 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00581"></a><a class="code" href="group__DBusString.html#gb0770800dce6df97e5d246105a44e7b4">00581</a> <a class="code" href="group__DBusString.html#gb0770800dce6df97e5d246105a44e7b4">_dbus_string_insert_byte</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00582"></a>00582 <span class="keywordtype">int</span> i,
<a name="l00583"></a>00583 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> byte)
<a name="l00584"></a>00584 {
<a name="l00585"></a>00585 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00586"></a>00586 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (i <= real->len);
<a name="l00587"></a>00587 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (i >= 0);
<a name="l00588"></a>00588
<a name="l00589"></a>00589 <span class="keywordflow">if</span> (!open_gap (1, real, i))
<a name="l00590"></a>00590 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00591"></a>00591
<a name="l00592"></a>00592 real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[i] = byte;
<a name="l00593"></a>00593
<a name="l00594"></a>00594 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00595"></a>00595 }
<a name="l00596"></a>00596
<a name="l00607"></a>00607 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00608"></a><a class="code" href="group__DBusString.html#g556cc30c3ab032dbc63e217119f0d1f5">00608</a> <a class="code" href="group__DBusString.html#g556cc30c3ab032dbc63e217119f0d1f5">_dbus_string_steal_data</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00609"></a>00609 <span class="keywordtype">char</span> **data_return)
<a name="l00610"></a>00610 {
<a name="l00611"></a>00611 <span class="keywordtype">int</span> old_max_length;
<a name="l00612"></a>00612 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00613"></a>00613 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (data_return != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00614"></a>00614
<a name="l00615"></a>00615 undo_alignment (real);
<a name="l00616"></a>00616
<a name="l00617"></a>00617 *data_return = (<span class="keywordtype">char</span>*) real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>;
<a name="l00618"></a>00618
<a name="l00619"></a>00619 old_max_length = real-><a class="code" href="structDBusRealString.html#eb48dcb099660ffc277883166fa72159">max_length</a>;
<a name="l00620"></a>00620
<a name="l00621"></a>00621 <span class="comment">/* reset the string */</span>
<a name="l00622"></a>00622 if (!<a class="code" href="group__DBusString.html#g348252317f7bb8ac43529972945830ae">_dbus_string_init</a> (str))
<a name="l00623"></a>00623 {
<a name="l00624"></a>00624 <span class="comment">/* hrm, put it back then */</span>
<a name="l00625"></a>00625 real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*) *data_return;
<a name="l00626"></a>00626 *data_return = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l00627"></a>00627 fixup_alignment (real);
<a name="l00628"></a>00628 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00629"></a>00629 }
<a name="l00630"></a>00630
<a name="l00631"></a>00631 real-><a class="code" href="structDBusRealString.html#eb48dcb099660ffc277883166fa72159">max_length</a> = old_max_length;
<a name="l00632"></a>00632
<a name="l00633"></a>00633 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00634"></a>00634 }
<a name="l00635"></a>00635
<a name="l00636"></a>00636 <span class="preprocessor">#ifdef DBUS_BUILD_TESTS</span>
<a name="l00637"></a>00637 <span class="preprocessor"></span>
<a name="l00652"></a>00652 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00653"></a>00653 _dbus_string_steal_data_len (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00654"></a>00654 <span class="keywordtype">char</span> **data_return,
<a name="l00655"></a>00655 <span class="keywordtype">int</span> start,
<a name="l00656"></a>00656 <span class="keywordtype">int</span> len)
<a name="l00657"></a>00657 {
<a name="l00658"></a>00658 <a class="code" href="structDBusString.html">DBusString</a> dest;
<a name="l00659"></a>00659 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00660"></a>00660 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (data_return != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00661"></a>00661 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l00662"></a>00662 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len >= 0);
<a name="l00663"></a>00663 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l00664"></a>00664 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len <= real->len - start);
<a name="l00665"></a>00665
<a name="l00666"></a>00666 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g348252317f7bb8ac43529972945830ae">_dbus_string_init</a> (&dest))
<a name="l00667"></a>00667 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00668"></a>00668
<a name="l00669"></a>00669 set_max_length (&dest, real-><a class="code" href="structDBusRealString.html#eb48dcb099660ffc277883166fa72159">max_length</a>);
<a name="l00670"></a>00670
<a name="l00671"></a>00671 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gb8e2dcb2dc71bf225da0827c6086a727">_dbus_string_move_len</a> (str, start, len, &dest, 0))
<a name="l00672"></a>00672 {
<a name="l00673"></a>00673 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&dest);
<a name="l00674"></a>00674 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00675"></a>00675 }
<a name="l00676"></a>00676
<a name="l00677"></a>00677 <a class="code" href="group__DBusInternalsUtils.html#gbea2c16d6d3fe7c4eb5b9496fc877f84">_dbus_warn</a> (<span class="stringliteral">"Broken code in _dbus_string_steal_data_len(), see @todo, FIXME\n"</span>);
<a name="l00678"></a>00678 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g556cc30c3ab032dbc63e217119f0d1f5">_dbus_string_steal_data</a> (&dest, data_return))
<a name="l00679"></a>00679 {
<a name="l00680"></a>00680 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&dest);
<a name="l00681"></a>00681 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00682"></a>00682 }
<a name="l00683"></a>00683
<a name="l00684"></a>00684 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&dest);
<a name="l00685"></a>00685 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00686"></a>00686 }
<a name="l00687"></a>00687 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_BUILD_TESTS */</span>
<a name="l00688"></a>00688
<a name="l00696"></a>00696 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00697"></a><a class="code" href="group__DBusString.html#g7e509d4f959d19d96f83250e62287b06">00697</a> <a class="code" href="group__DBusString.html#g7e509d4f959d19d96f83250e62287b06">_dbus_string_copy_data</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00698"></a>00698 <span class="keywordtype">char</span> **data_return)
<a name="l00699"></a>00699 {
<a name="l00700"></a>00700 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l00701"></a>00701 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (data_return != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00702"></a>00702
<a name="l00703"></a>00703 *data_return = <a class="code" href="group__DBusMemory.html#g0fff22bd7f055f5581a9898116a744b1">dbus_malloc</a> (real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> + 1);
<a name="l00704"></a>00704 <span class="keywordflow">if</span> (*data_return == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00705"></a>00705 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00706"></a>00706
<a name="l00707"></a>00707 memcpy (*data_return, real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>, real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> + 1);
<a name="l00708"></a>00708
<a name="l00709"></a>00709 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00710"></a>00710 }
<a name="l00711"></a>00711
<a name="l00720"></a>00720 <span class="keywordtype">void</span>
<a name="l00721"></a><a class="code" href="group__DBusString.html#gf97b18e419678dbf967d9b9ad1112ca6">00721</a> <a class="code" href="group__DBusString.html#gf97b18e419678dbf967d9b9ad1112ca6">_dbus_string_copy_to_buffer</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00722"></a>00722 <span class="keywordtype">char</span> *buffer,
<a name="l00723"></a>00723 <span class="keywordtype">int</span> avail_len)
<a name="l00724"></a>00724 {
<a name="l00725"></a>00725 <span class="keywordtype">int</span> copy_len;
<a name="l00726"></a>00726 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l00727"></a>00727
<a name="l00728"></a>00728 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (avail_len >= 0);
<a name="l00729"></a>00729
<a name="l00730"></a>00730 copy_len = MIN (avail_len, real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>+1);
<a name="l00731"></a>00731 memcpy (buffer, real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>, copy_len);
<a name="l00732"></a>00732 <span class="keywordflow">if</span> (avail_len > 0 && avail_len == copy_len)
<a name="l00733"></a>00733 buffer[avail_len-1] = <span class="charliteral">'\0'</span>;
<a name="l00734"></a>00734 }
<a name="l00735"></a>00735
<a name="l00736"></a>00736 <span class="preprocessor">#ifdef DBUS_BUILD_TESTS</span>
<a name="l00737"></a>00737 <span class="preprocessor"></span>
<a name="l00746"></a>00746 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00747"></a>00747 _dbus_string_copy_data_len (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00748"></a>00748 <span class="keywordtype">char</span> **data_return,
<a name="l00749"></a>00749 <span class="keywordtype">int</span> start,
<a name="l00750"></a>00750 <span class="keywordtype">int</span> len)
<a name="l00751"></a>00751 {
<a name="l00752"></a>00752 <a class="code" href="structDBusString.html">DBusString</a> dest;
<a name="l00753"></a>00753
<a name="l00754"></a>00754 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l00755"></a>00755 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (data_return != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00756"></a>00756 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l00757"></a>00757 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len >= 0);
<a name="l00758"></a>00758 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l00759"></a>00759 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len <= real->len - start);
<a name="l00760"></a>00760
<a name="l00761"></a>00761 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g348252317f7bb8ac43529972945830ae">_dbus_string_init</a> (&dest))
<a name="l00762"></a>00762 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00763"></a>00763
<a name="l00764"></a>00764 set_max_length (&dest, real-><a class="code" href="structDBusRealString.html#eb48dcb099660ffc277883166fa72159">max_length</a>);
<a name="l00765"></a>00765
<a name="l00766"></a>00766 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gf5f13bc7ac7a623516930d26ae2589bf">_dbus_string_copy_len</a> (str, start, len, &dest, 0))
<a name="l00767"></a>00767 {
<a name="l00768"></a>00768 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&dest);
<a name="l00769"></a>00769 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00770"></a>00770 }
<a name="l00771"></a>00771
<a name="l00772"></a>00772 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g556cc30c3ab032dbc63e217119f0d1f5">_dbus_string_steal_data</a> (&dest, data_return))
<a name="l00773"></a>00773 {
<a name="l00774"></a>00774 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&dest);
<a name="l00775"></a>00775 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00776"></a>00776 }
<a name="l00777"></a>00777
<a name="l00778"></a>00778 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&dest);
<a name="l00779"></a>00779 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00780"></a>00780 }
<a name="l00781"></a>00781 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_BUILD_TESTS */</span>
<a name="l00782"></a>00782
<a name="l00783"></a>00783 <span class="comment">/* Only have the function if we don't have the macro */</span>
<a name="l00784"></a>00784 <span class="preprocessor">#ifndef _dbus_string_get_length</span>
<a name="l00785"></a>00785 <span class="preprocessor"></span>
<a name="l00790"></a>00790 <span class="keywordtype">int</span>
<a name="l00791"></a>00791 _dbus_string_get_length (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l00792"></a>00792 {
<a name="l00793"></a>00793 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l00794"></a>00794
<a name="l00795"></a>00795 <span class="keywordflow">return</span> real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>;
<a name="l00796"></a>00796 }
<a name="l00797"></a>00797 <span class="preprocessor">#endif </span><span class="comment">/* !_dbus_string_get_length */</span>
<a name="l00798"></a>00798
<a name="l00811"></a>00811 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00812"></a><a class="code" href="group__DBusString.html#g8f13997d90ceed2f437706e6b7804d9b">00812</a> <a class="code" href="group__DBusString.html#g8f13997d90ceed2f437706e6b7804d9b">_dbus_string_lengthen</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00813"></a>00813 <span class="keywordtype">int</span> additional_length)
<a name="l00814"></a>00814 {
<a name="l00815"></a>00815 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00816"></a>00816 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (additional_length >= 0);
<a name="l00817"></a>00817
<a name="l00818"></a>00818 <span class="keywordflow">if</span> (_DBUS_UNLIKELY (additional_length > real-><a class="code" href="structDBusRealString.html#eb48dcb099660ffc277883166fa72159">max_length</a> - real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>))
<a name="l00819"></a>00819 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>; <span class="comment">/* would overflow */</span>
<a name="l00820"></a>00820
<a name="l00821"></a>00821 <span class="keywordflow">return</span> set_length (real,
<a name="l00822"></a>00822 real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> + additional_length);
<a name="l00823"></a>00823 }
<a name="l00824"></a>00824
<a name="l00831"></a>00831 <span class="keywordtype">void</span>
<a name="l00832"></a><a class="code" href="group__DBusString.html#g7af1cbfa905f26d972ab644d890548b8">00832</a> <a class="code" href="group__DBusString.html#g7af1cbfa905f26d972ab644d890548b8">_dbus_string_shorten</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00833"></a>00833 <span class="keywordtype">int</span> length_to_remove)
<a name="l00834"></a>00834 {
<a name="l00835"></a>00835 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00836"></a>00836 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (length_to_remove >= 0);
<a name="l00837"></a>00837 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (length_to_remove <= real->len);
<a name="l00838"></a>00838
<a name="l00839"></a>00839 set_length (real,
<a name="l00840"></a>00840 real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> - length_to_remove);
<a name="l00841"></a>00841 }
<a name="l00842"></a>00842
<a name="l00853"></a>00853 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00854"></a><a class="code" href="group__DBusString.html#g08c423b93c28dd746dcb93e0461ab95c">00854</a> <a class="code" href="group__DBusString.html#g08c423b93c28dd746dcb93e0461ab95c">_dbus_string_set_length</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00855"></a>00855 <span class="keywordtype">int</span> length)
<a name="l00856"></a>00856 {
<a name="l00857"></a>00857 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00858"></a>00858 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (length >= 0);
<a name="l00859"></a>00859
<a name="l00860"></a>00860 <span class="keywordflow">return</span> set_length (real, length);
<a name="l00861"></a>00861 }
<a name="l00862"></a>00862
<a name="l00863"></a>00863 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00864"></a>00864 align_insert_point_then_open_gap (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00865"></a>00865 <span class="keywordtype">int</span> *insert_at_p,
<a name="l00866"></a>00866 <span class="keywordtype">int</span> alignment,
<a name="l00867"></a>00867 <span class="keywordtype">int</span> gap_size)
<a name="l00868"></a>00868 {
<a name="l00869"></a>00869 <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="l00870"></a>00870 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> gap_pos;
<a name="l00871"></a>00871 <span class="keywordtype">int</span> insert_at;
<a name="l00872"></a>00872 <span class="keywordtype">int</span> delta;
<a name="l00873"></a>00873 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00874"></a>00874 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (alignment >= 1);
<a name="l00875"></a>00875 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (alignment <= 8); <span class="comment">/* it has to be a bug if > 8 */</span>
<a name="l00876"></a>00876
<a name="l00877"></a>00877 insert_at = *insert_at_p;
<a name="l00878"></a>00878
<a name="l00879"></a>00879 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (insert_at <= real->len);
<a name="l00880"></a>00880
<a name="l00881"></a>00881 gap_pos = _DBUS_ALIGN_VALUE (insert_at, alignment);
<a name="l00882"></a>00882 new_len = real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> + (gap_pos - insert_at) + gap_size;
<a name="l00883"></a>00883
<a name="l00884"></a>00884 <span class="keywordflow">if</span> (_DBUS_UNLIKELY (new_len > (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) real-><a class="code" href="structDBusRealString.html#eb48dcb099660ffc277883166fa72159">max_length</a>))
<a name="l00885"></a>00885 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00886"></a>00886
<a name="l00887"></a>00887 delta = new_len - real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>;
<a name="l00888"></a>00888 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (delta >= 0);
<a name="l00889"></a>00889
<a name="l00890"></a>00890 <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="l00891"></a>00891 {
<a name="l00892"></a>00892 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) *insert_at_p) == gap_pos);
<a name="l00893"></a>00893 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00894"></a>00894 }
<a name="l00895"></a>00895
<a name="l00896"></a>00896 <span class="keywordflow">if</span> (_DBUS_UNLIKELY (!open_gap (new_len - real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>,
<a name="l00897"></a>00897 real, insert_at)))
<a name="l00898"></a>00898 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00899"></a>00899
<a name="l00900"></a>00900 <span class="comment">/* nul the padding if we had to add any padding */</span>
<a name="l00901"></a>00901 <span class="keywordflow">if</span> (gap_size < delta)
<a name="l00902"></a>00902 {
<a name="l00903"></a>00903 memset (&real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[insert_at], <span class="charliteral">'\0'</span>,
<a name="l00904"></a>00904 gap_pos - insert_at);
<a name="l00905"></a>00905 }
<a name="l00906"></a>00906
<a name="l00907"></a>00907 *insert_at_p = gap_pos;
<a name="l00908"></a>00908
<a name="l00909"></a>00909 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00910"></a>00910 }
<a name="l00911"></a>00911
<a name="l00912"></a>00912 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00913"></a>00913 align_length_then_lengthen (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00914"></a>00914 <span class="keywordtype">int</span> alignment,
<a name="l00915"></a>00915 <span class="keywordtype">int</span> then_lengthen_by)
<a name="l00916"></a>00916 {
<a name="l00917"></a>00917 <span class="keywordtype">int</span> insert_at;
<a name="l00918"></a>00918
<a name="l00919"></a>00919 insert_at = _dbus_string_get_length (str);
<a name="l00920"></a>00920
<a name="l00921"></a>00921 <span class="keywordflow">return</span> align_insert_point_then_open_gap (str,
<a name="l00922"></a>00922 &insert_at,
<a name="l00923"></a>00923 alignment, then_lengthen_by);
<a name="l00924"></a>00924 }
<a name="l00925"></a>00925
<a name="l00934"></a>00934 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00935"></a><a class="code" href="group__DBusString.html#geadfb67c4e796131610499c91d0d7813">00935</a> <a class="code" href="group__DBusString.html#geadfb67c4e796131610499c91d0d7813">_dbus_string_align_length</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00936"></a>00936 <span class="keywordtype">int</span> alignment)
<a name="l00937"></a>00937 {
<a name="l00938"></a>00938 <span class="keywordflow">return</span> align_length_then_lengthen (str, alignment, 0);
<a name="l00939"></a>00939 }
<a name="l00940"></a>00940
<a name="l00950"></a>00950 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00951"></a><a class="code" href="group__DBusString.html#g4764e75c464356408fc1a12df93177c1">00951</a> <a class="code" href="group__DBusString.html#g4764e75c464356408fc1a12df93177c1">_dbus_string_alloc_space</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00952"></a>00952 <span class="keywordtype">int</span> extra_bytes)
<a name="l00953"></a>00953 {
<a name="l00954"></a>00954 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g8f13997d90ceed2f437706e6b7804d9b">_dbus_string_lengthen</a> (str, extra_bytes))
<a name="l00955"></a>00955 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00956"></a>00956 <a class="code" href="group__DBusString.html#g7af1cbfa905f26d972ab644d890548b8">_dbus_string_shorten</a> (str, extra_bytes);
<a name="l00957"></a>00957
<a name="l00958"></a>00958 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00959"></a>00959 }
<a name="l00960"></a>00960
<a name="l00961"></a>00961 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00962"></a>00962 append (<a class="code" href="structDBusRealString.html">DBusRealString</a> *real,
<a name="l00963"></a>00963 <span class="keyword">const</span> <span class="keywordtype">char</span> *buffer,
<a name="l00964"></a>00964 <span class="keywordtype">int</span> buffer_len)
<a name="l00965"></a>00965 {
<a name="l00966"></a>00966 <span class="keywordflow">if</span> (buffer_len == 0)
<a name="l00967"></a>00967 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00968"></a>00968
<a name="l00969"></a>00969 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g8f13997d90ceed2f437706e6b7804d9b">_dbus_string_lengthen</a> ((<a class="code" href="structDBusString.html">DBusString</a>*)real, buffer_len))
<a name="l00970"></a>00970 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00971"></a>00971
<a name="l00972"></a>00972 memcpy (real->str + (real->len - buffer_len),
<a name="l00973"></a>00973 buffer,
<a name="l00974"></a>00974 buffer_len);
<a name="l00975"></a>00975
<a name="l00976"></a>00976 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00977"></a>00977 }
<a name="l00978"></a>00978
<a name="l00986"></a>00986 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00987"></a><a class="code" href="group__DBusString.html#g100c5ce0696822c5a4cfbdfaba674d96">00987</a> <a class="code" href="group__DBusString.html#g100c5ce0696822c5a4cfbdfaba674d96">_dbus_string_append</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l00988"></a>00988 <span class="keyword">const</span> <span class="keywordtype">char</span> *buffer)
<a name="l00989"></a>00989 {
<a name="l00990"></a>00990 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> buffer_len;
<a name="l00991"></a>00991
<a name="l00992"></a>00992 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l00993"></a>00993 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (buffer != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00994"></a>00994
<a name="l00995"></a>00995 buffer_len = strlen (buffer);
<a name="l00996"></a>00996 <span class="keywordflow">if</span> (buffer_len > (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) real-><a class="code" href="structDBusRealString.html#eb48dcb099660ffc277883166fa72159">max_length</a>)
<a name="l00997"></a>00997 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00998"></a>00998
<a name="l00999"></a>00999 <span class="keywordflow">return</span> append (real, buffer, buffer_len);
<a name="l01000"></a>01000 }
<a name="l01001"></a>01001
<a name="l01003"></a><a class="code" href="group__DBusString.html#g4661e2b10dd3da080564b1191acb7619">01003</a> <span class="preprocessor">#define ASSIGN_2_OCTETS(p, octets) \</span>
<a name="l01004"></a>01004 <span class="preprocessor"> *((dbus_uint16_t*)(p)) = *((dbus_uint16_t*)(octets));</span>
<a name="l01005"></a>01005 <span class="preprocessor"></span>
<a name="l01007"></a><a class="code" href="group__DBusString.html#ge777c8fb39aef558604506d645af6420">01007</a> <span class="preprocessor">#define ASSIGN_4_OCTETS(p, octets) \</span>
<a name="l01008"></a>01008 <span class="preprocessor"> *((dbus_uint32_t*)(p)) = *((dbus_uint32_t*)(octets));</span>
<a name="l01009"></a>01009 <span class="preprocessor"></span>
<a name="l01010"></a>01010 <span class="preprocessor">#ifdef DBUS_HAVE_INT64</span>
<a name="l01011"></a>01011 <span class="preprocessor"></span>
<a name="l01012"></a><a class="code" href="group__DBusString.html#gd13077c6ef8f8b764611ef5ad23b4b8b">01012</a> <span class="preprocessor">#define ASSIGN_8_OCTETS(p, octets) \</span>
<a name="l01013"></a>01013 <span class="preprocessor"> *((dbus_uint64_t*)(p)) = *((dbus_uint64_t*)(octets));</span>
<a name="l01014"></a>01014 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l01015"></a>01015 <span class="preprocessor"></span>
<a name="l01016"></a>01016 <span class="preprocessor">#define ASSIGN_8_OCTETS(p, octets) \</span>
<a name="l01017"></a>01017 <span class="preprocessor">do { \</span>
<a name="l01018"></a>01018 <span class="preprocessor"> unsigned char *b; \</span>
<a name="l01019"></a>01019 <span class="preprocessor"> \</span>
<a name="l01020"></a>01020 <span class="preprocessor"> b = p; \</span>
<a name="l01021"></a>01021 <span class="preprocessor"> \</span>
<a name="l01022"></a>01022 <span class="preprocessor"> *b++ = octets[0]; \</span>
<a name="l01023"></a>01023 <span class="preprocessor"> *b++ = octets[1]; \</span>
<a name="l01024"></a>01024 <span class="preprocessor"> *b++ = octets[2]; \</span>
<a name="l01025"></a>01025 <span class="preprocessor"> *b++ = octets[3]; \</span>
<a name="l01026"></a>01026 <span class="preprocessor"> *b++ = octets[4]; \</span>
<a name="l01027"></a>01027 <span class="preprocessor"> *b++ = octets[5]; \</span>
<a name="l01028"></a>01028 <span class="preprocessor"> *b++ = octets[6]; \</span>
<a name="l01029"></a>01029 <span class="preprocessor"> *b++ = octets[7]; \</span>
<a name="l01030"></a>01030 <span class="preprocessor"> _dbus_assert (b == p + 8); \</span>
<a name="l01031"></a>01031 <span class="preprocessor">} while (0)</span>
<a name="l01032"></a>01032 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* DBUS_HAVE_INT64 */</span>
<a name="l01033"></a>01033
<a name="l01034"></a>01034 <span class="preprocessor">#ifdef DBUS_BUILD_TESTS</span>
<a name="l01035"></a>01035 <span class="preprocessor"></span>
<a name="l01043"></a>01043 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01044"></a>01044 _dbus_string_append_4_aligned (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01045"></a>01045 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> octets[4])
<a name="l01046"></a>01046 {
<a name="l01047"></a>01047 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01048"></a>01048
<a name="l01049"></a>01049 <span class="keywordflow">if</span> (!align_length_then_lengthen (str, 4, 4))
<a name="l01050"></a>01050 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01051"></a>01051
<a name="l01052"></a>01052 <a class="code" href="group__DBusString.html#ge777c8fb39aef558604506d645af6420">ASSIGN_4_OCTETS</a> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + (real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> - 4), octets);
<a name="l01053"></a>01053
<a name="l01054"></a>01054 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01055"></a>01055 }
<a name="l01056"></a>01056 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_BUILD_TESTS */</span>
<a name="l01057"></a>01057
<a name="l01058"></a>01058 <span class="preprocessor">#ifdef DBUS_BUILD_TESTS</span>
<a name="l01059"></a>01059 <span class="preprocessor"></span>
<a name="l01067"></a>01067 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01068"></a>01068 _dbus_string_append_8_aligned (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01069"></a>01069 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> octets[8])
<a name="l01070"></a>01070 {
<a name="l01071"></a>01071 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01072"></a>01072
<a name="l01073"></a>01073 <span class="keywordflow">if</span> (!align_length_then_lengthen (str, 8, 8))
<a name="l01074"></a>01074 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01075"></a>01075
<a name="l01076"></a>01076 <a class="code" href="group__DBusString.html#gd13077c6ef8f8b764611ef5ad23b4b8b">ASSIGN_8_OCTETS</a> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + (real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> - 8), octets);
<a name="l01077"></a>01077
<a name="l01078"></a>01078 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01079"></a>01079 }
<a name="l01080"></a>01080 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_BUILD_TESTS */</span>
<a name="l01081"></a>01081
<a name="l01091"></a>01091 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01092"></a><a class="code" href="group__DBusString.html#gc33cd9f66e1dc665f92f0478b3170e23">01092</a> <a class="code" href="group__DBusString.html#gc33cd9f66e1dc665f92f0478b3170e23">_dbus_string_insert_2_aligned</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01093"></a>01093 <span class="keywordtype">int</span> insert_at,
<a name="l01094"></a>01094 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> octets[4])
<a name="l01095"></a>01095 {
<a name="l01096"></a>01096 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01097"></a>01097
<a name="l01098"></a>01098 <span class="keywordflow">if</span> (!align_insert_point_then_open_gap (str, &insert_at, 2, 2))
<a name="l01099"></a>01099 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01100"></a>01100
<a name="l01101"></a>01101 <a class="code" href="group__DBusString.html#g4661e2b10dd3da080564b1191acb7619">ASSIGN_2_OCTETS</a> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + insert_at, octets);
<a name="l01102"></a>01102
<a name="l01103"></a>01103 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01104"></a>01104 }
<a name="l01105"></a>01105
<a name="l01115"></a>01115 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01116"></a><a class="code" href="group__DBusString.html#gdd296cf1e6af18cb5bec438e9d353b4e">01116</a> <a class="code" href="group__DBusString.html#gdd296cf1e6af18cb5bec438e9d353b4e">_dbus_string_insert_4_aligned</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01117"></a>01117 <span class="keywordtype">int</span> insert_at,
<a name="l01118"></a>01118 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> octets[4])
<a name="l01119"></a>01119 {
<a name="l01120"></a>01120 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01121"></a>01121
<a name="l01122"></a>01122 <span class="keywordflow">if</span> (!align_insert_point_then_open_gap (str, &insert_at, 4, 4))
<a name="l01123"></a>01123 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01124"></a>01124
<a name="l01125"></a>01125 <a class="code" href="group__DBusString.html#ge777c8fb39aef558604506d645af6420">ASSIGN_4_OCTETS</a> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + insert_at, octets);
<a name="l01126"></a>01126
<a name="l01127"></a>01127 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01128"></a>01128 }
<a name="l01129"></a>01129
<a name="l01139"></a>01139 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01140"></a><a class="code" href="group__DBusString.html#g108d7d64fb88fffca31e33181cefa232">01140</a> <a class="code" href="group__DBusString.html#g108d7d64fb88fffca31e33181cefa232">_dbus_string_insert_8_aligned</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01141"></a>01141 <span class="keywordtype">int</span> insert_at,
<a name="l01142"></a>01142 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> octets[8])
<a name="l01143"></a>01143 {
<a name="l01144"></a>01144 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01145"></a>01145
<a name="l01146"></a>01146 <span class="keywordflow">if</span> (!align_insert_point_then_open_gap (str, &insert_at, 8, 8))
<a name="l01147"></a>01147 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01148"></a>01148
<a name="l01149"></a>01149 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (_DBUS_ALIGN_VALUE (insert_at, 8) == (<span class="keywordtype">unsigned</span>) insert_at);
<a name="l01150"></a>01150
<a name="l01151"></a>01151 <a class="code" href="group__DBusString.html#gd13077c6ef8f8b764611ef5ad23b4b8b">ASSIGN_8_OCTETS</a> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + insert_at, octets);
<a name="l01152"></a>01152
<a name="l01153"></a>01153 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01154"></a>01154 }
<a name="l01155"></a>01155
<a name="l01156"></a>01156
<a name="l01167"></a>01167 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01168"></a><a class="code" href="group__DBusString.html#g267217e412c74c74dc3a3e412da5c600">01168</a> <a class="code" href="group__DBusString.html#g267217e412c74c74dc3a3e412da5c600">_dbus_string_insert_alignment</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01169"></a>01169 <span class="keywordtype">int</span> *insert_at,
<a name="l01170"></a>01170 <span class="keywordtype">int</span> alignment)
<a name="l01171"></a>01171 {
<a name="l01172"></a>01172 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01173"></a>01173
<a name="l01174"></a>01174 <span class="keywordflow">if</span> (!align_insert_point_then_open_gap (str, insert_at, alignment, 0))
<a name="l01175"></a>01175 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01176"></a>01176
<a name="l01177"></a>01177 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (_DBUS_ALIGN_VALUE (*insert_at, alignment) == (<span class="keywordtype">unsigned</span>) *insert_at);
<a name="l01178"></a>01178
<a name="l01179"></a>01179 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01180"></a>01180 }
<a name="l01181"></a>01181
<a name="l01191"></a>01191 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01192"></a><a class="code" href="group__DBusString.html#g8d794f292831d1a7edeb971b13a2c641">01192</a> <a class="code" href="group__DBusString.html#g8d794f292831d1a7edeb971b13a2c641">_dbus_string_append_printf_valist</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01193"></a>01193 <span class="keyword">const</span> <span class="keywordtype">char</span> *format,
<a name="l01194"></a>01194 va_list args)
<a name="l01195"></a>01195 {
<a name="l01196"></a>01196 <span class="keywordtype">int</span> len;
<a name="l01197"></a>01197 va_list args_copy;
<a name="l01198"></a>01198
<a name="l01199"></a>01199 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01200"></a>01200
<a name="l01201"></a>01201 DBUS_VA_COPY (args_copy, args);
<a name="l01202"></a>01202
<a name="l01203"></a>01203 <span class="comment">/* Measure the message length without terminating nul */</span>
<a name="l01204"></a>01204 len = <a class="code" href="group__DBusSysdeps.html#gffaf8b5bb832c20a8ccb10f012920776">_dbus_printf_string_upper_bound</a> (format, args);
<a name="l01205"></a>01205
<a name="l01206"></a>01206 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g8f13997d90ceed2f437706e6b7804d9b">_dbus_string_lengthen</a> (str, len))
<a name="l01207"></a>01207 {
<a name="l01208"></a>01208 <span class="comment">/* don't leak the copy */</span>
<a name="l01209"></a>01209 va_end (args_copy);
<a name="l01210"></a>01210 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01211"></a>01211 }
<a name="l01212"></a>01212
<a name="l01213"></a>01213 vsprintf ((<span class="keywordtype">char</span>*) (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + (real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> - len)),
<a name="l01214"></a>01214 format, args_copy);
<a name="l01215"></a>01215
<a name="l01216"></a>01216 va_end (args_copy);
<a name="l01217"></a>01217
<a name="l01218"></a>01218 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01219"></a>01219 }
<a name="l01220"></a>01220
<a name="l01229"></a>01229 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01230"></a><a class="code" href="group__DBusString.html#gb0078cf7e0e5bd784ec6d6e0cc3923a2">01230</a> <a class="code" href="group__DBusString.html#gb0078cf7e0e5bd784ec6d6e0cc3923a2">_dbus_string_append_printf</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01231"></a>01231 <span class="keyword">const</span> <span class="keywordtype">char</span> *format,
<a name="l01232"></a>01232 ...)
<a name="l01233"></a>01233 {
<a name="l01234"></a>01234 va_list args;
<a name="l01235"></a>01235 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l01236"></a>01236
<a name="l01237"></a>01237 va_start (args, format);
<a name="l01238"></a>01238 retval = <a class="code" href="group__DBusString.html#g8d794f292831d1a7edeb971b13a2c641">_dbus_string_append_printf_valist</a> (str, format, args);
<a name="l01239"></a>01239 va_end (args);
<a name="l01240"></a>01240
<a name="l01241"></a>01241 <span class="keywordflow">return</span> retval;
<a name="l01242"></a>01242 }
<a name="l01243"></a>01243
<a name="l01252"></a>01252 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01253"></a><a class="code" href="group__DBusString.html#g724656b7091b910965bd1af42d0b7bab">01253</a> <a class="code" href="group__DBusString.html#g724656b7091b910965bd1af42d0b7bab">_dbus_string_append_len</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01254"></a>01254 <span class="keyword">const</span> <span class="keywordtype">char</span> *buffer,
<a name="l01255"></a>01255 <span class="keywordtype">int</span> len)
<a name="l01256"></a>01256 {
<a name="l01257"></a>01257 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01258"></a>01258 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (buffer != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01259"></a>01259 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len >= 0);
<a name="l01260"></a>01260
<a name="l01261"></a>01261 <span class="keywordflow">return</span> append (real, buffer, len);
<a name="l01262"></a>01262 }
<a name="l01263"></a>01263
<a name="l01272"></a>01272 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01273"></a><a class="code" href="group__DBusString.html#ga6ecf36e70263659f921a4ef0335db12">01273</a> <a class="code" href="group__DBusString.html#ga6ecf36e70263659f921a4ef0335db12">_dbus_string_append_byte</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01274"></a>01274 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> byte)
<a name="l01275"></a>01275 {
<a name="l01276"></a>01276 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01277"></a>01277
<a name="l01278"></a>01278 <span class="keywordflow">if</span> (!set_length (real, real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> + 1))
<a name="l01279"></a>01279 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01280"></a>01280
<a name="l01281"></a>01281 real->str[real->len-1] = byte;
<a name="l01282"></a>01282
<a name="l01283"></a>01283 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01284"></a>01284 }
<a name="l01285"></a>01285
<a name="l01286"></a>01286 <span class="preprocessor">#ifdef DBUS_BUILD_TESTS</span>
<a name="l01287"></a>01287 <span class="preprocessor"></span>
<a name="l01294"></a>01294 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01295"></a>01295 _dbus_string_append_unichar (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01296"></a>01296 dbus_unichar_t ch)
<a name="l01297"></a>01297 {
<a name="l01298"></a>01298 <span class="keywordtype">int</span> len;
<a name="l01299"></a>01299 <span class="keywordtype">int</span> first;
<a name="l01300"></a>01300 <span class="keywordtype">int</span> i;
<a name="l01301"></a>01301 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *out;
<a name="l01302"></a>01302
<a name="l01303"></a>01303 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01304"></a>01304
<a name="l01305"></a>01305 <span class="comment">/* this code is from GLib but is pretty standard I think */</span>
<a name="l01306"></a>01306
<a name="l01307"></a>01307 len = 0;
<a name="l01308"></a>01308
<a name="l01309"></a>01309 <span class="keywordflow">if</span> (ch < 0x80)
<a name="l01310"></a>01310 {
<a name="l01311"></a>01311 first = 0;
<a name="l01312"></a>01312 len = 1;
<a name="l01313"></a>01313 }
<a name="l01314"></a>01314 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ch < 0x800)
<a name="l01315"></a>01315 {
<a name="l01316"></a>01316 first = 0xc0;
<a name="l01317"></a>01317 len = 2;
<a name="l01318"></a>01318 }
<a name="l01319"></a>01319 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ch < 0x10000)
<a name="l01320"></a>01320 {
<a name="l01321"></a>01321 first = 0xe0;
<a name="l01322"></a>01322 len = 3;
<a name="l01323"></a>01323 }
<a name="l01324"></a>01324 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ch < 0x200000)
<a name="l01325"></a>01325 {
<a name="l01326"></a>01326 first = 0xf0;
<a name="l01327"></a>01327 len = 4;
<a name="l01328"></a>01328 }
<a name="l01329"></a>01329 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ch < 0x4000000)
<a name="l01330"></a>01330 {
<a name="l01331"></a>01331 first = 0xf8;
<a name="l01332"></a>01332 len = 5;
<a name="l01333"></a>01333 }
<a name="l01334"></a>01334 <span class="keywordflow">else</span>
<a name="l01335"></a>01335 {
<a name="l01336"></a>01336 first = 0xfc;
<a name="l01337"></a>01337 len = 6;
<a name="l01338"></a>01338 }
<a name="l01339"></a>01339
<a name="l01340"></a>01340 <span class="keywordflow">if</span> (len > (real-><a class="code" href="structDBusRealString.html#eb48dcb099660ffc277883166fa72159">max_length</a> - real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>))
<a name="l01341"></a>01341 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>; <span class="comment">/* real->len + len would overflow */</span>
<a name="l01342"></a>01342
<a name="l01343"></a>01343 <span class="keywordflow">if</span> (!set_length (real, real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> + len))
<a name="l01344"></a>01344 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01345"></a>01345
<a name="l01346"></a>01346 out = real->str + (real->len - len);
<a name="l01347"></a>01347
<a name="l01348"></a>01348 <span class="keywordflow">for</span> (i = len - 1; i > 0; --i)
<a name="l01349"></a>01349 {
<a name="l01350"></a>01350 out[i] = (ch & 0x3f) | 0x80;
<a name="l01351"></a>01351 ch >>= 6;
<a name="l01352"></a>01352 }
<a name="l01353"></a>01353 out[0] = ch | first;
<a name="l01354"></a>01354
<a name="l01355"></a>01355 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01356"></a>01356 }
<a name="l01357"></a>01357 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_BUILD_TESTS */</span>
<a name="l01358"></a>01358
<a name="l01359"></a>01359 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l01360"></a>01360 <span class="keyword">delete</span> (<a class="code" href="structDBusRealString.html">DBusRealString</a> *real,
<a name="l01361"></a>01361 <span class="keywordtype">int</span> start,
<a name="l01362"></a>01362 <span class="keywordtype">int</span> len)
<a name="l01363"></a>01363 {
<a name="l01364"></a>01364 <span class="keywordflow">if</span> (len == 0)
<a name="l01365"></a>01365 <span class="keywordflow">return</span>;
<a name="l01366"></a>01366
<a name="l01367"></a>01367 memmove (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + start, real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + start + len, real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> - (start + len));
<a name="l01368"></a>01368 real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> -= len;
<a name="l01369"></a>01369 real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>] = <span class="charliteral">'\0'</span>;
<a name="l01370"></a>01370 }
<a name="l01371"></a>01371
<a name="l01381"></a>01381 <span class="keywordtype">void</span>
<a name="l01382"></a><a class="code" href="group__DBusString.html#g7e0e164ad5bb094e5ccad9edc7ae4235">01382</a> <a class="code" href="group__DBusString.html#g7e0e164ad5bb094e5ccad9edc7ae4235">_dbus_string_delete</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01383"></a>01383 <span class="keywordtype">int</span> start,
<a name="l01384"></a>01384 <span class="keywordtype">int</span> len)
<a name="l01385"></a>01385 {
<a name="l01386"></a>01386 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l01387"></a>01387 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l01388"></a>01388 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len >= 0);
<a name="l01389"></a>01389 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l01390"></a>01390 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len <= real->len - start);
<a name="l01391"></a>01391
<a name="l01392"></a>01392 <span class="keyword">delete</span> (real, start, len);
<a name="l01393"></a>01393 }
<a name="l01394"></a>01394
<a name="l01395"></a>01395 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01396"></a>01396 copy (<a class="code" href="structDBusRealString.html">DBusRealString</a> *source,
<a name="l01397"></a>01397 <span class="keywordtype">int</span> start,
<a name="l01398"></a>01398 <span class="keywordtype">int</span> len,
<a name="l01399"></a>01399 <a class="code" href="structDBusRealString.html">DBusRealString</a> *dest,
<a name="l01400"></a>01400 <span class="keywordtype">int</span> insert_at)
<a name="l01401"></a>01401 {
<a name="l01402"></a>01402 <span class="keywordflow">if</span> (len == 0)
<a name="l01403"></a>01403 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01404"></a>01404
<a name="l01405"></a>01405 <span class="keywordflow">if</span> (!open_gap (len, dest, insert_at))
<a name="l01406"></a>01406 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01407"></a>01407
<a name="l01408"></a>01408 memmove (dest-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + insert_at,
<a name="l01409"></a>01409 source-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + start,
<a name="l01410"></a>01410 len);
<a name="l01411"></a>01411
<a name="l01412"></a>01412 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01413"></a>01413 }
<a name="l01414"></a>01414
<a name="l01424"></a><a class="code" href="group__DBusString.html#gacbbd102b66aa34dd13f792e7f08c205">01424</a> <span class="preprocessor">#define DBUS_STRING_COPY_PREAMBLE(source, start, dest, insert_at) \</span>
<a name="l01425"></a>01425 <span class="preprocessor"> DBusRealString *real_source = (DBusRealString*) source; \</span>
<a name="l01426"></a>01426 <span class="preprocessor"> DBusRealString *real_dest = (DBusRealString*) dest; \</span>
<a name="l01427"></a>01427 <span class="preprocessor"> _dbus_assert ((source) != (dest)); \</span>
<a name="l01428"></a>01428 <span class="preprocessor"> DBUS_GENERIC_STRING_PREAMBLE (real_source); \</span>
<a name="l01429"></a>01429 <span class="preprocessor"> DBUS_GENERIC_STRING_PREAMBLE (real_dest); \</span>
<a name="l01430"></a>01430 <span class="preprocessor"> _dbus_assert (!real_dest->constant); \</span>
<a name="l01431"></a>01431 <span class="preprocessor"> _dbus_assert (!real_dest->locked); \</span>
<a name="l01432"></a>01432 <span class="preprocessor"> _dbus_assert ((start) >= 0); \</span>
<a name="l01433"></a>01433 <span class="preprocessor"> _dbus_assert ((start) <= real_source->len); \</span>
<a name="l01434"></a>01434 <span class="preprocessor"> _dbus_assert ((insert_at) >= 0); \</span>
<a name="l01435"></a>01435 <span class="preprocessor"> _dbus_assert ((insert_at) <= real_dest->len)</span>
<a name="l01436"></a>01436 <span class="preprocessor"></span>
<a name="l01447"></a>01447 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01448"></a><a class="code" href="group__DBusString.html#gd379fce8d4ef4f7e28f81f50b46ee4c9">01448</a> <a class="code" href="group__DBusString.html#gd379fce8d4ef4f7e28f81f50b46ee4c9">_dbus_string_move</a> (<a class="code" href="structDBusString.html">DBusString</a> *source,
<a name="l01449"></a>01449 <span class="keywordtype">int</span> start,
<a name="l01450"></a>01450 <a class="code" href="structDBusString.html">DBusString</a> *dest,
<a name="l01451"></a>01451 <span class="keywordtype">int</span> insert_at)
<a name="l01452"></a>01452 {
<a name="l01453"></a>01453 <a class="code" href="structDBusRealString.html">DBusRealString</a> *real_source = (<a class="code" href="structDBusRealString.html">DBusRealString</a>*) source;
<a name="l01454"></a>01454 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real_source->len);
<a name="l01455"></a>01455
<a name="l01456"></a>01456 <span class="keywordflow">return</span> <a class="code" href="group__DBusString.html#gb8e2dcb2dc71bf225da0827c6086a727">_dbus_string_move_len</a> (source, start,
<a name="l01457"></a>01457 real_source-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> - start,
<a name="l01458"></a>01458 dest, insert_at);
<a name="l01459"></a>01459 }
<a name="l01460"></a>01460
<a name="l01471"></a>01471 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01472"></a><a class="code" href="group__DBusString.html#g3c10f0d1bcaa3b450025b9c6a8b901d7">01472</a> <a class="code" href="group__DBusString.html#g3c10f0d1bcaa3b450025b9c6a8b901d7">_dbus_string_copy</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *source,
<a name="l01473"></a>01473 <span class="keywordtype">int</span> start,
<a name="l01474"></a>01474 <a class="code" href="structDBusString.html">DBusString</a> *dest,
<a name="l01475"></a>01475 <span class="keywordtype">int</span> insert_at)
<a name="l01476"></a>01476 {
<a name="l01477"></a>01477 <a class="code" href="group__DBusString.html#gacbbd102b66aa34dd13f792e7f08c205">DBUS_STRING_COPY_PREAMBLE</a> (source, start, dest, insert_at);
<a name="l01478"></a>01478
<a name="l01479"></a>01479 <span class="keywordflow">return</span> copy (real_source, start,
<a name="l01480"></a>01480 real_source->len - start,
<a name="l01481"></a>01481 real_dest,
<a name="l01482"></a>01482 insert_at);
<a name="l01483"></a>01483 }
<a name="l01484"></a>01484
<a name="l01499"></a>01499 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01500"></a><a class="code" href="group__DBusString.html#gb8e2dcb2dc71bf225da0827c6086a727">01500</a> <a class="code" href="group__DBusString.html#gb8e2dcb2dc71bf225da0827c6086a727">_dbus_string_move_len</a> (<a class="code" href="structDBusString.html">DBusString</a> *source,
<a name="l01501"></a>01501 <span class="keywordtype">int</span> start,
<a name="l01502"></a>01502 <span class="keywordtype">int</span> len,
<a name="l01503"></a>01503 <a class="code" href="structDBusString.html">DBusString</a> *dest,
<a name="l01504"></a>01504 <span class="keywordtype">int</span> insert_at)
<a name="l01505"></a>01505
<a name="l01506"></a>01506 {
<a name="l01507"></a>01507 <a class="code" href="group__DBusString.html#gacbbd102b66aa34dd13f792e7f08c205">DBUS_STRING_COPY_PREAMBLE</a> (source, start, dest, insert_at);
<a name="l01508"></a>01508 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len >= 0);
<a name="l01509"></a>01509 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> ((start + len) <= real_source->len);
<a name="l01510"></a>01510
<a name="l01511"></a>01511
<a name="l01512"></a>01512 <span class="keywordflow">if</span> (len == 0)
<a name="l01513"></a>01513 {
<a name="l01514"></a>01514 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01515"></a>01515 }
<a name="l01516"></a>01516 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (start == 0 &&
<a name="l01517"></a>01517 len == real_source->len &&
<a name="l01518"></a>01518 real_dest->len == 0)
<a name="l01519"></a>01519 {
<a name="l01520"></a>01520 <span class="comment">/* Short-circuit moving an entire existing string to an empty string</span>
<a name="l01521"></a>01521 <span class="comment"> * by just swapping the buffers.</span>
<a name="l01522"></a>01522 <span class="comment"> */</span>
<a name="l01523"></a>01523 <span class="comment">/* we assume ->constant doesn't matter as you can't have</span>
<a name="l01524"></a>01524 <span class="comment"> * a constant string involved in a move.</span>
<a name="l01525"></a>01525 <span class="comment"> */</span>
<a name="l01526"></a>01526 <span class="preprocessor">#define ASSIGN_DATA(a, b) do { \</span>
<a name="l01527"></a>01527 <span class="preprocessor"> (a)->str = (b)->str; \</span>
<a name="l01528"></a>01528 <span class="preprocessor"> (a)->len = (b)->len; \</span>
<a name="l01529"></a>01529 <span class="preprocessor"> (a)->allocated = (b)->allocated; \</span>
<a name="l01530"></a>01530 <span class="preprocessor"> (a)->align_offset = (b)->align_offset; \</span>
<a name="l01531"></a>01531 <span class="preprocessor"> } while (0)</span>
<a name="l01532"></a>01532 <span class="preprocessor"></span>
<a name="l01533"></a>01533 <a class="code" href="structDBusRealString.html">DBusRealString</a> tmp;
<a name="l01534"></a>01534
<a name="l01535"></a>01535 ASSIGN_DATA (&tmp, real_source);
<a name="l01536"></a>01536 ASSIGN_DATA (real_source, real_dest);
<a name="l01537"></a>01537 ASSIGN_DATA (real_dest, &tmp);
<a name="l01538"></a>01538
<a name="l01539"></a>01539 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01540"></a>01540 }
<a name="l01541"></a>01541 <span class="keywordflow">else</span>
<a name="l01542"></a>01542 {
<a name="l01543"></a>01543 <span class="keywordflow">if</span> (!copy (real_source, start, len,
<a name="l01544"></a>01544 real_dest,
<a name="l01545"></a>01545 insert_at))
<a name="l01546"></a>01546 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01547"></a>01547
<a name="l01548"></a>01548 <span class="keyword">delete</span> (real_source, start,
<a name="l01549"></a>01549 len);
<a name="l01550"></a>01550
<a name="l01551"></a>01551 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01552"></a>01552 }
<a name="l01553"></a>01553 }
<a name="l01554"></a>01554
<a name="l01566"></a>01566 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01567"></a><a class="code" href="group__DBusString.html#gf5f13bc7ac7a623516930d26ae2589bf">01567</a> <a class="code" href="group__DBusString.html#gf5f13bc7ac7a623516930d26ae2589bf">_dbus_string_copy_len</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *source,
<a name="l01568"></a>01568 <span class="keywordtype">int</span> start,
<a name="l01569"></a>01569 <span class="keywordtype">int</span> len,
<a name="l01570"></a>01570 <a class="code" href="structDBusString.html">DBusString</a> *dest,
<a name="l01571"></a>01571 <span class="keywordtype">int</span> insert_at)
<a name="l01572"></a>01572 {
<a name="l01573"></a>01573 <a class="code" href="group__DBusString.html#gacbbd102b66aa34dd13f792e7f08c205">DBUS_STRING_COPY_PREAMBLE</a> (source, start, dest, insert_at);
<a name="l01574"></a>01574 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len >= 0);
<a name="l01575"></a>01575 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real_source->len);
<a name="l01576"></a>01576 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len <= real_source->len - start);
<a name="l01577"></a>01577
<a name="l01578"></a>01578 <span class="keywordflow">return</span> copy (real_source, start, len,
<a name="l01579"></a>01579 real_dest,
<a name="l01580"></a>01580 insert_at);
<a name="l01581"></a>01581 }
<a name="l01582"></a>01582
<a name="l01604"></a>01604 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01605"></a><a class="code" href="group__DBusString.html#gfe7921a92467cdefaa0a7829d6cf260b">01605</a> <a class="code" href="group__DBusString.html#gfe7921a92467cdefaa0a7829d6cf260b">_dbus_string_replace_len</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *source,
<a name="l01606"></a>01606 <span class="keywordtype">int</span> start,
<a name="l01607"></a>01607 <span class="keywordtype">int</span> len,
<a name="l01608"></a>01608 <a class="code" href="structDBusString.html">DBusString</a> *dest,
<a name="l01609"></a>01609 <span class="keywordtype">int</span> replace_at,
<a name="l01610"></a>01610 <span class="keywordtype">int</span> replace_len)
<a name="l01611"></a>01611 {
<a name="l01612"></a>01612 <a class="code" href="group__DBusString.html#gacbbd102b66aa34dd13f792e7f08c205">DBUS_STRING_COPY_PREAMBLE</a> (source, start, dest, replace_at);
<a name="l01613"></a>01613 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len >= 0);
<a name="l01614"></a>01614 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real_source->len);
<a name="l01615"></a>01615 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len <= real_source->len - start);
<a name="l01616"></a>01616 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (replace_at >= 0);
<a name="l01617"></a>01617 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (replace_at <= real_dest->len);
<a name="l01618"></a>01618 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (replace_len <= real_dest->len - replace_at);
<a name="l01619"></a>01619
<a name="l01620"></a>01620 <span class="keywordflow">if</span> (!copy (real_source, start, len,
<a name="l01621"></a>01621 real_dest, replace_at))
<a name="l01622"></a>01622 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01623"></a>01623
<a name="l01624"></a>01624 <span class="keyword">delete</span> (real_dest, replace_at + len, replace_len);
<a name="l01625"></a>01625
<a name="l01626"></a>01626 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01627"></a>01627 }
<a name="l01628"></a>01628
<a name="l01629"></a>01629 <span class="comment">/* Unicode macros and utf8_validate() from GLib Owen Taylor, Havoc</span>
<a name="l01630"></a>01630 <span class="comment"> * Pennington, and Tom Tromey are the authors and authorized relicense.</span>
<a name="l01631"></a>01631 <span class="comment"> */</span>
<a name="l01632"></a>01632
<a name="l01638"></a><a class="code" href="group__DBusString.html#g30614080229a4fb63460ffdc8ab484fb">01638</a> <span class="preprocessor">#define UTF8_COMPUTE(Char, Mask, Len) \</span>
<a name="l01639"></a>01639 <span class="preprocessor"> if (Char < 128) \</span>
<a name="l01640"></a>01640 <span class="preprocessor"> { \</span>
<a name="l01641"></a>01641 <span class="preprocessor"> Len = 1; \</span>
<a name="l01642"></a>01642 <span class="preprocessor"> Mask = 0x7f; \</span>
<a name="l01643"></a>01643 <span class="preprocessor"> } \</span>
<a name="l01644"></a>01644 <span class="preprocessor"> else if ((Char & 0xe0) == 0xc0) \</span>
<a name="l01645"></a>01645 <span class="preprocessor"> { \</span>
<a name="l01646"></a>01646 <span class="preprocessor"> Len = 2; \</span>
<a name="l01647"></a>01647 <span class="preprocessor"> Mask = 0x1f; \</span>
<a name="l01648"></a>01648 <span class="preprocessor"> } \</span>
<a name="l01649"></a>01649 <span class="preprocessor"> else if ((Char & 0xf0) == 0xe0) \</span>
<a name="l01650"></a>01650 <span class="preprocessor"> { \</span>
<a name="l01651"></a>01651 <span class="preprocessor"> Len = 3; \</span>
<a name="l01652"></a>01652 <span class="preprocessor"> Mask = 0x0f; \</span>
<a name="l01653"></a>01653 <span class="preprocessor"> } \</span>
<a name="l01654"></a>01654 <span class="preprocessor"> else if ((Char & 0xf8) == 0xf0) \</span>
<a name="l01655"></a>01655 <span class="preprocessor"> { \</span>
<a name="l01656"></a>01656 <span class="preprocessor"> Len = 4; \</span>
<a name="l01657"></a>01657 <span class="preprocessor"> Mask = 0x07; \</span>
<a name="l01658"></a>01658 <span class="preprocessor"> } \</span>
<a name="l01659"></a>01659 <span class="preprocessor"> else if ((Char & 0xfc) == 0xf8) \</span>
<a name="l01660"></a>01660 <span class="preprocessor"> { \</span>
<a name="l01661"></a>01661 <span class="preprocessor"> Len = 5; \</span>
<a name="l01662"></a>01662 <span class="preprocessor"> Mask = 0x03; \</span>
<a name="l01663"></a>01663 <span class="preprocessor"> } \</span>
<a name="l01664"></a>01664 <span class="preprocessor"> else if ((Char & 0xfe) == 0xfc) \</span>
<a name="l01665"></a>01665 <span class="preprocessor"> { \</span>
<a name="l01666"></a>01666 <span class="preprocessor"> Len = 6; \</span>
<a name="l01667"></a>01667 <span class="preprocessor"> Mask = 0x01; \</span>
<a name="l01668"></a>01668 <span class="preprocessor"> } \</span>
<a name="l01669"></a>01669 <span class="preprocessor"> else \</span>
<a name="l01670"></a>01670 <span class="preprocessor"> { \</span>
<a name="l01671"></a>01671 <span class="preprocessor"> Len = 0; \</span>
<a name="l01672"></a>01672 <span class="preprocessor"> Mask = 0; \</span>
<a name="l01673"></a>01673 <span class="preprocessor"> }</span>
<a name="l01674"></a>01674 <span class="preprocessor"></span>
<a name="l01679"></a><a class="code" href="group__DBusString.html#g9691ff5386e218870299de1d9e77ceea">01679</a> <span class="preprocessor">#define UTF8_LENGTH(Char) \</span>
<a name="l01680"></a>01680 <span class="preprocessor"> ((Char) < 0x80 ? 1 : \</span>
<a name="l01681"></a>01681 <span class="preprocessor"> ((Char) < 0x800 ? 2 : \</span>
<a name="l01682"></a>01682 <span class="preprocessor"> ((Char) < 0x10000 ? 3 : \</span>
<a name="l01683"></a>01683 <span class="preprocessor"> ((Char) < 0x200000 ? 4 : \</span>
<a name="l01684"></a>01684 <span class="preprocessor"> ((Char) < 0x4000000 ? 5 : 6)))))</span>
<a name="l01685"></a>01685 <span class="preprocessor"></span>
<a name="l01695"></a><a class="code" href="group__DBusString.html#gb5b4b316a69f78611a14e6b1fd091992">01695</a> <span class="preprocessor">#define UTF8_GET(Result, Chars, Count, Mask, Len) \</span>
<a name="l01696"></a>01696 <span class="preprocessor"> (Result) = (Chars)[0] & (Mask); \</span>
<a name="l01697"></a>01697 <span class="preprocessor"> for ((Count) = 1; (Count) < (Len); ++(Count)) \</span>
<a name="l01698"></a>01698 <span class="preprocessor"> { \</span>
<a name="l01699"></a>01699 <span class="preprocessor"> if (((Chars)[(Count)] & 0xc0) != 0x80) \</span>
<a name="l01700"></a>01700 <span class="preprocessor"> { \</span>
<a name="l01701"></a>01701 <span class="preprocessor"> (Result) = -1; \</span>
<a name="l01702"></a>01702 <span class="preprocessor"> break; \</span>
<a name="l01703"></a>01703 <span class="preprocessor"> } \</span>
<a name="l01704"></a>01704 <span class="preprocessor"> (Result) <<= 6; \</span>
<a name="l01705"></a>01705 <span class="preprocessor"> (Result) |= ((Chars)[(Count)] & 0x3f); \</span>
<a name="l01706"></a>01706 <span class="preprocessor"> }</span>
<a name="l01707"></a>01707 <span class="preprocessor"></span>
<a name="l01713"></a><a class="code" href="group__DBusString.html#g25f0a93fc023fa0eec07ac1e32011e89">01713</a> <span class="preprocessor">#define UNICODE_VALID(Char) \</span>
<a name="l01714"></a>01714 <span class="preprocessor"> ((Char) < 0x110000 && \</span>
<a name="l01715"></a>01715 <span class="preprocessor"> (((Char) & 0xFFFFF800) != 0xD800) && \</span>
<a name="l01716"></a>01716 <span class="preprocessor"> ((Char) < 0xFDD0 || (Char) > 0xFDEF) && \</span>
<a name="l01717"></a>01717 <span class="preprocessor"> ((Char) & 0xFFFF) != 0xFFFF)</span>
<a name="l01718"></a>01718 <span class="preprocessor"></span>
<a name="l01719"></a>01719 <span class="preprocessor">#ifdef DBUS_BUILD_TESTS</span>
<a name="l01720"></a>01720 <span class="preprocessor"></span>
<a name="l01730"></a>01730 <span class="keywordtype">void</span>
<a name="l01731"></a>01731 _dbus_string_get_unichar (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01732"></a>01732 <span class="keywordtype">int</span> start,
<a name="l01733"></a>01733 dbus_unichar_t *ch_return,
<a name="l01734"></a>01734 <span class="keywordtype">int</span> *end_return)
<a name="l01735"></a>01735 {
<a name="l01736"></a>01736 <span class="keywordtype">int</span> i, mask, len;
<a name="l01737"></a>01737 dbus_unichar_t result;
<a name="l01738"></a>01738 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c;
<a name="l01739"></a>01739 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *p;
<a name="l01740"></a>01740 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l01741"></a>01741 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l01742"></a>01742 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l01743"></a>01743
<a name="l01744"></a>01744 <span class="keywordflow">if</span> (ch_return)
<a name="l01745"></a>01745 *ch_return = 0;
<a name="l01746"></a>01746 <span class="keywordflow">if</span> (end_return)
<a name="l01747"></a>01747 *end_return = real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>;
<a name="l01748"></a>01748
<a name="l01749"></a>01749 mask = 0;
<a name="l01750"></a>01750 p = real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + start;
<a name="l01751"></a>01751 c = *p;
<a name="l01752"></a>01752
<a name="l01753"></a>01753 <a class="code" href="group__DBusString.html#g30614080229a4fb63460ffdc8ab484fb">UTF8_COMPUTE</a> (c, mask, len);
<a name="l01754"></a>01754 <span class="keywordflow">if</span> (len == 0)
<a name="l01755"></a>01755 <span class="keywordflow">return</span>;
<a name="l01756"></a>01756 <a class="code" href="group__DBusString.html#gb5b4b316a69f78611a14e6b1fd091992">UTF8_GET</a> (result, p, i, mask, len);
<a name="l01757"></a>01757
<a name="l01758"></a>01758 <span class="keywordflow">if</span> (result == (dbus_unichar_t)-1)
<a name="l01759"></a>01759 <span class="keywordflow">return</span>;
<a name="l01760"></a>01760
<a name="l01761"></a>01761 <span class="keywordflow">if</span> (ch_return)
<a name="l01762"></a>01762 *ch_return = result;
<a name="l01763"></a>01763 <span class="keywordflow">if</span> (end_return)
<a name="l01764"></a>01764 *end_return = start + len;
<a name="l01765"></a>01765 }
<a name="l01766"></a>01766 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_BUILD_TESTS */</span>
<a name="l01767"></a>01767
<a name="l01782"></a>01782 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01783"></a><a class="code" href="group__DBusString.html#g5fe47873b2838339107c3e1f03d1a703">01783</a> <a class="code" href="group__DBusString.html#g5fe47873b2838339107c3e1f03d1a703">_dbus_string_find</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01784"></a>01784 <span class="keywordtype">int</span> start,
<a name="l01785"></a>01785 <span class="keyword">const</span> <span class="keywordtype">char</span> *substr,
<a name="l01786"></a>01786 <span class="keywordtype">int</span> *found)
<a name="l01787"></a>01787 {
<a name="l01788"></a>01788 <span class="keywordflow">return</span> <a class="code" href="group__DBusString.html#gf2281731c3119f946726680242a5ae02">_dbus_string_find_to</a> (str, start,
<a name="l01789"></a>01789 ((<span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a>*)str)->len,
<a name="l01790"></a>01790 substr, found);
<a name="l01791"></a>01791 }
<a name="l01792"></a>01792
<a name="l01805"></a>01805 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01806"></a><a class="code" href="group__DBusString.html#g3c98d1913e3ba4deb8eda60b2e262fdb">01806</a> <a class="code" href="group__DBusString.html#g3c98d1913e3ba4deb8eda60b2e262fdb">_dbus_string_find_eol</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01807"></a>01807 <span class="keywordtype">int</span> start,
<a name="l01808"></a>01808 <span class="keywordtype">int</span> *found,
<a name="l01809"></a>01809 <span class="keywordtype">int</span> *found_len)
<a name="l01810"></a>01810 {
<a name="l01811"></a>01811 <span class="keywordtype">int</span> i;
<a name="l01812"></a>01812
<a name="l01813"></a>01813 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l01814"></a>01814 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l01815"></a>01815 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l01816"></a>01816
<a name="l01817"></a>01817 i = start;
<a name="l01818"></a>01818 <span class="keywordflow">while</span> (i < real->len)
<a name="l01819"></a>01819 {
<a name="l01820"></a>01820 <span class="keywordflow">if</span> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[i] == <span class="charliteral">'\r'</span>)
<a name="l01821"></a>01821 {
<a name="l01822"></a>01822 <span class="keywordflow">if</span> ((i+1) < real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> && real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[i+1] == <span class="charliteral">'\n'</span>) <span class="comment">/* "\r\n" */</span>
<a name="l01823"></a>01823 {
<a name="l01824"></a>01824 <span class="keywordflow">if</span> (found)
<a name="l01825"></a>01825 *found = i;
<a name="l01826"></a>01826 <span class="keywordflow">if</span> (found_len)
<a name="l01827"></a>01827 *found_len = 2;
<a name="l01828"></a>01828 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01829"></a>01829 }
<a name="l01830"></a>01830 <span class="keywordflow">else</span> <span class="comment">/* only "\r" */</span>
<a name="l01831"></a>01831 {
<a name="l01832"></a>01832 <span class="keywordflow">if</span> (found)
<a name="l01833"></a>01833 *found = i;
<a name="l01834"></a>01834 <span class="keywordflow">if</span> (found_len)
<a name="l01835"></a>01835 *found_len = 1;
<a name="l01836"></a>01836 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01837"></a>01837 }
<a name="l01838"></a>01838 }
<a name="l01839"></a>01839 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[i] == <span class="charliteral">'\n'</span>) <span class="comment">/* only "\n" */</span>
<a name="l01840"></a>01840 {
<a name="l01841"></a>01841 <span class="keywordflow">if</span> (found)
<a name="l01842"></a>01842 *found = i;
<a name="l01843"></a>01843 <span class="keywordflow">if</span> (found_len)
<a name="l01844"></a>01844 *found_len = 1;
<a name="l01845"></a>01845 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01846"></a>01846 }
<a name="l01847"></a>01847 ++i;
<a name="l01848"></a>01848 }
<a name="l01849"></a>01849
<a name="l01850"></a>01850 <span class="keywordflow">if</span> (found)
<a name="l01851"></a>01851 *found = real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>;
<a name="l01852"></a>01852
<a name="l01853"></a>01853 <span class="keywordflow">if</span> (found_len)
<a name="l01854"></a>01854 *found_len = 0;
<a name="l01855"></a>01855
<a name="l01856"></a>01856 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01857"></a>01857 }
<a name="l01858"></a>01858
<a name="l01875"></a>01875 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01876"></a><a class="code" href="group__DBusString.html#gf2281731c3119f946726680242a5ae02">01876</a> <a class="code" href="group__DBusString.html#gf2281731c3119f946726680242a5ae02">_dbus_string_find_to</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01877"></a>01877 <span class="keywordtype">int</span> start,
<a name="l01878"></a>01878 <span class="keywordtype">int</span> end,
<a name="l01879"></a>01879 <span class="keyword">const</span> <span class="keywordtype">char</span> *substr,
<a name="l01880"></a>01880 <span class="keywordtype">int</span> *found)
<a name="l01881"></a>01881 {
<a name="l01882"></a>01882 <span class="keywordtype">int</span> i;
<a name="l01883"></a>01883 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l01884"></a>01884 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (substr != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01885"></a>01885 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l01886"></a>01886 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l01887"></a>01887 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (substr != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01888"></a>01888 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (end <= real->len);
<a name="l01889"></a>01889 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= end);
<a name="l01890"></a>01890
<a name="l01891"></a>01891 <span class="comment">/* we always "find" an empty string */</span>
<a name="l01892"></a>01892 <span class="keywordflow">if</span> (*substr == <span class="charliteral">'\0'</span>)
<a name="l01893"></a>01893 {
<a name="l01894"></a>01894 <span class="keywordflow">if</span> (found)
<a name="l01895"></a>01895 *found = start;
<a name="l01896"></a>01896 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01897"></a>01897 }
<a name="l01898"></a>01898
<a name="l01899"></a>01899 i = start;
<a name="l01900"></a>01900 <span class="keywordflow">while</span> (i < end)
<a name="l01901"></a>01901 {
<a name="l01902"></a>01902 <span class="keywordflow">if</span> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[i] == substr[0])
<a name="l01903"></a>01903 {
<a name="l01904"></a>01904 <span class="keywordtype">int</span> j = i + 1;
<a name="l01905"></a>01905
<a name="l01906"></a>01906 <span class="keywordflow">while</span> (j < end)
<a name="l01907"></a>01907 {
<a name="l01908"></a>01908 <span class="keywordflow">if</span> (substr[j - i] == <span class="charliteral">'\0'</span>)
<a name="l01909"></a>01909 <span class="keywordflow">break</span>;
<a name="l01910"></a>01910 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[j] != substr[j - i])
<a name="l01911"></a>01911 <span class="keywordflow">break</span>;
<a name="l01912"></a>01912
<a name="l01913"></a>01913 ++j;
<a name="l01914"></a>01914 }
<a name="l01915"></a>01915
<a name="l01916"></a>01916 <span class="keywordflow">if</span> (substr[j - i] == <span class="charliteral">'\0'</span>)
<a name="l01917"></a>01917 {
<a name="l01918"></a>01918 <span class="keywordflow">if</span> (found)
<a name="l01919"></a>01919 *found = i;
<a name="l01920"></a>01920 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01921"></a>01921 }
<a name="l01922"></a>01922 }
<a name="l01923"></a>01923
<a name="l01924"></a>01924 ++i;
<a name="l01925"></a>01925 }
<a name="l01926"></a>01926
<a name="l01927"></a>01927 <span class="keywordflow">if</span> (found)
<a name="l01928"></a>01928 *found = end;
<a name="l01929"></a>01929
<a name="l01930"></a>01930 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01931"></a>01931 }
<a name="l01932"></a>01932
<a name="l01943"></a>01943 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01944"></a><a class="code" href="group__DBusString.html#g677ddb4246c7e7f67ed3145dc3c1c96b">01944</a> <a class="code" href="group__DBusString.html#g677ddb4246c7e7f67ed3145dc3c1c96b">_dbus_string_find_blank</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01945"></a>01945 <span class="keywordtype">int</span> start,
<a name="l01946"></a>01946 <span class="keywordtype">int</span> *found)
<a name="l01947"></a>01947 {
<a name="l01948"></a>01948 <span class="keywordtype">int</span> i;
<a name="l01949"></a>01949 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l01950"></a>01950 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l01951"></a>01951 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l01952"></a>01952
<a name="l01953"></a>01953 i = start;
<a name="l01954"></a>01954 <span class="keywordflow">while</span> (i < real->len)
<a name="l01955"></a>01955 {
<a name="l01956"></a>01956 <span class="keywordflow">if</span> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[i] == <span class="charliteral">' '</span> ||
<a name="l01957"></a>01957 real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[i] == <span class="charliteral">'\t'</span>)
<a name="l01958"></a>01958 {
<a name="l01959"></a>01959 <span class="keywordflow">if</span> (found)
<a name="l01960"></a>01960 *found = i;
<a name="l01961"></a>01961 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01962"></a>01962 }
<a name="l01963"></a>01963
<a name="l01964"></a>01964 ++i;
<a name="l01965"></a>01965 }
<a name="l01966"></a>01966
<a name="l01967"></a>01967 <span class="keywordflow">if</span> (found)
<a name="l01968"></a>01968 *found = real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>;
<a name="l01969"></a>01969
<a name="l01970"></a>01970 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01971"></a>01971 }
<a name="l01972"></a>01972
<a name="l01981"></a>01981 <span class="keywordtype">void</span>
<a name="l01982"></a><a class="code" href="group__DBusString.html#g5698b163289be0066cf10c0f1caf877a">01982</a> <a class="code" href="group__DBusString.html#g5698b163289be0066cf10c0f1caf877a">_dbus_string_skip_blank</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l01983"></a>01983 <span class="keywordtype">int</span> start,
<a name="l01984"></a>01984 <span class="keywordtype">int</span> *end)
<a name="l01985"></a>01985 {
<a name="l01986"></a>01986 <span class="keywordtype">int</span> i;
<a name="l01987"></a>01987 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l01988"></a>01988 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l01989"></a>01989 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l01990"></a>01990
<a name="l01991"></a>01991 i = start;
<a name="l01992"></a>01992 <span class="keywordflow">while</span> (i < real->len)
<a name="l01993"></a>01993 {
<a name="l01994"></a>01994 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusStringInternals.html#g8f488964e430c0ae6a1a4204e0098dfe">DBUS_IS_ASCII_BLANK</a> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[i]))
<a name="l01995"></a>01995 <span class="keywordflow">break</span>;
<a name="l01996"></a>01996
<a name="l01997"></a>01997 ++i;
<a name="l01998"></a>01998 }
<a name="l01999"></a>01999
<a name="l02000"></a>02000 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (i == real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> || !<a class="code" href="group__DBusStringInternals.html#g9c88845804be152df28b81d7cad5673a">DBUS_IS_ASCII_WHITE</a> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[i]));
<a name="l02001"></a>02001
<a name="l02002"></a>02002 <span class="keywordflow">if</span> (end)
<a name="l02003"></a>02003 *end = i;
<a name="l02004"></a>02004 }
<a name="l02005"></a>02005
<a name="l02006"></a>02006
<a name="l02015"></a>02015 <span class="keywordtype">void</span>
<a name="l02016"></a><a class="code" href="group__DBusString.html#g8600259d71a4adc14ab4558a9d2a0f7d">02016</a> <a class="code" href="group__DBusString.html#g8600259d71a4adc14ab4558a9d2a0f7d">_dbus_string_skip_white</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l02017"></a>02017 <span class="keywordtype">int</span> start,
<a name="l02018"></a>02018 <span class="keywordtype">int</span> *end)
<a name="l02019"></a>02019 {
<a name="l02020"></a>02020 <span class="keywordtype">int</span> i;
<a name="l02021"></a>02021 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l02022"></a>02022 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l02023"></a>02023 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l02024"></a>02024
<a name="l02025"></a>02025 i = start;
<a name="l02026"></a>02026 <span class="keywordflow">while</span> (i < real->len)
<a name="l02027"></a>02027 {
<a name="l02028"></a>02028 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusStringInternals.html#g9c88845804be152df28b81d7cad5673a">DBUS_IS_ASCII_WHITE</a> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[i]))
<a name="l02029"></a>02029 <span class="keywordflow">break</span>;
<a name="l02030"></a>02030
<a name="l02031"></a>02031 ++i;
<a name="l02032"></a>02032 }
<a name="l02033"></a>02033
<a name="l02034"></a>02034 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (i == real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> || !(<a class="code" href="group__DBusStringInternals.html#g9c88845804be152df28b81d7cad5673a">DBUS_IS_ASCII_WHITE</a> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[i])));
<a name="l02035"></a>02035
<a name="l02036"></a>02036 <span class="keywordflow">if</span> (end)
<a name="l02037"></a>02037 *end = i;
<a name="l02038"></a>02038 }
<a name="l02039"></a>02039
<a name="l02048"></a>02048 <span class="keywordtype">void</span>
<a name="l02049"></a><a class="code" href="group__DBusString.html#g578bb88acec5520825f2ba792cad7938">02049</a> <a class="code" href="group__DBusString.html#g578bb88acec5520825f2ba792cad7938">_dbus_string_skip_white_reverse</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l02050"></a>02050 <span class="keywordtype">int</span> end,
<a name="l02051"></a>02051 <span class="keywordtype">int</span> *start)
<a name="l02052"></a>02052 {
<a name="l02053"></a>02053 <span class="keywordtype">int</span> i;
<a name="l02054"></a>02054 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l02055"></a>02055 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (end <= real->len);
<a name="l02056"></a>02056 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (end >= 0);
<a name="l02057"></a>02057
<a name="l02058"></a>02058 i = end;
<a name="l02059"></a>02059 <span class="keywordflow">while</span> (i > 0)
<a name="l02060"></a>02060 {
<a name="l02061"></a>02061 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusStringInternals.html#g9c88845804be152df28b81d7cad5673a">DBUS_IS_ASCII_WHITE</a> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[i-1]))
<a name="l02062"></a>02062 <span class="keywordflow">break</span>;
<a name="l02063"></a>02063 --i;
<a name="l02064"></a>02064 }
<a name="l02065"></a>02065
<a name="l02066"></a>02066 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (i >= 0 && (i == 0 || !(<a class="code" href="group__DBusStringInternals.html#g9c88845804be152df28b81d7cad5673a">DBUS_IS_ASCII_WHITE</a> (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>[i-1]))));
<a name="l02067"></a>02067
<a name="l02068"></a>02068 <span class="keywordflow">if</span> (start)
<a name="l02069"></a>02069 *start = i;
<a name="l02070"></a>02070 }
<a name="l02071"></a>02071
<a name="l02087"></a>02087 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02088"></a><a class="code" href="group__DBusString.html#g8b7fc22e6738173e1b2cef4b91b9c3c1">02088</a> <a class="code" href="group__DBusString.html#g8b7fc22e6738173e1b2cef4b91b9c3c1">_dbus_string_pop_line</a> (<a class="code" href="structDBusString.html">DBusString</a> *source,
<a name="l02089"></a>02089 <a class="code" href="structDBusString.html">DBusString</a> *dest)
<a name="l02090"></a>02090 {
<a name="l02091"></a>02091 <span class="keywordtype">int</span> eol, eol_len;
<a name="l02092"></a>02092
<a name="l02093"></a>02093 <a class="code" href="group__DBusString.html#g08c423b93c28dd746dcb93e0461ab95c">_dbus_string_set_length</a> (dest, 0);
<a name="l02094"></a>02094
<a name="l02095"></a>02095 eol = 0;
<a name="l02096"></a>02096 eol_len = 0;
<a name="l02097"></a>02097 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g3c98d1913e3ba4deb8eda60b2e262fdb">_dbus_string_find_eol</a> (source, 0, &eol, &eol_len))
<a name="l02098"></a>02098 {
<a name="l02099"></a>02099 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (eol == _dbus_string_get_length (source));
<a name="l02100"></a>02100 <span class="keywordflow">if</span> (eol == 0)
<a name="l02101"></a>02101 {
<a name="l02102"></a>02102 <span class="comment">/* If there's no newline and source has zero length, we're done */</span>
<a name="l02103"></a>02103 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02104"></a>02104 }
<a name="l02105"></a>02105 <span class="comment">/* otherwise, the last line of the file has no eol characters */</span>
<a name="l02106"></a>02106 }
<a name="l02107"></a>02107
<a name="l02108"></a>02108 <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="l02109"></a>02109 <span class="comment"> * since find_eol returned TRUE</span>
<a name="l02110"></a>02110 <span class="comment"> */</span>
<a name="l02111"></a>02111
<a name="l02112"></a>02112 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gb8e2dcb2dc71bf225da0827c6086a727">_dbus_string_move_len</a> (source, 0, eol + eol_len, dest, 0))
<a name="l02113"></a>02113 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02114"></a>02114
<a name="l02115"></a>02115 <span class="comment">/* remove line ending */</span>
<a name="l02116"></a>02116 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g08c423b93c28dd746dcb93e0461ab95c">_dbus_string_set_length</a> (dest, eol))
<a name="l02117"></a>02117 {
<a name="l02118"></a>02118 <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"out of memory when shortening a string"</span>);
<a name="l02119"></a>02119 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02120"></a>02120 }
<a name="l02121"></a>02121
<a name="l02122"></a>02122 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02123"></a>02123 }
<a name="l02124"></a>02124
<a name="l02125"></a>02125 <span class="preprocessor">#ifdef DBUS_BUILD_TESTS</span>
<a name="l02126"></a>02126 <span class="preprocessor"></span>
<a name="l02132"></a>02132 <span class="keywordtype">void</span>
<a name="l02133"></a>02133 _dbus_string_delete_first_word (<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l02134"></a>02134 {
<a name="l02135"></a>02135 <span class="keywordtype">int</span> i;
<a name="l02136"></a>02136
<a name="l02137"></a>02137 <span class="keywordflow">if</span> (<a class="code" href="group__DBusString.html#g677ddb4246c7e7f67ed3145dc3c1c96b">_dbus_string_find_blank</a> (str, 0, &i))
<a name="l02138"></a>02138 <a class="code" href="group__DBusString.html#g5698b163289be0066cf10c0f1caf877a">_dbus_string_skip_blank</a> (str, i, &i);
<a name="l02139"></a>02139
<a name="l02140"></a>02140 <a class="code" href="group__DBusString.html#g7e0e164ad5bb094e5ccad9edc7ae4235">_dbus_string_delete</a> (str, 0, i);
<a name="l02141"></a>02141 }
<a name="l02142"></a>02142 <span class="preprocessor">#endif</span>
<a name="l02143"></a>02143 <span class="preprocessor"></span>
<a name="l02144"></a>02144 <span class="preprocessor">#ifdef DBUS_BUILD_TESTS</span>
<a name="l02145"></a>02145 <span class="preprocessor"></span>
<a name="l02150"></a>02150 <span class="keywordtype">void</span>
<a name="l02151"></a>02151 _dbus_string_delete_leading_blanks (<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l02152"></a>02152 {
<a name="l02153"></a>02153 <span class="keywordtype">int</span> i;
<a name="l02154"></a>02154
<a name="l02155"></a>02155 <a class="code" href="group__DBusString.html#g5698b163289be0066cf10c0f1caf877a">_dbus_string_skip_blank</a> (str, 0, &i);
<a name="l02156"></a>02156
<a name="l02157"></a>02157 <span class="keywordflow">if</span> (i > 0)
<a name="l02158"></a>02158 <a class="code" href="group__DBusString.html#g7e0e164ad5bb094e5ccad9edc7ae4235">_dbus_string_delete</a> (str, 0, i);
<a name="l02159"></a>02159 }
<a name="l02160"></a>02160 <span class="preprocessor">#endif</span>
<a name="l02161"></a>02161 <span class="preprocessor"></span>
<a name="l02167"></a>02167 <span class="keywordtype">void</span>
<a name="l02168"></a><a class="code" href="group__DBusString.html#ga92c6ab2c5e24cbefef0a3f3fc76f98b">02168</a> <a class="code" href="group__DBusString.html#ga92c6ab2c5e24cbefef0a3f3fc76f98b">_dbus_string_chop_white</a>(<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l02169"></a>02169 {
<a name="l02170"></a>02170 <span class="keywordtype">int</span> i;
<a name="l02171"></a>02171
<a name="l02172"></a>02172 <a class="code" href="group__DBusString.html#g8600259d71a4adc14ab4558a9d2a0f7d">_dbus_string_skip_white</a> (str, 0, &i);
<a name="l02173"></a>02173
<a name="l02174"></a>02174 <span class="keywordflow">if</span> (i > 0)
<a name="l02175"></a>02175 <a class="code" href="group__DBusString.html#g7e0e164ad5bb094e5ccad9edc7ae4235">_dbus_string_delete</a> (str, 0, i);
<a name="l02176"></a>02176
<a name="l02177"></a>02177 <a class="code" href="group__DBusString.html#g578bb88acec5520825f2ba792cad7938">_dbus_string_skip_white_reverse</a> (str, _dbus_string_get_length (str), &i);
<a name="l02178"></a>02178
<a name="l02179"></a>02179 <a class="code" href="group__DBusString.html#g08c423b93c28dd746dcb93e0461ab95c">_dbus_string_set_length</a> (str, i);
<a name="l02180"></a>02180 }
<a name="l02181"></a>02181
<a name="l02191"></a>02191 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02192"></a><a class="code" href="group__DBusString.html#gd79c34af55b58f0e8b81ecf11b8694bb">02192</a> <a class="code" href="group__DBusString.html#gd79c34af55b58f0e8b81ecf11b8694bb">_dbus_string_equal</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *a,
<a name="l02193"></a>02193 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *b)
<a name="l02194"></a>02194 {
<a name="l02195"></a>02195 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ap;
<a name="l02196"></a>02196 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bp;
<a name="l02197"></a>02197 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *a_end;
<a name="l02198"></a>02198 <span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a> *real_a = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a>*) a;
<a name="l02199"></a>02199 <span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a> *real_b = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a>*) b;
<a name="l02200"></a>02200 <a class="code" href="group__DBusStringInternals.html#g862cb88a139179981e1fcd5643165b56">DBUS_GENERIC_STRING_PREAMBLE</a> (real_a);
<a name="l02201"></a>02201 <a class="code" href="group__DBusStringInternals.html#g862cb88a139179981e1fcd5643165b56">DBUS_GENERIC_STRING_PREAMBLE</a> (real_b);
<a name="l02202"></a>02202
<a name="l02203"></a>02203 <span class="keywordflow">if</span> (real_a->len != real_b-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>)
<a name="l02204"></a>02204 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02205"></a>02205
<a name="l02206"></a>02206 ap = real_a->str;
<a name="l02207"></a>02207 bp = real_b-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>;
<a name="l02208"></a>02208 a_end = real_a->str + real_a->len;
<a name="l02209"></a>02209 <span class="keywordflow">while</span> (ap != a_end)
<a name="l02210"></a>02210 {
<a name="l02211"></a>02211 <span class="keywordflow">if</span> (*ap != *bp)
<a name="l02212"></a>02212 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02213"></a>02213
<a name="l02214"></a>02214 ++ap;
<a name="l02215"></a>02215 ++bp;
<a name="l02216"></a>02216 }
<a name="l02217"></a>02217
<a name="l02218"></a>02218 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02219"></a>02219 }
<a name="l02220"></a>02220
<a name="l02221"></a>02221 <span class="preprocessor">#ifdef DBUS_BUILD_TESTS</span>
<a name="l02222"></a>02222 <span class="preprocessor"></span>
<a name="l02235"></a>02235 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02236"></a>02236 _dbus_string_equal_len (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *a,
<a name="l02237"></a>02237 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *b,
<a name="l02238"></a>02238 <span class="keywordtype">int</span> len)
<a name="l02239"></a>02239 {
<a name="l02240"></a>02240 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ap;
<a name="l02241"></a>02241 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bp;
<a name="l02242"></a>02242 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *a_end;
<a name="l02243"></a>02243 <span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a> *real_a = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a>*) a;
<a name="l02244"></a>02244 <span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a> *real_b = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a>*) b;
<a name="l02245"></a>02245 <a class="code" href="group__DBusStringInternals.html#g862cb88a139179981e1fcd5643165b56">DBUS_GENERIC_STRING_PREAMBLE</a> (real_a);
<a name="l02246"></a>02246 <a class="code" href="group__DBusStringInternals.html#g862cb88a139179981e1fcd5643165b56">DBUS_GENERIC_STRING_PREAMBLE</a> (real_b);
<a name="l02247"></a>02247
<a name="l02248"></a>02248 <span class="keywordflow">if</span> (real_a-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> != real_b-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> &&
<a name="l02249"></a>02249 (real_a-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> < len || real_b-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> < len))
<a name="l02250"></a>02250 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02251"></a>02251
<a name="l02252"></a>02252 ap = real_a-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>;
<a name="l02253"></a>02253 bp = real_b-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>;
<a name="l02254"></a>02254 a_end = real_a-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + MIN (real_a-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>, len);
<a name="l02255"></a>02255 <span class="keywordflow">while</span> (ap != a_end)
<a name="l02256"></a>02256 {
<a name="l02257"></a>02257 <span class="keywordflow">if</span> (*ap != *bp)
<a name="l02258"></a>02258 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02259"></a>02259
<a name="l02260"></a>02260 ++ap;
<a name="l02261"></a>02261 ++bp;
<a name="l02262"></a>02262 }
<a name="l02263"></a>02263
<a name="l02264"></a>02264 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02265"></a>02265 }
<a name="l02266"></a>02266 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_BUILD_TESTS */</span>
<a name="l02267"></a>02267
<a name="l02284"></a>02284 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02285"></a><a class="code" href="group__DBusString.html#g2095c2a797ae245521a7588b32279110">02285</a> <a class="code" href="group__DBusString.html#g2095c2a797ae245521a7588b32279110">_dbus_string_equal_substring</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *a,
<a name="l02286"></a>02286 <span class="keywordtype">int</span> a_start,
<a name="l02287"></a>02287 <span class="keywordtype">int</span> a_len,
<a name="l02288"></a>02288 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *b,
<a name="l02289"></a>02289 <span class="keywordtype">int</span> b_start)
<a name="l02290"></a>02290 {
<a name="l02291"></a>02291 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ap;
<a name="l02292"></a>02292 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bp;
<a name="l02293"></a>02293 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *a_end;
<a name="l02294"></a>02294 <span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a> *real_a = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a>*) a;
<a name="l02295"></a>02295 <span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a> *real_b = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a>*) b;
<a name="l02296"></a>02296 <a class="code" href="group__DBusStringInternals.html#g862cb88a139179981e1fcd5643165b56">DBUS_GENERIC_STRING_PREAMBLE</a> (real_a);
<a name="l02297"></a>02297 <a class="code" href="group__DBusStringInternals.html#g862cb88a139179981e1fcd5643165b56">DBUS_GENERIC_STRING_PREAMBLE</a> (real_b);
<a name="l02298"></a>02298 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (a_start >= 0);
<a name="l02299"></a>02299 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (a_len >= 0);
<a name="l02300"></a>02300 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (a_start <= real_a->len);
<a name="l02301"></a>02301 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (a_len <= real_a->len - a_start);
<a name="l02302"></a>02302 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (b_start >= 0);
<a name="l02303"></a>02303 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (b_start <= real_b->len);
<a name="l02304"></a>02304
<a name="l02305"></a>02305 <span class="keywordflow">if</span> (a_len > real_b-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> - b_start)
<a name="l02306"></a>02306 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02307"></a>02307
<a name="l02308"></a>02308 ap = real_a->str + a_start;
<a name="l02309"></a>02309 bp = real_b-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + b_start;
<a name="l02310"></a>02310 a_end = ap + a_len;
<a name="l02311"></a>02311 <span class="keywordflow">while</span> (ap != a_end)
<a name="l02312"></a>02312 {
<a name="l02313"></a>02313 <span class="keywordflow">if</span> (*ap != *bp)
<a name="l02314"></a>02314 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02315"></a>02315
<a name="l02316"></a>02316 ++ap;
<a name="l02317"></a>02317 ++bp;
<a name="l02318"></a>02318 }
<a name="l02319"></a>02319
<a name="l02320"></a>02320 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (bp <= (real_b-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + real_b-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>));
<a name="l02321"></a>02321
<a name="l02322"></a>02322 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02323"></a>02323 }
<a name="l02324"></a>02324
<a name="l02332"></a>02332 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02333"></a><a class="code" href="group__DBusString.html#g84f39f1bf398697920637d2982248c72">02333</a> <a class="code" href="group__DBusString.html#g84f39f1bf398697920637d2982248c72">_dbus_string_equal_c_str</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *a,
<a name="l02334"></a>02334 <span class="keyword">const</span> <span class="keywordtype">char</span> *c_str)
<a name="l02335"></a>02335 {
<a name="l02336"></a>02336 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ap;
<a name="l02337"></a>02337 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bp;
<a name="l02338"></a>02338 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *a_end;
<a name="l02339"></a>02339 <span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a> *real_a = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a>*) a;
<a name="l02340"></a>02340 <a class="code" href="group__DBusStringInternals.html#g862cb88a139179981e1fcd5643165b56">DBUS_GENERIC_STRING_PREAMBLE</a> (real_a);
<a name="l02341"></a>02341 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (c_str != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02342"></a>02342
<a name="l02343"></a>02343 ap = real_a->str;
<a name="l02344"></a>02344 bp = (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*) c_str;
<a name="l02345"></a>02345 a_end = real_a->str + real_a->len;
<a name="l02346"></a>02346 <span class="keywordflow">while</span> (ap != a_end && *bp)
<a name="l02347"></a>02347 {
<a name="l02348"></a>02348 <span class="keywordflow">if</span> (*ap != *bp)
<a name="l02349"></a>02349 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02350"></a>02350
<a name="l02351"></a>02351 ++ap;
<a name="l02352"></a>02352 ++bp;
<a name="l02353"></a>02353 }
<a name="l02354"></a>02354
<a name="l02355"></a>02355 <span class="keywordflow">if</span> (ap != a_end || *bp)
<a name="l02356"></a>02356 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02357"></a>02357
<a name="l02358"></a>02358 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02359"></a>02359 }
<a name="l02360"></a>02360
<a name="l02361"></a>02361 <span class="preprocessor">#ifdef DBUS_BUILD_TESTS</span>
<a name="l02362"></a>02362 <span class="preprocessor"></span>
<a name="l02369"></a>02369 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02370"></a>02370 _dbus_string_starts_with_c_str (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *a,
<a name="l02371"></a>02371 <span class="keyword">const</span> <span class="keywordtype">char</span> *c_str)
<a name="l02372"></a>02372 {
<a name="l02373"></a>02373 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *ap;
<a name="l02374"></a>02374 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *bp;
<a name="l02375"></a>02375 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *a_end;
<a name="l02376"></a>02376 <span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a> *real_a = (<span class="keyword">const</span> <a class="code" href="structDBusRealString.html">DBusRealString</a>*) a;
<a name="l02377"></a>02377 <a class="code" href="group__DBusStringInternals.html#g862cb88a139179981e1fcd5643165b56">DBUS_GENERIC_STRING_PREAMBLE</a> (real_a);
<a name="l02378"></a>02378 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (c_str != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02379"></a>02379
<a name="l02380"></a>02380 ap = real_a-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a>;
<a name="l02381"></a>02381 bp = (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*) c_str;
<a name="l02382"></a>02382 a_end = real_a-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + real_a-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a>;
<a name="l02383"></a>02383 <span class="keywordflow">while</span> (ap != a_end && *bp)
<a name="l02384"></a>02384 {
<a name="l02385"></a>02385 <span class="keywordflow">if</span> (*ap != *bp)
<a name="l02386"></a>02386 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02387"></a>02387
<a name="l02388"></a>02388 ++ap;
<a name="l02389"></a>02389 ++bp;
<a name="l02390"></a>02390 }
<a name="l02391"></a>02391
<a name="l02392"></a>02392 <span class="keywordflow">if</span> (*bp == <span class="charliteral">'\0'</span>)
<a name="l02393"></a>02393 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02394"></a>02394 <span class="keywordflow">else</span>
<a name="l02395"></a>02395 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02396"></a>02396 }
<a name="l02397"></a>02397 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_BUILD_TESTS */</span>
<a name="l02398"></a>02398
<a name="l02407"></a>02407 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02408"></a><a class="code" href="group__DBusString.html#gc3b78e2cb63fb37fbff8d7e647ddfa5a">02408</a> <a class="code" href="group__DBusString.html#gc3b78e2cb63fb37fbff8d7e647ddfa5a">_dbus_string_append_byte_as_hex</a> (<a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l02409"></a>02409 <span class="keywordtype">int</span> byte)
<a name="l02410"></a>02410 {
<a name="l02411"></a>02411 <span class="keyword">const</span> <span class="keywordtype">char</span> hexdigits[16] = {
<a name="l02412"></a>02412 <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="l02413"></a>02413 <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="l02414"></a>02414 };
<a name="l02415"></a>02415
<a name="l02416"></a>02416 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga6ecf36e70263659f921a4ef0335db12">_dbus_string_append_byte</a> (str,
<a name="l02417"></a>02417 hexdigits[(byte >> 4)]))
<a name="l02418"></a>02418 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02419"></a>02419
<a name="l02420"></a>02420 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga6ecf36e70263659f921a4ef0335db12">_dbus_string_append_byte</a> (str,
<a name="l02421"></a>02421 hexdigits[(byte & 0x0f)]))
<a name="l02422"></a>02422 {
<a name="l02423"></a>02423 <a class="code" href="group__DBusString.html#g08c423b93c28dd746dcb93e0461ab95c">_dbus_string_set_length</a> (str,
<a name="l02424"></a>02424 _dbus_string_get_length (str) - 1);
<a name="l02425"></a>02425 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02426"></a>02426 }
<a name="l02427"></a>02427
<a name="l02428"></a>02428 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02429"></a>02429 }
<a name="l02430"></a>02430
<a name="l02441"></a>02441 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02442"></a><a class="code" href="group__DBusString.html#gabb4873f436e015944a33cd1e3815cc9">02442</a> <a class="code" href="group__DBusString.html#gabb4873f436e015944a33cd1e3815cc9">_dbus_string_hex_encode</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *source,
<a name="l02443"></a>02443 <span class="keywordtype">int</span> start,
<a name="l02444"></a>02444 <a class="code" href="structDBusString.html">DBusString</a> *dest,
<a name="l02445"></a>02445 <span class="keywordtype">int</span> insert_at)
<a name="l02446"></a>02446 {
<a name="l02447"></a>02447 <a class="code" href="structDBusString.html">DBusString</a> result;
<a name="l02448"></a>02448 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *p;
<a name="l02449"></a>02449 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end;
<a name="l02450"></a>02450 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l02451"></a>02451
<a name="l02452"></a>02452 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= _dbus_string_get_length (source));
<a name="l02453"></a>02453
<a name="l02454"></a>02454 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g348252317f7bb8ac43529972945830ae">_dbus_string_init</a> (&result))
<a name="l02455"></a>02455 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02456"></a>02456
<a name="l02457"></a>02457 retval = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02458"></a>02458
<a name="l02459"></a>02459 p = (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*) _dbus_string_get_const_data (source);
<a name="l02460"></a>02460 end = p + _dbus_string_get_length (source);
<a name="l02461"></a>02461 p += start;
<a name="l02462"></a>02462
<a name="l02463"></a>02463 <span class="keywordflow">while</span> (p != end)
<a name="l02464"></a>02464 {
<a name="l02465"></a>02465 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gc3b78e2cb63fb37fbff8d7e647ddfa5a">_dbus_string_append_byte_as_hex</a> (&result, *p))
<a name="l02466"></a>02466 <span class="keywordflow">goto</span> out;
<a name="l02467"></a>02467
<a name="l02468"></a>02468 ++p;
<a name="l02469"></a>02469 }
<a name="l02470"></a>02470
<a name="l02471"></a>02471 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gd379fce8d4ef4f7e28f81f50b46ee4c9">_dbus_string_move</a> (&result, 0, dest, insert_at))
<a name="l02472"></a>02472 <span class="keywordflow">goto</span> out;
<a name="l02473"></a>02473
<a name="l02474"></a>02474 retval = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02475"></a>02475
<a name="l02476"></a>02476 out:
<a name="l02477"></a>02477 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&result);
<a name="l02478"></a>02478 <span class="keywordflow">return</span> retval;
<a name="l02479"></a>02479 }
<a name="l02480"></a>02480
<a name="l02491"></a>02491 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02492"></a><a class="code" href="group__DBusString.html#g0a8c20d855f9ddc05718b9e2ac0e33d8">02492</a> <a class="code" href="group__DBusString.html#g0a8c20d855f9ddc05718b9e2ac0e33d8">_dbus_string_hex_decode</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *source,
<a name="l02493"></a>02493 <span class="keywordtype">int</span> start,
<a name="l02494"></a>02494 <span class="keywordtype">int</span> *end_return,
<a name="l02495"></a>02495 <a class="code" href="structDBusString.html">DBusString</a> *dest,
<a name="l02496"></a>02496 <span class="keywordtype">int</span> insert_at)
<a name="l02497"></a>02497 {
<a name="l02498"></a>02498 <a class="code" href="structDBusString.html">DBusString</a> result;
<a name="l02499"></a>02499 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *p;
<a name="l02500"></a>02500 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end;
<a name="l02501"></a>02501 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l02502"></a>02502 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> high_bits;
<a name="l02503"></a>02503
<a name="l02504"></a>02504 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= _dbus_string_get_length (source));
<a name="l02505"></a>02505
<a name="l02506"></a>02506 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g348252317f7bb8ac43529972945830ae">_dbus_string_init</a> (&result))
<a name="l02507"></a>02507 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02508"></a>02508
<a name="l02509"></a>02509 retval = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02510"></a>02510
<a name="l02511"></a>02511 high_bits = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02512"></a>02512 p = (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*) _dbus_string_get_const_data (source);
<a name="l02513"></a>02513 end = p + _dbus_string_get_length (source);
<a name="l02514"></a>02514 p += start;
<a name="l02515"></a>02515
<a name="l02516"></a>02516 <span class="keywordflow">while</span> (p != end)
<a name="l02517"></a>02517 {
<a name="l02518"></a>02518 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> val;
<a name="l02519"></a>02519
<a name="l02520"></a>02520 <span class="keywordflow">switch</span> (*p)
<a name="l02521"></a>02521 {
<a name="l02522"></a>02522 <span class="keywordflow">case</span> <span class="charliteral">'0'</span>:
<a name="l02523"></a>02523 val = 0;
<a name="l02524"></a>02524 <span class="keywordflow">break</span>;
<a name="l02525"></a>02525 <span class="keywordflow">case</span> <span class="charliteral">'1'</span>:
<a name="l02526"></a>02526 val = 1;
<a name="l02527"></a>02527 <span class="keywordflow">break</span>;
<a name="l02528"></a>02528 <span class="keywordflow">case</span> <span class="charliteral">'2'</span>:
<a name="l02529"></a>02529 val = 2;
<a name="l02530"></a>02530 <span class="keywordflow">break</span>;
<a name="l02531"></a>02531 <span class="keywordflow">case</span> <span class="charliteral">'3'</span>:
<a name="l02532"></a>02532 val = 3;
<a name="l02533"></a>02533 <span class="keywordflow">break</span>;
<a name="l02534"></a>02534 <span class="keywordflow">case</span> <span class="charliteral">'4'</span>:
<a name="l02535"></a>02535 val = 4;
<a name="l02536"></a>02536 <span class="keywordflow">break</span>;
<a name="l02537"></a>02537 <span class="keywordflow">case</span> <span class="charliteral">'5'</span>:
<a name="l02538"></a>02538 val = 5;
<a name="l02539"></a>02539 <span class="keywordflow">break</span>;
<a name="l02540"></a>02540 <span class="keywordflow">case</span> <span class="charliteral">'6'</span>:
<a name="l02541"></a>02541 val = 6;
<a name="l02542"></a>02542 <span class="keywordflow">break</span>;
<a name="l02543"></a>02543 <span class="keywordflow">case</span> <span class="charliteral">'7'</span>:
<a name="l02544"></a>02544 val = 7;
<a name="l02545"></a>02545 <span class="keywordflow">break</span>;
<a name="l02546"></a>02546 <span class="keywordflow">case</span> <span class="charliteral">'8'</span>:
<a name="l02547"></a>02547 val = 8;
<a name="l02548"></a>02548 <span class="keywordflow">break</span>;
<a name="l02549"></a>02549 <span class="keywordflow">case</span> <span class="charliteral">'9'</span>:
<a name="l02550"></a>02550 val = 9;
<a name="l02551"></a>02551 <span class="keywordflow">break</span>;
<a name="l02552"></a>02552 <span class="keywordflow">case</span> <span class="charliteral">'a'</span>:
<a name="l02553"></a>02553 <span class="keywordflow">case</span> <span class="charliteral">'A'</span>:
<a name="l02554"></a>02554 val = 10;
<a name="l02555"></a>02555 <span class="keywordflow">break</span>;
<a name="l02556"></a>02556 <span class="keywordflow">case</span> <span class="charliteral">'b'</span>:
<a name="l02557"></a>02557 <span class="keywordflow">case</span> <span class="charliteral">'B'</span>:
<a name="l02558"></a>02558 val = 11;
<a name="l02559"></a>02559 <span class="keywordflow">break</span>;
<a name="l02560"></a>02560 <span class="keywordflow">case</span> <span class="charliteral">'c'</span>:
<a name="l02561"></a>02561 <span class="keywordflow">case</span> <span class="charliteral">'C'</span>:
<a name="l02562"></a>02562 val = 12;
<a name="l02563"></a>02563 <span class="keywordflow">break</span>;
<a name="l02564"></a>02564 <span class="keywordflow">case</span> <span class="charliteral">'d'</span>:
<a name="l02565"></a>02565 <span class="keywordflow">case</span> <span class="charliteral">'D'</span>:
<a name="l02566"></a>02566 val = 13;
<a name="l02567"></a>02567 <span class="keywordflow">break</span>;
<a name="l02568"></a>02568 <span class="keywordflow">case</span> <span class="charliteral">'e'</span>:
<a name="l02569"></a>02569 <span class="keywordflow">case</span> <span class="charliteral">'E'</span>:
<a name="l02570"></a>02570 val = 14;
<a name="l02571"></a>02571 <span class="keywordflow">break</span>;
<a name="l02572"></a>02572 <span class="keywordflow">case</span> <span class="charliteral">'f'</span>:
<a name="l02573"></a>02573 <span class="keywordflow">case</span> <span class="charliteral">'F'</span>:
<a name="l02574"></a>02574 val = 15;
<a name="l02575"></a>02575 <span class="keywordflow">break</span>;
<a name="l02576"></a>02576 <span class="keywordflow">default</span>:
<a name="l02577"></a>02577 <span class="keywordflow">goto</span> done;
<a name="l02578"></a>02578 }
<a name="l02579"></a>02579
<a name="l02580"></a>02580 <span class="keywordflow">if</span> (high_bits)
<a name="l02581"></a>02581 {
<a name="l02582"></a>02582 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#ga6ecf36e70263659f921a4ef0335db12">_dbus_string_append_byte</a> (&result,
<a name="l02583"></a>02583 val << 4))
<a name="l02584"></a>02584 <span class="keywordflow">goto</span> out;
<a name="l02585"></a>02585 }
<a name="l02586"></a>02586 <span class="keywordflow">else</span>
<a name="l02587"></a>02587 {
<a name="l02588"></a>02588 <span class="keywordtype">int</span> len;
<a name="l02589"></a>02589 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> b;
<a name="l02590"></a>02590
<a name="l02591"></a>02591 len = _dbus_string_get_length (&result);
<a name="l02592"></a>02592
<a name="l02593"></a>02593 b = _dbus_string_get_byte (&result, len - 1);
<a name="l02594"></a>02594
<a name="l02595"></a>02595 b |= val;
<a name="l02596"></a>02596
<a name="l02597"></a>02597 _dbus_string_set_byte (&result, len - 1, b);
<a name="l02598"></a>02598 }
<a name="l02599"></a>02599
<a name="l02600"></a>02600 high_bits = !high_bits;
<a name="l02601"></a>02601
<a name="l02602"></a>02602 ++p;
<a name="l02603"></a>02603 }
<a name="l02604"></a>02604
<a name="l02605"></a>02605 done:
<a name="l02606"></a>02606 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gd379fce8d4ef4f7e28f81f50b46ee4c9">_dbus_string_move</a> (&result, 0, dest, insert_at))
<a name="l02607"></a>02607 <span class="keywordflow">goto</span> out;
<a name="l02608"></a>02608
<a name="l02609"></a>02609 <span class="keywordflow">if</span> (end_return)
<a name="l02610"></a>02610 *end_return = p - (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*) _dbus_string_get_const_data (source);
<a name="l02611"></a>02611
<a name="l02612"></a>02612 retval = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02613"></a>02613
<a name="l02614"></a>02614 out:
<a name="l02615"></a>02615 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&result);
<a name="l02616"></a>02616 <span class="keywordflow">return</span> retval;
<a name="l02617"></a>02617 }
<a name="l02618"></a>02618
<a name="l02632"></a>02632 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02633"></a><a class="code" href="group__DBusString.html#ga4324cd667e21beb31a5481cb0c12b6d">02633</a> <a class="code" href="group__DBusString.html#ga4324cd667e21beb31a5481cb0c12b6d">_dbus_string_validate_ascii</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l02634"></a>02634 <span class="keywordtype">int</span> start,
<a name="l02635"></a>02635 <span class="keywordtype">int</span> len)
<a name="l02636"></a>02636 {
<a name="l02637"></a>02637 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s;
<a name="l02638"></a>02638 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end;
<a name="l02639"></a>02639 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l02640"></a>02640 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l02641"></a>02641 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l02642"></a>02642 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len >= 0);
<a name="l02643"></a>02643
<a name="l02644"></a>02644 <span class="keywordflow">if</span> (len > real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> - start)
<a name="l02645"></a>02645 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02646"></a>02646
<a name="l02647"></a>02647 s = real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + start;
<a name="l02648"></a>02648 end = s + len;
<a name="l02649"></a>02649 <span class="keywordflow">while</span> (s != end)
<a name="l02650"></a>02650 {
<a name="l02651"></a>02651 <span class="keywordflow">if</span> (_DBUS_UNLIKELY (!_DBUS_ISASCII (*s)))
<a name="l02652"></a>02652 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02653"></a>02653
<a name="l02654"></a>02654 ++s;
<a name="l02655"></a>02655 }
<a name="l02656"></a>02656
<a name="l02657"></a>02657 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02658"></a>02658 }
<a name="l02659"></a>02659
<a name="l02675"></a>02675 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02676"></a><a class="code" href="group__DBusString.html#g65f0f04b7c9371406fc87343f691e8da">02676</a> <a class="code" href="group__DBusString.html#g65f0f04b7c9371406fc87343f691e8da">_dbus_string_validate_utf8</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l02677"></a>02677 <span class="keywordtype">int</span> start,
<a name="l02678"></a>02678 <span class="keywordtype">int</span> len)
<a name="l02679"></a>02679 {
<a name="l02680"></a>02680 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *p;
<a name="l02681"></a>02681 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end;
<a name="l02682"></a>02682 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l02683"></a>02683 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l02684"></a>02684 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l02685"></a>02685 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len >= 0);
<a name="l02686"></a>02686
<a name="l02687"></a>02687 <span class="comment">/* we are doing _DBUS_UNLIKELY() here which might be</span>
<a name="l02688"></a>02688 <span class="comment"> * dubious in a generic library like GLib, but in D-Bus</span>
<a name="l02689"></a>02689 <span class="comment"> * we know we're validating messages and that it would</span>
<a name="l02690"></a>02690 <span class="comment"> * only be evil/broken apps that would have invalid</span>
<a name="l02691"></a>02691 <span class="comment"> * UTF-8. Also, this function seems to be a performance</span>
<a name="l02692"></a>02692 <span class="comment"> * bottleneck in profiles.</span>
<a name="l02693"></a>02693 <span class="comment"> */</span>
<a name="l02694"></a>02694
<a name="l02695"></a>02695 <span class="keywordflow">if</span> (_DBUS_UNLIKELY (len > real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> - start))
<a name="l02696"></a>02696 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02697"></a>02697
<a name="l02698"></a>02698 p = real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + start;
<a name="l02699"></a>02699 end = p + len;
<a name="l02700"></a>02700
<a name="l02701"></a>02701 <span class="keywordflow">while</span> (p < end)
<a name="l02702"></a>02702 {
<a name="l02703"></a>02703 <span class="keywordtype">int</span> i, mask, char_len;
<a name="l02704"></a>02704 dbus_unichar_t result;
<a name="l02705"></a>02705
<a name="l02706"></a>02706 <span class="comment">/* nul bytes considered invalid */</span>
<a name="l02707"></a>02707 <span class="keywordflow">if</span> (*p == <span class="charliteral">'\0'</span>)
<a name="l02708"></a>02708 <span class="keywordflow">break</span>;
<a name="l02709"></a>02709
<a name="l02710"></a>02710 <span class="comment">/* Special-case ASCII; this makes us go a lot faster in</span>
<a name="l02711"></a>02711 <span class="comment"> * D-Bus profiles where we are typically validating</span>
<a name="l02712"></a>02712 <span class="comment"> * function names and such. We have to know that</span>
<a name="l02713"></a>02713 <span class="comment"> * all following checks will pass for ASCII though,</span>
<a name="l02714"></a>02714 <span class="comment"> * comments follow ...</span>
<a name="l02715"></a>02715 <span class="comment"> */</span>
<a name="l02716"></a>02716 <span class="keywordflow">if</span> (*p < 128)
<a name="l02717"></a>02717 {
<a name="l02718"></a>02718 ++p;
<a name="l02719"></a>02719 <span class="keywordflow">continue</span>;
<a name="l02720"></a>02720 }
<a name="l02721"></a>02721
<a name="l02722"></a>02722 <a class="code" href="group__DBusString.html#g30614080229a4fb63460ffdc8ab484fb">UTF8_COMPUTE</a> (*p, mask, char_len);
<a name="l02723"></a>02723
<a name="l02724"></a>02724 <span class="keywordflow">if</span> (_DBUS_UNLIKELY (char_len == 0)) <span class="comment">/* ASCII: char_len == 1 */</span>
<a name="l02725"></a>02725 <span class="keywordflow">break</span>;
<a name="l02726"></a>02726
<a name="l02727"></a>02727 <span class="comment">/* check that the expected number of bytes exists in the remaining length */</span>
<a name="l02728"></a>02728 <span class="keywordflow">if</span> (_DBUS_UNLIKELY ((end - p) < char_len)) <span class="comment">/* ASCII: p < end and char_len == 1 */</span>
<a name="l02729"></a>02729 <span class="keywordflow">break</span>;
<a name="l02730"></a>02730
<a name="l02731"></a>02731 <a class="code" href="group__DBusString.html#gb5b4b316a69f78611a14e6b1fd091992">UTF8_GET</a> (result, p, i, mask, char_len);
<a name="l02732"></a>02732
<a name="l02733"></a>02733 <span class="comment">/* Check for overlong UTF-8 */</span>
<a name="l02734"></a>02734 <span class="keywordflow">if</span> (_DBUS_UNLIKELY (<a class="code" href="group__DBusString.html#g9691ff5386e218870299de1d9e77ceea">UTF8_LENGTH</a> (result) != char_len)) <span class="comment">/* ASCII: UTF8_LENGTH == 1 */</span>
<a name="l02735"></a>02735 <span class="keywordflow">break</span>;
<a name="l02736"></a>02736 <span class="preprocessor">#if 0</span>
<a name="l02737"></a>02737 <span class="preprocessor"></span> <span class="comment">/* The UNICODE_VALID check below will catch this */</span>
<a name="l02738"></a>02738 <span class="keywordflow">if</span> (_DBUS_UNLIKELY (result == (dbus_unichar_t)-1)) <span class="comment">/* ASCII: result = ascii value */</span>
<a name="l02739"></a>02739 <span class="keywordflow">break</span>;
<a name="l02740"></a>02740 <span class="preprocessor">#endif</span>
<a name="l02741"></a>02741 <span class="preprocessor"></span>
<a name="l02742"></a>02742 <span class="keywordflow">if</span> (_DBUS_UNLIKELY (!<a class="code" href="group__DBusString.html#g25f0a93fc023fa0eec07ac1e32011e89">UNICODE_VALID</a> (result))) <span class="comment">/* ASCII: always valid */</span>
<a name="l02743"></a>02743 <span class="keywordflow">break</span>;
<a name="l02744"></a>02744
<a name="l02745"></a>02745 <span class="comment">/* UNICODE_VALID should have caught it */</span>
<a name="l02746"></a>02746 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (result != (dbus_unichar_t)-1);
<a name="l02747"></a>02747
<a name="l02748"></a>02748 p += char_len;
<a name="l02749"></a>02749 }
<a name="l02750"></a>02750
<a name="l02751"></a>02751 <span class="comment">/* See that we covered the entire length if a length was</span>
<a name="l02752"></a>02752 <span class="comment"> * passed in</span>
<a name="l02753"></a>02753 <span class="comment"> */</span>
<a name="l02754"></a>02754 <span class="keywordflow">if</span> (_DBUS_UNLIKELY (p != end))
<a name="l02755"></a>02755 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02756"></a>02756 <span class="keywordflow">else</span>
<a name="l02757"></a>02757 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02758"></a>02758 }
<a name="l02759"></a>02759
<a name="l02773"></a>02773 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02774"></a><a class="code" href="group__DBusString.html#g199d0fc00ee3cd0300a1b3870d7986a3">02774</a> <a class="code" href="group__DBusString.html#g199d0fc00ee3cd0300a1b3870d7986a3">_dbus_string_validate_nul</a> (<span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *str,
<a name="l02775"></a>02775 <span class="keywordtype">int</span> start,
<a name="l02776"></a>02776 <span class="keywordtype">int</span> len)
<a name="l02777"></a>02777 {
<a name="l02778"></a>02778 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s;
<a name="l02779"></a>02779 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *end;
<a name="l02780"></a>02780 <a class="code" href="group__DBusStringInternals.html#g5cf5f12f6d8f839e9a7c3ad790a83316">DBUS_CONST_STRING_PREAMBLE</a> (str);
<a name="l02781"></a>02781 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start >= 0);
<a name="l02782"></a>02782 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (len >= 0);
<a name="l02783"></a>02783 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (start <= real->len);
<a name="l02784"></a>02784
<a name="l02785"></a>02785 <span class="keywordflow">if</span> (len > real-><a class="code" href="structDBusRealString.html#ed6f543f7b748c4f5cf92b9aedd5f68d">len</a> - start)
<a name="l02786"></a>02786 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02787"></a>02787
<a name="l02788"></a>02788 s = real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> + start;
<a name="l02789"></a>02789 end = s + len;
<a name="l02790"></a>02790 <span class="keywordflow">while</span> (s != end)
<a name="l02791"></a>02791 {
<a name="l02792"></a>02792 <span class="keywordflow">if</span> (_DBUS_UNLIKELY (*s != <span class="charliteral">'\0'</span>))
<a name="l02793"></a>02793 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02794"></a>02794 ++s;
<a name="l02795"></a>02795 }
<a name="l02796"></a>02796
<a name="l02797"></a>02797 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02798"></a>02798 }
<a name="l02799"></a>02799
<a name="l02805"></a>02805 <span class="keywordtype">void</span>
<a name="l02806"></a><a class="code" href="group__DBusString.html#g9385fd0de31b3f5f4f8baa96bad3fac6">02806</a> <a class="code" href="group__DBusString.html#g9385fd0de31b3f5f4f8baa96bad3fac6">_dbus_string_zero</a> (<a class="code" href="structDBusString.html">DBusString</a> *str)
<a name="l02807"></a>02807 {
<a name="l02808"></a>02808 <a class="code" href="group__DBusStringInternals.html#g376570af2af3ebb7e59d45b49b9582b3">DBUS_STRING_PREAMBLE</a> (str);
<a name="l02809"></a>02809
<a name="l02810"></a>02810 memset (real-><a class="code" href="structDBusRealString.html#d60d27edba516b0a179ce1ead1e74725">str</a> - real-><a class="code" href="structDBusRealString.html#21fb373a65e36646787392a3dfe62443">align_offset</a>, <span class="charliteral">'\0'</span>, real-><a class="code" href="structDBusRealString.html#e12ec58c271e47f3f89fae1410b7c5e5">allocated</a>);
<a name="l02811"></a>02811 }
<a name="l02814"></a>02814 <span class="comment">/* tests are in dbus-string-util.c */</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Dec 14 22:26:12 2009 for D-Bus by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
</body>
</html>