Annotation of embedaddon/php/ext/intl/intl_error.c, revision 1.1.1.1
1.1 misho 1: /*
2: +----------------------------------------------------------------------+
3: | PHP Version 5 |
4: +----------------------------------------------------------------------+
5: | This source file is subject to version 3.01 of the PHP license, |
6: | that is bundled with this package in the file LICENSE, and is |
7: | available through the world-wide-web at the following url: |
8: | http://www.php.net/license/3_01.txt |
9: | If you did not receive a copy of the PHP license and are unable to |
10: | obtain it through the world-wide-web, please send a note to |
11: | license@php.net so we can mail you a copy immediately. |
12: +----------------------------------------------------------------------+
13: | Authors: Vadim Savchuk <vsavchuk@productengine.com> |
14: | Dmitry Lakhtyuk <dlakhtyuk@productengine.com> |
15: | Stanislav Malyshev <stas@zend.com> |
16: +----------------------------------------------------------------------+
17: */
18:
19: #ifdef HAVE_CONFIG_H
20: #include "config.h"
21: #endif
22:
23: #include <php.h>
24:
25: #include "php_intl.h"
26: #include "intl_error.h"
27:
28: ZEND_EXTERN_MODULE_GLOBALS( intl )
29:
30: /* {{{ intl_error* intl_g_error_get()
31: * Return global error structure.
32: */
33: static intl_error* intl_g_error_get( TSRMLS_D )
34: {
35: return &INTL_G( g_error );
36: }
37: /* }}} */
38:
39: /* {{{ void intl_free_custom_error_msg( intl_error* err )
40: * Free mem.
41: */
42: static void intl_free_custom_error_msg( intl_error* err TSRMLS_DC )
43: {
44: if( !err && !( err = intl_g_error_get( TSRMLS_C ) ) )
45: return;
46:
47: if(err->free_custom_error_message ) {
48: efree( err->custom_error_message );
49: }
50:
51: err->custom_error_message = NULL;
52: err->free_custom_error_message = 0;
53: }
54: /* }}} */
55:
56: /* {{{ intl_error* intl_error_create()
57: * Create and initialize internals of 'intl_error'.
58: */
59: intl_error* intl_error_create( TSRMLS_D )
60: {
61: intl_error* err = ecalloc( 1, sizeof( intl_error ) );
62:
63: intl_error_init( err TSRMLS_CC );
64:
65: return err;
66: }
67: /* }}} */
68:
69: /* {{{ void intl_error_init( intl_error* coll_error )
70: * Initialize internals of 'intl_error'.
71: */
72: void intl_error_init( intl_error* err TSRMLS_DC )
73: {
74: if( !err && !( err = intl_g_error_get( TSRMLS_C ) ) )
75: return;
76:
77: err->code = U_ZERO_ERROR;
78: err->custom_error_message = NULL;
79: err->free_custom_error_message = 0;
80: }
81: /* }}} */
82:
83: /* {{{ void intl_error_reset( intl_error* err )
84: * Set last error code to 0 and unset last error message
85: */
86: void intl_error_reset( intl_error* err TSRMLS_DC )
87: {
88: if( !err && !( err = intl_g_error_get( TSRMLS_C ) ) )
89: return;
90:
91: err->code = U_ZERO_ERROR;
92:
93: intl_free_custom_error_msg( err TSRMLS_CC );
94: }
95: /* }}} */
96:
97: /* {{{ void intl_error_set_custom_msg( intl_error* err, char* msg, int copyMsg )
98: * Set last error message to msg copying it if needed.
99: */
100: void intl_error_set_custom_msg( intl_error* err, char* msg, int copyMsg TSRMLS_DC )
101: {
102: if( !msg )
103: return;
104:
105: if(!err && INTL_G(error_level)) {
106: php_error_docref(NULL TSRMLS_CC, INTL_G(error_level), "%s", msg);
107: }
108: if( !err && !( err = intl_g_error_get( TSRMLS_C ) ) )
109: return;
110:
111: /* Free previous message if any */
112: intl_free_custom_error_msg( err TSRMLS_CC );
113:
114: /* Mark message copied if any */
115: err->free_custom_error_message = copyMsg;
116:
117: /* Set user's error text message */
118: err->custom_error_message = copyMsg ? estrdup( msg ) : msg;
119: }
120: /* }}} */
121:
122: /* {{{ const char* intl_error_get_message( intl_error* err )
123: * Create output message in format "<intl_error_text>: <extra_user_error_text>".
124: */
125: char* intl_error_get_message( intl_error* err TSRMLS_DC )
126: {
127: const char* uErrorName = NULL;
128: char* errMessage = 0;
129:
130: if( !err && !( err = intl_g_error_get( TSRMLS_C ) ) )
131: return estrdup( "" );
132:
133: uErrorName = u_errorName( err->code );
134:
135: /* Format output string */
136: if( err->custom_error_message )
137: {
138: spprintf( &errMessage, 0, "%s: %s", err->custom_error_message, uErrorName );
139: }
140: else
141: {
142: spprintf( &errMessage, 0, "%s", uErrorName );
143: }
144:
145: return errMessage;
146: }
147: /* }}} */
148:
149: /* {{{ void intl_error_set_code( intl_error* err, UErrorCode err_code )
150: * Set last error code.
151: */
152: void intl_error_set_code( intl_error* err, UErrorCode err_code TSRMLS_DC )
153: {
154: if( !err && !( err = intl_g_error_get( TSRMLS_C ) ) )
155: return;
156:
157: err->code = err_code;
158: }
159: /* }}} */
160:
161: /* {{{ void intl_error_get_code( intl_error* err )
162: * Return last error code.
163: */
164: UErrorCode intl_error_get_code( intl_error* err TSRMLS_DC )
165: {
166: if( !err && !( err = intl_g_error_get( TSRMLS_C ) ) )
167: return U_ZERO_ERROR;
168:
169: return err->code;
170: }
171: /* }}} */
172:
173: /* {{{ void intl_error_set( intl_error* err, UErrorCode code, char* msg, int copyMsg )
174: * Set error code and message.
175: */
176: void intl_error_set( intl_error* err, UErrorCode code, char* msg, int copyMsg TSRMLS_DC )
177: {
178: intl_error_set_code( err, code TSRMLS_CC );
179: intl_error_set_custom_msg( err, msg, copyMsg TSRMLS_CC );
180: }
181: /* }}} */
182:
183: /* {{{ void intl_errors_set( intl_error* err, UErrorCode code, char* msg, int copyMsg )
184: * Set error code and message.
185: */
186: void intl_errors_set( intl_error* err, UErrorCode code, char* msg, int copyMsg TSRMLS_DC )
187: {
188: intl_errors_set_code( err, code TSRMLS_CC );
189: intl_errors_set_custom_msg( err, msg, copyMsg TSRMLS_CC );
190: }
191: /* }}} */
192:
193: /* {{{ void intl_errors_reset( intl_error* err )
194: */
195: void intl_errors_reset( intl_error* err TSRMLS_DC )
196: {
197: if(err) {
198: intl_error_reset( err TSRMLS_CC );
199: }
200: intl_error_reset( NULL TSRMLS_CC );
201: }
202: /* }}} */
203:
204: /* {{{ void intl_errors_set_custom_msg( intl_error* err, char* msg, int copyMsg )
205: */
206: void intl_errors_set_custom_msg( intl_error* err, char* msg, int copyMsg TSRMLS_DC )
207: {
208: if(err) {
209: intl_error_set_custom_msg( err, msg, copyMsg TSRMLS_CC );
210: }
211: intl_error_set_custom_msg( NULL, msg, copyMsg TSRMLS_CC );
212: }
213: /* }}} */
214:
215: /* {{{ intl_errors_set_code( intl_error* err, UErrorCode err_code )
216: */
217: void intl_errors_set_code( intl_error* err, UErrorCode err_code TSRMLS_DC )
218: {
219: if(err) {
220: intl_error_set_code( err, err_code TSRMLS_CC );
221: }
222: intl_error_set_code( NULL, err_code TSRMLS_CC );
223: }
224: /* }}} */
225:
226: /*
227: * Local variables:
228: * tab-width: 4
229: * c-basic-offset: 4
230: * End:
231: * vim600: noet sw=4 ts=4 fdm=marker
232: * vim<600: noet sw=4 ts=4
233: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>