<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>dbus-errors.c Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.2.15 --> <center> <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="modules.html">Modules</a> <a class="qindex" href="annotated.html">Data Structures</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Data Fields</a> <a class="qindex" href="pages.html">Related Pages</a> </center> <hr><h1>dbus-errors.c</h1><div class="fragment"><pre>00001 <font class="comment">/* -*- mode: C; c-file-style: "gnu" -*- */</font> 00002 <font class="comment">/* dbus-errors.c Error reporting</font> 00003 <font class="comment"> *</font> 00004 <font class="comment"> * Copyright (C) 2002 Red Hat Inc.</font> 00005 <font class="comment"> * Copyright (C) 2003 CodeFactory AB</font> 00006 <font class="comment"> *</font> 00007 <font class="comment"> * Licensed under the Academic Free License version 2.0</font> 00008 <font class="comment"> * </font> 00009 <font class="comment"> * This program is free software; you can redistribute it and/or modify</font> 00010 <font class="comment"> * it under the terms of the GNU General Public License as published by</font> 00011 <font class="comment"> * the Free Software Foundation; either version 2 of the License, or</font> 00012 <font class="comment"> * (at your option) any later version.</font> 00013 <font class="comment"> *</font> 00014 <font class="comment"> * This program is distributed in the hope that it will be useful,</font> 00015 <font class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</font> 00016 <font class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</font> 00017 <font class="comment"> * GNU General Public License for more details.</font> 00018 <font class="comment"> * </font> 00019 <font class="comment"> * You should have received a copy of the GNU General Public License</font> 00020 <font class="comment"> * along with this program; if not, write to the Free Software</font> 00021 <font class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</font> 00022 <font class="comment"> *</font> 00023 <font class="comment"> */</font> 00024 <font class="preprocessor">#include "dbus-errors.h"</font> 00025 <font class="preprocessor">#include "dbus-internals.h"</font> 00026 <font class="preprocessor">#include "dbus-string.h"</font> 00027 <font class="preprocessor">#include <stdarg.h></font> 00028 <font class="preprocessor">#include <string.h></font> 00029 <a name="l00040"></a><a class="code" href="structDBusRealError.html">00040</a> <font class="keyword">typedef</font> <font class="keyword">struct</font> 00041 <font class="keyword"></font>{ <a name="l00042"></a><a class="code" href="structDBusRealError.html#m0">00042</a> <font class="keyword">const</font> <font class="keywordtype">char</font> *name; <a name="l00043"></a><a class="code" href="structDBusRealError.html#m1">00043</a> <font class="keywordtype">char</font> *message; <a name="l00045"></a><a class="code" href="structDBusRealError.html#m2">00045</a> <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> const_message : 1; <a name="l00047"></a><a class="code" href="structDBusRealError.html#m3">00047</a> <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> dummy2 : 1; <a name="l00048"></a><a class="code" href="structDBusRealError.html#m4">00048</a> <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> dummy3 : 1; <a name="l00049"></a><a class="code" href="structDBusRealError.html#m5">00049</a> <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> dummy4 : 1; <a name="l00050"></a><a class="code" href="structDBusRealError.html#m6">00050</a> <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> dummy5 : 1; <a name="l00052"></a><a class="code" href="structDBusRealError.html#m7">00052</a> <font class="keywordtype">void</font> *padding1; 00054 } <a class="code" href="structDBusRealError.html">DBusRealError</a>; 00055 00064 <font class="keyword">static</font> <font class="keyword">const</font> <font class="keywordtype">char</font>* 00065 message_from_error (<font class="keyword">const</font> <font class="keywordtype">char</font> *error) 00066 { 00067 <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_FAILED) == 0) 00068 <font class="keywordflow">return</font> <font class="stringliteral">"Unknown error"</font>; 00069 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_NO_MEMORY) == 0) 00070 <font class="keywordflow">return</font> <font class="stringliteral">"Not enough memory available"</font>; 00071 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_IO_ERROR) == 0) 00072 <font class="keywordflow">return</font> <font class="stringliteral">"Error reading or writing data"</font>; 00073 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_BAD_ADDRESS) == 0) 00074 <font class="keywordflow">return</font> <font class="stringliteral">"Could not parse address"</font>; 00075 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_NOT_SUPPORTED) == 0) 00076 <font class="keywordflow">return</font> <font class="stringliteral">"Feature not supported"</font>; 00077 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_LIMITS_EXCEEDED) == 0) 00078 <font class="keywordflow">return</font> <font class="stringliteral">"Resource limits exceeded"</font>; 00079 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_ACCESS_DENIED) == 0) 00080 <font class="keywordflow">return</font> <font class="stringliteral">"Permission denied"</font>; 00081 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_AUTH_FAILED) == 0) 00082 <font class="keywordflow">return</font> <font class="stringliteral">"Could not authenticate to server"</font>; 00083 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_NO_SERVER) == 0) 00084 <font class="keywordflow">return</font> <font class="stringliteral">"No server available at address"</font>; 00085 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_TIMEOUT) == 0) 00086 <font class="keywordflow">return</font> <font class="stringliteral">"Connection timed out"</font>; 00087 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_NO_NETWORK) == 0) 00088 <font class="keywordflow">return</font> <font class="stringliteral">"Network unavailable"</font>; 00089 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_ADDRESS_IN_USE) == 0) 00090 <font class="keywordflow">return</font> <font class="stringliteral">"Address already in use"</font>; 00091 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_DISCONNECTED) == 0) 00092 <font class="keywordflow">return</font> <font class="stringliteral">"Disconnected."</font>; 00093 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_INVALID_ARGS) == 0) 00094 <font class="keywordflow">return</font> <font class="stringliteral">"Invalid arguments."</font>; 00095 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_NO_REPLY) == 0) 00096 <font class="keywordflow">return</font> <font class="stringliteral">"Did not get a reply message."</font>; 00097 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (strcmp (error, DBUS_ERROR_FILE_NOT_FOUND) == 0) 00098 <font class="keywordflow">return</font> <font class="stringliteral">"File doesn't exist."</font>; 00099 <font class="keywordflow">else</font> 00100 <font class="keywordflow">return</font> error; 00101 } 00102 <font class="comment">/* End of internals */</font> 00104 00149 <font class="keywordtype">void</font> <a name="l00150"></a><a class="code" href="group__DBusErrors.html#a0">00150</a> dbus_error_init (<a class="code" href="structDBusError.html">DBusError</a> *error) 00151 { 00152 <a class="code" href="structDBusRealError.html">DBusRealError</a> *real; 00153 00154 _dbus_return_if_fail (error != NULL); 00155 00156 _dbus_assert (<font class="keyword">sizeof</font> (<a class="code" href="structDBusError.html">DBusError</a>) == <font class="keyword">sizeof</font> (<a class="code" href="structDBusRealError.html">DBusRealError</a>)); 00157 00158 real = (<a class="code" href="structDBusRealError.html">DBusRealError</a> *)error; 00159 00160 real-><a class="code" href="structDBusRealError.html#m0">name</a> = NULL; 00161 real-><a class="code" href="structDBusRealError.html#m1">message</a> = NULL; 00162 00163 real-><a class="code" href="structDBusRealError.html#m2">const_message</a> = TRUE; 00164 } 00165 00172 <font class="keywordtype">void</font> <a name="l00173"></a><a class="code" href="group__DBusErrors.html#a1">00173</a> dbus_error_free (<a class="code" href="structDBusError.html">DBusError</a> *error) 00174 { 00175 <a class="code" href="structDBusRealError.html">DBusRealError</a> *real; 00176 00177 _dbus_return_if_fail (error != NULL); 00178 00179 real = (<a class="code" href="structDBusRealError.html">DBusRealError</a> *)error; 00180 00181 <font class="keywordflow">if</font> (!real-><a class="code" href="structDBusRealError.html#m2">const_message</a>) 00182 dbus_free (real-><a class="code" href="structDBusRealError.html#m1">message</a>); 00183 00184 dbus_error_init (error); 00185 } 00186 00199 <font class="keywordtype">void</font> <a name="l00200"></a><a class="code" href="group__DBusErrors.html#a2">00200</a> dbus_set_error_const (<a class="code" href="structDBusError.html">DBusError</a> *error, 00201 <font class="keyword">const</font> <font class="keywordtype">char</font> *name, 00202 <font class="keyword">const</font> <font class="keywordtype">char</font> *message) 00203 { 00204 <a class="code" href="structDBusRealError.html">DBusRealError</a> *real; 00205 00206 _dbus_return_if_error_is_set (error); 00207 _dbus_return_if_fail (name != NULL); 00208 00209 <font class="keywordflow">if</font> (error == NULL) 00210 <font class="keywordflow">return</font>; 00211 00212 _dbus_assert (error-><a class="code" href="structDBusError.html#m0">name</a> == NULL); 00213 _dbus_assert (error-><a class="code" href="structDBusError.html#m1">message</a> == NULL); 00214 00215 <font class="keywordflow">if</font> (message == NULL) 00216 message = message_from_error (name); 00217 00218 real = (<a class="code" href="structDBusRealError.html">DBusRealError</a> *)error; 00219 00220 real-><a class="code" href="structDBusRealError.html#m0">name</a> = name; 00221 real-><a class="code" href="structDBusRealError.html#m1">message</a> = (<font class="keywordtype">char</font> *)message; 00222 real-><a class="code" href="structDBusRealError.html#m2">const_message</a> = TRUE; 00223 } 00224 00235 <font class="keywordtype">void</font> <a name="l00236"></a><a class="code" href="group__DBusErrors.html#a3">00236</a> dbus_move_error (<a class="code" href="structDBusError.html">DBusError</a> *src, 00237 <a class="code" href="structDBusError.html">DBusError</a> *dest) 00238 { 00239 _dbus_return_if_error_is_set (dest); 00240 00241 <font class="keywordflow">if</font> (dest) 00242 { 00243 dbus_error_free (dest); 00244 *dest = *src; 00245 dbus_error_init (src); 00246 } 00247 <font class="keywordflow">else</font> 00248 dbus_error_free (src); 00249 } 00250 00258 dbus_bool_t <a name="l00259"></a><a class="code" href="group__DBusErrors.html#a4">00259</a> dbus_error_has_name (<font class="keyword">const</font> <a class="code" href="structDBusError.html">DBusError</a> *error, 00260 <font class="keyword">const</font> <font class="keywordtype">char</font> *name) 00261 { 00262 _dbus_return_val_if_fail (error != NULL, FALSE); 00263 _dbus_return_val_if_fail (name != NULL, FALSE); 00264 00265 _dbus_assert ((error-><a class="code" href="structDBusError.html#m0">name</a> != NULL && error-><a class="code" href="structDBusError.html#m1">message</a> != NULL) || 00266 (error-><a class="code" href="structDBusError.html#m0">name</a> == NULL && error-><a class="code" href="structDBusError.html#m1">message</a> == NULL)); 00267 00268 <font class="keywordflow">if</font> (error-><a class="code" href="structDBusError.html#m0">name</a> != NULL) 00269 { 00270 <a class="code" href="structDBusString.html">DBusString</a> str1, str2; 00271 _dbus_string_init_const (&str1, error-><a class="code" href="structDBusError.html#m0">name</a>); 00272 _dbus_string_init_const (&str2, name); 00273 <font class="keywordflow">return</font> _dbus_string_equal (&str1, &str2); 00274 } 00275 <font class="keywordflow">else</font> 00276 <font class="keywordflow">return</font> FALSE; 00277 } 00278 00285 dbus_bool_t <a name="l00286"></a><a class="code" href="group__DBusErrors.html#a5">00286</a> dbus_error_is_set (<font class="keyword">const</font> <a class="code" href="structDBusError.html">DBusError</a> *error) 00287 { 00288 _dbus_return_val_if_fail (error != NULL, FALSE); 00289 _dbus_assert ((error-><a class="code" href="structDBusError.html#m0">name</a> != NULL && error-><a class="code" href="structDBusError.html#m1">message</a> != NULL) || 00290 (error-><a class="code" href="structDBusError.html#m0">name</a> == NULL && error-><a class="code" href="structDBusError.html#m1">message</a> == NULL)); 00291 <font class="keywordflow">return</font> error-><a class="code" href="structDBusError.html#m0">name</a> != NULL; 00292 } 00293 00311 <font class="keywordtype">void</font> <a name="l00312"></a><a class="code" href="group__DBusErrors.html#a6">00312</a> dbus_set_error (<a class="code" href="structDBusError.html">DBusError</a> *error, 00313 <font class="keyword">const</font> <font class="keywordtype">char</font> *name, 00314 <font class="keyword">const</font> <font class="keywordtype">char</font> *format, 00315 ...) 00316 { 00317 <a class="code" href="structDBusRealError.html">DBusRealError</a> *real; 00318 <a class="code" href="structDBusString.html">DBusString</a> str; 00319 va_list args; 00320 00321 <font class="keywordflow">if</font> (error == NULL) 00322 <font class="keywordflow">return</font>; 00323 00324 <font class="comment">/* it's a bug to pile up errors */</font> 00325 _dbus_return_if_error_is_set (error); 00326 _dbus_return_if_fail (name != NULL); 00327 00328 _dbus_assert (error-><a class="code" href="structDBusError.html#m0">name</a> == NULL); 00329 _dbus_assert (error-><a class="code" href="structDBusError.html#m1">message</a> == NULL); 00330 00331 <font class="keywordflow">if</font> (!_dbus_string_init (&str)) 00332 <font class="keywordflow">goto</font> nomem; 00333 00334 <font class="keywordflow">if</font> (format == NULL) 00335 { 00336 <font class="keywordflow">if</font> (!_dbus_string_append (&str, 00337 message_from_error (name))) 00338 { 00339 _dbus_string_free (&str); 00340 <font class="keywordflow">goto</font> nomem; 00341 } 00342 } 00343 <font class="keywordflow">else</font> 00344 { 00345 va_start (args, format); 00346 <font class="keywordflow">if</font> (!_dbus_string_append_printf_valist (&str, format, args)) 00347 { 00348 _dbus_string_free (&str); 00349 <font class="keywordflow">goto</font> nomem; 00350 } 00351 va_end (args); 00352 } 00353 00354 real = (<a class="code" href="structDBusRealError.html">DBusRealError</a> *)error; 00355 00356 <font class="keywordflow">if</font> (!_dbus_string_steal_data (&str, &real-><a class="code" href="structDBusRealError.html#m1">message</a>)) 00357 { 00358 _dbus_string_free (&str); 00359 <font class="keywordflow">goto</font> nomem; 00360 } 00361 00362 real-><a class="code" href="structDBusRealError.html#m0">name</a> = name; 00363 real-><a class="code" href="structDBusRealError.html#m2">const_message</a> = FALSE; 00364 00365 _dbus_string_free (&str); 00366 00367 <font class="keywordflow">return</font>; 00368 00369 nomem: 00370 dbus_set_error_const (error, DBUS_ERROR_NO_MEMORY, NULL); 00371 } 00372 <font class="comment">/* End public API */</font> </pre></div><hr><address align="right"><small>Generated on Wed Jun 9 05:01:25 2004 for D-BUS by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.15 </small></address> </body> </html>