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>