Sophie

Sophie

distrib > Mandriva > 2007.0 > x86_64 > media > main-release > by-pkgid > 926d2d1e3111287cee1b0a4fad4fb4f6 > files > 61

lib64dbus-1_3-devel-0.92-6mdv2007.0.x86_64.rpm

<!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> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </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 &lt;stdarg.h&gt;</font>
00028 <font class="preprocessor">#include &lt;string.h&gt;</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-&gt;<a class="code" href="structDBusRealError.html#m0">name</a> = NULL;  
00161   real-&gt;<a class="code" href="structDBusRealError.html#m1">message</a> = NULL;
00162 
00163   real-&gt;<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-&gt;<a class="code" href="structDBusRealError.html#m2">const_message</a>)
00182     dbus_free (real-&gt;<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-&gt;<a class="code" href="structDBusError.html#m0">name</a> == NULL);
00213   _dbus_assert (error-&gt;<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-&gt;<a class="code" href="structDBusRealError.html#m0">name</a> = name;
00221   real-&gt;<a class="code" href="structDBusRealError.html#m1">message</a> = (<font class="keywordtype">char</font> *)message;
00222   real-&gt;<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-&gt;<a class="code" href="structDBusError.html#m0">name</a> != NULL &amp;&amp; error-&gt;<a class="code" href="structDBusError.html#m1">message</a> != NULL) ||
00266                 (error-&gt;<a class="code" href="structDBusError.html#m0">name</a> == NULL &amp;&amp; error-&gt;<a class="code" href="structDBusError.html#m1">message</a> == NULL));
00267   
00268   <font class="keywordflow">if</font> (error-&gt;<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 (&amp;str1, error-&gt;<a class="code" href="structDBusError.html#m0">name</a>);
00272       _dbus_string_init_const (&amp;str2, name);
00273       <font class="keywordflow">return</font> _dbus_string_equal (&amp;str1, &amp;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-&gt;<a class="code" href="structDBusError.html#m0">name</a> != NULL &amp;&amp; error-&gt;<a class="code" href="structDBusError.html#m1">message</a> != NULL) ||
00290                 (error-&gt;<a class="code" href="structDBusError.html#m0">name</a> == NULL &amp;&amp; error-&gt;<a class="code" href="structDBusError.html#m1">message</a> == NULL));
00291   <font class="keywordflow">return</font> error-&gt;<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-&gt;<a class="code" href="structDBusError.html#m0">name</a> == NULL);
00329   _dbus_assert (error-&gt;<a class="code" href="structDBusError.html#m1">message</a> == NULL);
00330 
00331   <font class="keywordflow">if</font> (!_dbus_string_init (&amp;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 (&amp;str,
00337                                 message_from_error (name)))
00338         {
00339           _dbus_string_free (&amp;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 (&amp;str, format, args))
00347         {
00348           _dbus_string_free (&amp;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 (&amp;str, &amp;real-&gt;<a class="code" href="structDBusRealError.html#m1">message</a>))
00357     {
00358       _dbus_string_free (&amp;str);
00359       <font class="keywordflow">goto</font> nomem;
00360     }
00361   
00362   real-&gt;<a class="code" href="structDBusRealError.html#m0">name</a> = name;
00363   real-&gt;<a class="code" href="structDBusRealError.html#m2">const_message</a> = FALSE;
00364 
00365   _dbus_string_free (&amp;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>