DragonNest/Common/SVNLib/doc/svn__error_8h-source.html
2024-12-19 09:48:26 +08:00

336 lines
34 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Subversion: svn_error.h 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.5.6 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<form action="search.php" method="get">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td><label>&nbsp;<u>S</u>earch&nbsp;for&nbsp;</label></td>
<td><input type="text" name="query" value="" size="20" accesskey="s"/></td>
</tr>
</table>
</form>
</li>
</ul>
</div>
<h1>svn_error.h</h1><a href="svn__error_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
<a name="l00002"></a>00002 <span class="comment"> * @copyright</span>
<a name="l00003"></a>00003 <span class="comment"> * ====================================================================</span>
<a name="l00004"></a>00004 <span class="comment"> * Copyright (c) 2000-2004 CollabNet. All rights reserved.</span>
<a name="l00005"></a>00005 <span class="comment"> *</span>
<a name="l00006"></a>00006 <span class="comment"> * This software is licensed as described in the file COPYING, which</span>
<a name="l00007"></a>00007 <span class="comment"> * you should have received as part of this distribution. The terms</span>
<a name="l00008"></a>00008 <span class="comment"> * are also available at http://subversion.tigris.org/license-1.html.</span>
<a name="l00009"></a>00009 <span class="comment"> * If newer versions of this license are posted there, you may use a</span>
<a name="l00010"></a>00010 <span class="comment"> * newer version instead, at your option.</span>
<a name="l00011"></a>00011 <span class="comment"> *</span>
<a name="l00012"></a>00012 <span class="comment"> * This software consists of voluntary contributions made by many</span>
<a name="l00013"></a>00013 <span class="comment"> * individuals. For exact contribution history, see the revision</span>
<a name="l00014"></a>00014 <span class="comment"> * history and logs, available at http://subversion.tigris.org/.</span>
<a name="l00015"></a>00015 <span class="comment"> * ====================================================================</span>
<a name="l00016"></a>00016 <span class="comment"> * @endcopyright</span>
<a name="l00017"></a>00017 <span class="comment"> *</span>
<a name="l00018"></a>00018 <span class="comment"> * @file svn_error.h</span>
<a name="l00019"></a>00019 <span class="comment"> * @brief Common exception handling for Subversion.</span>
<a name="l00020"></a>00020 <span class="comment"> */</span>
<a name="l00021"></a>00021
<a name="l00022"></a>00022
<a name="l00023"></a>00023
<a name="l00024"></a>00024
<a name="l00025"></a>00025 <span class="preprocessor">#ifndef SVN_ERROR_H</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define SVN_ERROR_H</span>
<a name="l00027"></a>00027 <span class="preprocessor"></span>
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;apr.h&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;apr_errno.h&gt;</span> <span class="comment">/* APR's error system */</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include &lt;apr_pools.h&gt;</span>
<a name="l00031"></a>00031
<a name="l00032"></a>00032 <span class="preprocessor">#ifndef DOXYGEN_SHOULD_SKIP_THIS</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define APR_WANT_STDIO</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#include &lt;apr_want.h&gt;</span>
<a name="l00036"></a>00036
<a name="l00037"></a>00037 <span class="preprocessor">#include "<a class="code" href="svn__types_8h.html" title="Subversion&amp;#39;s data types.">svn_types.h</a>"</span>
<a name="l00038"></a>00038
<a name="l00039"></a>00039 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
<a name="l00041"></a>00041 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
<a name="l00042"></a>00042 <span class="comment"></span>
<a name="l00043"></a>00043 <span class="comment">/** the best kind of (@c svn_error_t *) ! */</span>
<a name="l00044"></a><a class="code" href="svn__error_8h.html#657398222a237c3c8cc77dcabf427f63">00044</a> <span class="preprocessor">#define SVN_NO_ERROR 0</span>
<a name="l00045"></a>00045 <span class="preprocessor"></span>
<a name="l00046"></a>00046 <span class="comment">/* The actual error codes are kept in a separate file; see comments</span>
<a name="l00047"></a>00047 <span class="comment"> there for the reasons why. */</span>
<a name="l00048"></a>00048 <span class="preprocessor">#include "<a class="code" href="svn__error__codes_8h.html" title="Subversion error codes.">svn_error_codes.h</a>"</span>
<a name="l00049"></a>00049 <span class="comment"></span>
<a name="l00050"></a>00050 <span class="comment">/** Set the error location for debug mode. */</span>
<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="svn__error_8h.html#cc38737e1ce190a9184d4dd768e7cd8f" title="Set the error location for debug mode.">svn_error__locate</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *file, <span class="keywordtype">long</span> line);
<a name="l00052"></a>00052
<a name="l00053"></a>00053 <span class="comment"></span>
<a name="l00054"></a>00054 <span class="comment">/** Put an English description of @a statcode into @a buf and return @a buf,</span>
<a name="l00055"></a>00055 <span class="comment"> * NULL-terminated. @a statcode is either an svn error or apr error.</span>
<a name="l00056"></a>00056 <span class="comment"> */</span>
<a name="l00057"></a>00057 <span class="keywordtype">char</span> *<a class="code" href="svn__error_8h.html#e47ab028b9c77e76979ad8cb5b1d017c" title="Put an English description of statcode into buf and return buf, NULL-terminated.">svn_strerror</a>(apr_status_t statcode, <span class="keywordtype">char</span> *buf, apr_size_t bufsize);
<a name="l00058"></a>00058
<a name="l00059"></a>00059 <span class="comment"></span>
<a name="l00060"></a>00060 <span class="comment">/** If @a err has a custom error message, return that, otherwise</span>
<a name="l00061"></a>00061 <span class="comment"> * store the generic error string associated with @a err-&gt;apr_err into</span>
<a name="l00062"></a>00062 <span class="comment"> * @a buf (terminating with NULL) and return @a buf.</span>
<a name="l00063"></a>00063 <span class="comment"> *</span>
<a name="l00064"></a>00064 <span class="comment"> * @since New in 1.4.</span>
<a name="l00065"></a>00065 <span class="comment"> *</span>
<a name="l00066"></a>00066 <span class="comment"> * @note @a buf and @a bufsize are provided in the interface so that</span>
<a name="l00067"></a>00067 <span class="comment"> * this function is thread-safe and yet does no allocation.</span>
<a name="l00068"></a>00068 <span class="comment"> */</span>
<a name="l00069"></a>00069 <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="svn__error_8h.html#1b3b6a34086d2fff18e88906fa756f73" title="If err has a custom error message, return that, otherwise store the generic error...">svn_err_best_message</a>(<a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *err,
<a name="l00070"></a>00070 <span class="keywordtype">char</span> *buf, apr_size_t bufsize);
<a name="l00071"></a>00071
<a name="l00072"></a>00072
<a name="l00073"></a>00073 <span class="comment"></span>
<a name="l00074"></a>00074 <span class="comment">/** SVN error creation and destruction.</span>
<a name="l00075"></a>00075 <span class="comment"> *</span>
<a name="l00076"></a>00076 <span class="comment"> * @defgroup svn_error_error_creation_destroy Error creation and destruction</span>
<a name="l00077"></a>00077 <span class="comment"> * @{</span>
<a name="l00078"></a>00078 <span class="comment"> */</span>
<a name="l00079"></a>00079 <span class="comment"></span>
<a name="l00080"></a>00080 <span class="comment">/** Create a nested exception structure.</span>
<a name="l00081"></a>00081 <span class="comment"> *</span>
<a name="l00082"></a>00082 <span class="comment"> * Input: an APR or SVN custom error code,</span>
<a name="l00083"></a>00083 <span class="comment"> * a "child" error to wrap,</span>
<a name="l00084"></a>00084 <span class="comment"> * a specific message</span>
<a name="l00085"></a>00085 <span class="comment"> *</span>
<a name="l00086"></a>00086 <span class="comment"> * Returns: a new error structure (containing the old one).</span>
<a name="l00087"></a>00087 <span class="comment"> *</span>
<a name="l00088"></a>00088 <span class="comment"> * @note Errors are always allocated in a subpool of the global pool,</span>
<a name="l00089"></a>00089 <span class="comment"> * since an error's lifetime is generally not related to the</span>
<a name="l00090"></a>00090 <span class="comment"> * lifetime of any convenient pool. Errors must be freed</span>
<a name="l00091"></a>00091 <span class="comment"> * with svn_error_clear(). The specific message should be @c NULL</span>
<a name="l00092"></a>00092 <span class="comment"> * if there is nothing to add to the general message associated</span>
<a name="l00093"></a>00093 <span class="comment"> * with the error code.</span>
<a name="l00094"></a>00094 <span class="comment"> *</span>
<a name="l00095"></a>00095 <span class="comment"> * If creating the "bottommost" error in a chain, pass @c NULL for</span>
<a name="l00096"></a>00096 <span class="comment"> * the child argument.</span>
<a name="l00097"></a>00097 <span class="comment"> */</span>
<a name="l00098"></a>00098 <a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *<a class="code" href="group__svn__error__error__creation__destroy.html#g63cac13b078a6d0af98e74d61f7e355b" title="Create a nested exception structure.">svn_error_create</a>(apr_status_t apr_err,
<a name="l00099"></a>00099 <a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *child,
<a name="l00100"></a>00100 <span class="keyword">const</span> <span class="keywordtype">char</span> *message);
<a name="l00101"></a>00101 <span class="comment"></span>
<a name="l00102"></a>00102 <span class="comment">/** Wrapper macro to collect file and line information */</span>
<a name="l00103"></a>00103 <span class="preprocessor">#define svn_error_create \</span>
<a name="l00104"></a>00104 <span class="preprocessor"> (svn_error__locate(__FILE__,__LINE__), (svn_error_create))</span>
<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="comment"></span>
<a name="l00106"></a>00106 <span class="comment">/** Create an error structure with the given @a apr_err and @a child,</span>
<a name="l00107"></a>00107 <span class="comment"> * with a printf-style error message produced by passing @a fmt, using</span>
<a name="l00108"></a>00108 <span class="comment"> * apr_psprintf().</span>
<a name="l00109"></a>00109 <span class="comment"> */</span>
<a name="l00110"></a>00110 <a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *<a class="code" href="group__svn__error__error__creation__destroy.html#g09f1c3afa91d3ada4309d221a5c8334a" title="Create an error structure with the given apr_err and child, with a printf-style error...">svn_error_createf</a>(apr_status_t apr_err,
<a name="l00111"></a>00111 <a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *child,
<a name="l00112"></a>00112 <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt,
<a name="l00113"></a>00113 ...)
<a name="l00114"></a>00114 __attribute__ ((format(printf, 3, 4)));
<a name="l00115"></a>00115 <span class="comment"></span>
<a name="l00116"></a>00116 <span class="comment">/** Wrapper macro to collect file and line information */</span>
<a name="l00117"></a>00117 <span class="preprocessor">#define svn_error_createf \</span>
<a name="l00118"></a>00118 <span class="preprocessor"> (svn_error__locate(__FILE__,__LINE__), (svn_error_createf))</span>
<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="comment"></span>
<a name="l00120"></a>00120 <span class="comment">/** Wrap a @a status from an APR function. If @a fmt is NULL, this is</span>
<a name="l00121"></a>00121 <span class="comment"> * equivalent to svn_error_create(status,NULL,NULL). Otherwise,</span>
<a name="l00122"></a>00122 <span class="comment"> * the error message is constructed by formatting @a fmt and the</span>
<a name="l00123"></a>00123 <span class="comment"> * following arguments according to apr_psprintf(), and then</span>
<a name="l00124"></a>00124 <span class="comment"> * appending ": " and the error message corresponding to @a status.</span>
<a name="l00125"></a>00125 <span class="comment"> * (If UTF-8 translation of the APR error message fails, the ": " and</span>
<a name="l00126"></a>00126 <span class="comment"> * APR error are not appended to the error message.)</span>
<a name="l00127"></a>00127 <span class="comment"> */</span>
<a name="l00128"></a>00128 <a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *<a class="code" href="group__svn__error__error__creation__destroy.html#g9e9ee786420e268785aeb7e7f7ed0429" title="Wrap a status from an APR function.">svn_error_wrap_apr</a>(apr_status_t status, <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ...)
<a name="l00129"></a>00129 __attribute__((format(printf, 2, 3)));
<a name="l00130"></a>00130 <span class="comment"></span>
<a name="l00131"></a>00131 <span class="comment">/** Wrapper macro to collect file and line information */</span>
<a name="l00132"></a>00132 <span class="preprocessor">#define svn_error_wrap_apr \</span>
<a name="l00133"></a>00133 <span class="preprocessor"> (svn_error__locate(__FILE__,__LINE__), (svn_error_wrap_apr))</span>
<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="comment"></span>
<a name="l00135"></a>00135 <span class="comment">/** A quick n' easy way to create a wrapped exception with your own</span>
<a name="l00136"></a>00136 <span class="comment"> * message, before throwing it up the stack. (It uses all of the</span>
<a name="l00137"></a>00137 <span class="comment"> * @a child's fields.)</span>
<a name="l00138"></a>00138 <span class="comment"> */</span>
<a name="l00139"></a>00139 <a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *<a class="code" href="group__svn__error__error__creation__destroy.html#g9a02d9052446ffc08ecece578d1a3c2f" title="A quick n&amp;#39; easy way to create a wrapped exception with your own message, before...">svn_error_quick_wrap</a>(<a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *child, <span class="keyword">const</span> <span class="keywordtype">char</span> *new_msg);
<a name="l00140"></a>00140 <span class="comment"></span>
<a name="l00141"></a>00141 <span class="comment">/** Wrapper macro to collect file and line information */</span>
<a name="l00142"></a>00142 <span class="preprocessor">#define svn_error_quick_wrap \</span>
<a name="l00143"></a>00143 <span class="preprocessor"> (svn_error__locate(__FILE__,__LINE__), (svn_error_quick_wrap))</span>
<a name="l00144"></a>00144 <span class="preprocessor"></span><span class="comment"></span>
<a name="l00145"></a>00145 <span class="comment">/** Add @a new_err to the end of @a chain's chain of errors. The @a new_err</span>
<a name="l00146"></a>00146 <span class="comment"> * chain will be copied into @a chain's pool and destroyed, so @a new_err</span>
<a name="l00147"></a>00147 <span class="comment"> * itself becomes invalid after this function.</span>
<a name="l00148"></a>00148 <span class="comment"> */</span>
<a name="l00149"></a>00149 <span class="keywordtype">void</span> <a class="code" href="group__svn__error__error__creation__destroy.html#g0617c02787a33ecbf68dcf752fe17b34" title="Add new_err to the end of chain&amp;#39;s chain of errors.">svn_error_compose</a>(<a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *chain, <a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *new_err);
<a name="l00150"></a>00150 <span class="comment"></span>
<a name="l00151"></a>00151 <span class="comment">/** Return the root cause of @a err by finding the last error in its</span>
<a name="l00152"></a>00152 <span class="comment"> * chain (e.g. it or its children). @a err may be @c SVN_NO_ERROR, in</span>
<a name="l00153"></a>00153 <span class="comment"> * which case @c SVN_NO_ERROR is returned.</span>
<a name="l00154"></a>00154 <span class="comment"> *</span>
<a name="l00155"></a>00155 <span class="comment"> * @since New in 1.5.</span>
<a name="l00156"></a>00156 <span class="comment"> */</span>
<a name="l00157"></a>00157 <a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *<a class="code" href="group__svn__error__error__creation__destroy.html#g963dd4ae636823a71c36f4a1abec70f7" title="Return the root cause of err by finding the last error in its chain (e.g.">svn_error_root_cause</a>(<a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *err);
<a name="l00158"></a>00158 <span class="comment"></span>
<a name="l00159"></a>00159 <span class="comment">/** Create a new error that is a deep copy of @a err and return it.</span>
<a name="l00160"></a>00160 <span class="comment"> *</span>
<a name="l00161"></a>00161 <span class="comment"> * @since New in 1.2.</span>
<a name="l00162"></a>00162 <span class="comment"> */</span>
<a name="l00163"></a>00163 <a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *<a class="code" href="group__svn__error__error__creation__destroy.html#gbbe0febe6b533b445347f8b7eaca448b" title="Create a new error that is a deep copy of err and return it.">svn_error_dup</a>(<a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *err);
<a name="l00164"></a>00164 <span class="comment"></span>
<a name="l00165"></a>00165 <span class="comment">/** Free the memory used by @a error, as well as all ancestors and</span>
<a name="l00166"></a>00166 <span class="comment"> * descendants of @a error.</span>
<a name="l00167"></a>00167 <span class="comment"> *</span>
<a name="l00168"></a>00168 <span class="comment"> * Unlike other Subversion objects, errors are managed explicitly; you</span>
<a name="l00169"></a>00169 <span class="comment"> * MUST clear an error if you are ignoring it, or you are leaking memory.</span>
<a name="l00170"></a>00170 <span class="comment"> * For convenience, @a error may be @c NULL, in which case this function does</span>
<a name="l00171"></a>00171 <span class="comment"> * nothing; thus, svn_error_clear(svn_foo(...)) works as an idiom to</span>
<a name="l00172"></a>00172 <span class="comment"> * ignore errors.</span>
<a name="l00173"></a>00173 <span class="comment"> */</span>
<a name="l00174"></a>00174 <span class="keywordtype">void</span> <a class="code" href="group__svn__error__error__creation__destroy.html#gc8bb06e98118a482ccf534fe38c33495" title="Free the memory used by error, as well as all ancestors and descendants of error...">svn_error_clear</a>(<a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *error);
<a name="l00175"></a>00175
<a name="l00176"></a>00176 <span class="comment"></span>
<a name="l00177"></a>00177 <span class="comment">/**</span>
<a name="l00178"></a>00178 <span class="comment"> * Very basic default error handler: print out error stack @a error to the</span>
<a name="l00179"></a>00179 <span class="comment"> * stdio stream @a stream, with each error prefixed by @a prefix, and quit</span>
<a name="l00180"></a>00180 <span class="comment"> * iff the @a fatal flag is set. Allocations are performed in the @a error's</span>
<a name="l00181"></a>00181 <span class="comment"> * pool.</span>
<a name="l00182"></a>00182 <span class="comment"> *</span>
<a name="l00183"></a>00183 <span class="comment"> * If you're not sure what prefix to pass, just pass "svn: ". That's</span>
<a name="l00184"></a>00184 <span class="comment"> * what code that used to call svn_handle_error() and now calls</span>
<a name="l00185"></a>00185 <span class="comment"> * svn_handle_error2() does.</span>
<a name="l00186"></a>00186 <span class="comment"> *</span>
<a name="l00187"></a>00187 <span class="comment"> * @since New in 1.2.</span>
<a name="l00188"></a>00188 <span class="comment"> */</span>
<a name="l00189"></a>00189 <span class="keywordtype">void</span> <a class="code" href="group__svn__error__error__creation__destroy.html#gf9008085ded8f0af940f38a3cad6edb1" title="Very basic default error handler: print out error stack error to the stdio stream...">svn_handle_error2</a>(<a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *error,
<a name="l00190"></a>00190 FILE *stream,
<a name="l00191"></a>00191 <a class="code" href="svn__types_8h.html#22b35baddc4213c688d1bb12feea1024" title="YABT: Yet Another Boolean Type.">svn_boolean_t</a> fatal,
<a name="l00192"></a>00192 <span class="keyword">const</span> <span class="keywordtype">char</span> *prefix);
<a name="l00193"></a>00193 <span class="comment"></span>
<a name="l00194"></a>00194 <span class="comment">/** Like svn_handle_error2() but with @c prefix set to "svn: "</span>
<a name="l00195"></a>00195 <span class="comment"> *</span>
<a name="l00196"></a>00196 <span class="comment"> * @deprecated Provided for backward compatibility with the 1.1 API.</span>
<a name="l00197"></a>00197 <span class="comment"> */</span>
<a name="l00198"></a>00198 <span class="keywordtype">void</span> <a class="code" href="group__svn__error__error__creation__destroy.html#g9eb04d5b9b6f6ad76132a7fb822aa77f" title="Like svn_handle_error2() but with prefix set to &amp;quot;svn: &amp;quot;.">svn_handle_error</a>(<a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *error,
<a name="l00199"></a>00199 FILE *stream,
<a name="l00200"></a>00200 <a class="code" href="svn__types_8h.html#22b35baddc4213c688d1bb12feea1024" title="YABT: Yet Another Boolean Type.">svn_boolean_t</a> fatal);
<a name="l00201"></a>00201 <span class="comment"></span>
<a name="l00202"></a>00202 <span class="comment">/**</span>
<a name="l00203"></a>00203 <span class="comment"> * Very basic default warning handler: print out the error @a error to the</span>
<a name="l00204"></a>00204 <span class="comment"> * stdio stream @a stream, prefixed by @a prefix. Allocations are</span>
<a name="l00205"></a>00205 <span class="comment"> * performed in the error's pool.</span>
<a name="l00206"></a>00206 <span class="comment"> *</span>
<a name="l00207"></a>00207 <span class="comment"> * @since New in 1.2.</span>
<a name="l00208"></a>00208 <span class="comment"> */</span>
<a name="l00209"></a>00209 <span class="keywordtype">void</span> <a class="code" href="group__svn__error__error__creation__destroy.html#g34f08713630352a0546038088ffa6479" title="Very basic default warning handler: print out the error error to the stdio stream...">svn_handle_warning2</a>(FILE *stream, <a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *error, <span class="keyword">const</span> <span class="keywordtype">char</span> *prefix);
<a name="l00210"></a>00210 <span class="comment"></span>
<a name="l00211"></a>00211 <span class="comment">/** Like svn_handle_warning2() but with @c prefix set to "svn: "</span>
<a name="l00212"></a>00212 <span class="comment"> */</span>
<a name="l00213"></a>00213 <span class="keywordtype">void</span> <a class="code" href="group__svn__error__error__creation__destroy.html#g34bb30baf6f2da4abad396082111d671" title="Like svn_handle_warning2() but with prefix set to &amp;quot;svn: &amp;quot;.">svn_handle_warning</a>(FILE *stream, <a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *error);
<a name="l00214"></a>00214
<a name="l00215"></a>00215 <span class="comment"></span>
<a name="l00216"></a>00216 <span class="comment">/** A statement macro for checking error values.</span>
<a name="l00217"></a>00217 <span class="comment"> *</span>
<a name="l00218"></a>00218 <span class="comment"> * Evaluate @a expr. If it yields an error, return that error from the</span>
<a name="l00219"></a>00219 <span class="comment"> * current function. Otherwise, continue.</span>
<a name="l00220"></a>00220 <span class="comment"> *</span>
<a name="l00221"></a>00221 <span class="comment"> * The &lt;tt&gt;do { ... } while (0)&lt;/tt&gt; wrapper has no semantic effect,</span>
<a name="l00222"></a>00222 <span class="comment"> * but it makes this macro syntactically equivalent to the expression</span>
<a name="l00223"></a>00223 <span class="comment"> * statement it resembles. Without it, statements like</span>
<a name="l00224"></a>00224 <span class="comment"> *</span>
<a name="l00225"></a>00225 <span class="comment"> * @code</span>
<a name="l00226"></a>00226 <span class="comment"> * if (a)</span>
<a name="l00227"></a>00227 <span class="comment"> * SVN_ERR (some operation);</span>
<a name="l00228"></a>00228 <span class="comment"> * else</span>
<a name="l00229"></a>00229 <span class="comment"> * foo;</span>
<a name="l00230"></a>00230 <span class="comment"> * @endcode</span>
<a name="l00231"></a>00231 <span class="comment"> *</span>
<a name="l00232"></a>00232 <span class="comment"> * would not mean what they appear to.</span>
<a name="l00233"></a>00233 <span class="comment"> */</span>
<a name="l00234"></a>00234 <span class="preprocessor">#define SVN_ERR(expr) \</span>
<a name="l00235"></a>00235 <span class="preprocessor"> do { \</span>
<a name="l00236"></a>00236 <span class="preprocessor"> svn_error_t *svn_err__temp = (expr); \</span>
<a name="l00237"></a>00237 <span class="preprocessor"> if (svn_err__temp) \</span>
<a name="l00238"></a>00238 <span class="preprocessor"> return svn_err__temp; \</span>
<a name="l00239"></a>00239 <span class="preprocessor"> } while (0)</span>
<a name="l00240"></a>00240 <span class="preprocessor"></span>
<a name="l00241"></a>00241 <span class="comment"></span>
<a name="l00242"></a>00242 <span class="comment">/** A statement macro, very similar to @c SVN_ERR.</span>
<a name="l00243"></a>00243 <span class="comment"> *</span>
<a name="l00244"></a>00244 <span class="comment"> * This macro will wrap the error with the specified text before</span>
<a name="l00245"></a>00245 <span class="comment"> * returning the error.</span>
<a name="l00246"></a>00246 <span class="comment"> */</span>
<a name="l00247"></a>00247 <span class="preprocessor">#define SVN_ERR_W(expr, wrap_msg) \</span>
<a name="l00248"></a>00248 <span class="preprocessor"> do { \</span>
<a name="l00249"></a>00249 <span class="preprocessor"> svn_error_t *svn_err__temp = (expr); \</span>
<a name="l00250"></a>00250 <span class="preprocessor"> if (svn_err__temp) \</span>
<a name="l00251"></a>00251 <span class="preprocessor"> return svn_error_quick_wrap(svn_err__temp, wrap_msg); \</span>
<a name="l00252"></a>00252 <span class="preprocessor"> } while (0)</span>
<a name="l00253"></a>00253 <span class="preprocessor"></span>
<a name="l00254"></a>00254 <span class="comment"></span>
<a name="l00255"></a>00255 <span class="comment">/** A statement macro, similar to @c SVN_ERR, but returns an integer.</span>
<a name="l00256"></a>00256 <span class="comment"> *</span>
<a name="l00257"></a>00257 <span class="comment"> * Evaluate @a expr. If it yields an error, handle that error and</span>
<a name="l00258"></a>00258 <span class="comment"> * return @c EXIT_FAILURE.</span>
<a name="l00259"></a>00259 <span class="comment"> */</span>
<a name="l00260"></a>00260 <span class="preprocessor">#define SVN_INT_ERR(expr) \</span>
<a name="l00261"></a>00261 <span class="preprocessor"> do { \</span>
<a name="l00262"></a>00262 <span class="preprocessor"> svn_error_t *svn_err__temp = (expr); \</span>
<a name="l00263"></a>00263 <span class="preprocessor"> if (svn_err__temp) { \</span>
<a name="l00264"></a>00264 <span class="preprocessor"> svn_handle_error2(svn_err__temp, stderr, FALSE, "svn: "); \</span>
<a name="l00265"></a>00265 <span class="preprocessor"> svn_error_clear(svn_err__temp); \</span>
<a name="l00266"></a>00266 <span class="preprocessor"> return EXIT_FAILURE; } \</span>
<a name="l00267"></a>00267 <span class="preprocessor"> } while (0)</span>
<a name="l00268"></a>00268 <span class="preprocessor"></span><span class="comment"></span>
<a name="l00269"></a>00269 <span class="comment">/** @} */</span>
<a name="l00270"></a>00270 <span class="comment"></span>
<a name="l00271"></a>00271 <span class="comment">/**</span>
<a name="l00272"></a>00272 <span class="comment"> * Return TRUE if @a err is an error specifically related to locking a</span>
<a name="l00273"></a>00273 <span class="comment"> * path in the repository, FALSE otherwise.</span>
<a name="l00274"></a>00274 <span class="comment"> *</span>
<a name="l00275"></a>00275 <span class="comment"> * SVN_ERR_FS_OUT_OF_DATE is in here because it's a non-fatal error</span>
<a name="l00276"></a>00276 <span class="comment"> * that can be thrown when attempting to lock an item.</span>
<a name="l00277"></a>00277 <span class="comment"> *</span>
<a name="l00278"></a>00278 <span class="comment"> * @since New in 1.2.</span>
<a name="l00279"></a>00279 <span class="comment"> */</span>
<a name="l00280"></a>00280 <span class="preprocessor">#define SVN_ERR_IS_LOCK_ERROR(err) \</span>
<a name="l00281"></a>00281 <span class="preprocessor"> (err-&gt;apr_err == SVN_ERR_FS_PATH_ALREADY_LOCKED || \</span>
<a name="l00282"></a>00282 <span class="preprocessor"> err-&gt;apr_err == SVN_ERR_FS_OUT_OF_DATE) \</span>
<a name="l00283"></a>00283 <span class="preprocessor"></span>
<a name="l00284"></a>00284 <span class="preprocessor"></span><span class="comment">/**</span>
<a name="l00285"></a>00285 <span class="comment"> * Return TRUE if @a err is an error specifically related to unlocking</span>
<a name="l00286"></a>00286 <span class="comment"> * a path in the repository, FALSE otherwise.</span>
<a name="l00287"></a>00287 <span class="comment"> *</span>
<a name="l00288"></a>00288 <span class="comment"> * @since New in 1.2.</span>
<a name="l00289"></a>00289 <span class="comment"> */</span>
<a name="l00290"></a>00290 <span class="preprocessor">#define SVN_ERR_IS_UNLOCK_ERROR(err) \</span>
<a name="l00291"></a>00291 <span class="preprocessor"> (err-&gt;apr_err == SVN_ERR_FS_PATH_NOT_LOCKED || \</span>
<a name="l00292"></a>00292 <span class="preprocessor"> err-&gt;apr_err == SVN_ERR_FS_BAD_LOCK_TOKEN || \</span>
<a name="l00293"></a>00293 <span class="preprocessor"> err-&gt;apr_err == SVN_ERR_FS_LOCK_OWNER_MISMATCH || \</span>
<a name="l00294"></a>00294 <span class="preprocessor"> err-&gt;apr_err == SVN_ERR_FS_NO_SUCH_LOCK || \</span>
<a name="l00295"></a>00295 <span class="preprocessor"> err-&gt;apr_err == SVN_ERR_RA_NOT_LOCKED || \</span>
<a name="l00296"></a>00296 <span class="preprocessor"> err-&gt;apr_err == SVN_ERR_FS_LOCK_EXPIRED)</span>
<a name="l00297"></a>00297 <span class="preprocessor"></span>
<a name="l00298"></a>00298
<a name="l00299"></a>00299 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00300"></a>00300 <span class="preprocessor"></span>}
<a name="l00301"></a>00301 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
<a name="l00302"></a>00302
<a name="l00303"></a>00303 <span class="preprocessor">#endif </span><span class="comment">/* SVN_ERROR_H */</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Fri Oct 24 16:18:25 2008 for Subversion by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>