Annotation of embedaddon/php/ext/intl/resourcebundle/resourcebundle.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: Hans-Peter Oeri (University of St.Gallen) <hp@oeri.ch> |
14: +----------------------------------------------------------------------+
15: */
16:
17: #include <unicode/ures.h>
18:
19: #include <zend.h>
20: #include <zend_API.h>
21:
22: #include "intl_convert.h"
23: #include "intl_data.h"
24: #include "resourcebundle/resourcebundle_class.h"
25:
26: /* {{{ ResourceBundle_extract_value */
27: void resourcebundle_extract_value( zval *return_value, ResourceBundle_object *source TSRMLS_DC )
28: {
29: UResType restype;
30: const UChar* ufield;
31: const uint8_t* bfield;
32: const int32_t* vfield;
33: int32_t ilen;
34: int i;
35: long lfield;
36: ResourceBundle_object* newrb;
37:
38: restype = ures_getType( source->child );
39: switch (restype)
40: {
41: case URES_STRING:
42: ufield = ures_getString( source->child, &ilen, &INTL_DATA_ERROR_CODE(source) );
43: INTL_METHOD_CHECK_STATUS(source, "Failed to retrieve string value");
44: INTL_METHOD_RETVAL_UTF8(source, ufield, ilen, 0);
45: break;
46:
47: case URES_BINARY:
48: bfield = ures_getBinary( source->child, &ilen, &INTL_DATA_ERROR_CODE(source) );
49: INTL_METHOD_CHECK_STATUS(source, "Failed to retrieve binary value");
50: ZVAL_STRINGL( return_value, (char *) bfield, ilen, 1 );
51: break;
52:
53: case URES_INT:
54: lfield = ures_getInt( source->child, &INTL_DATA_ERROR_CODE(source) );
55: INTL_METHOD_CHECK_STATUS(source, "Failed to retrieve integer value");
56: ZVAL_LONG( return_value, lfield );
57: break;
58:
59: case URES_INT_VECTOR:
60: vfield = ures_getIntVector( source->child, &ilen, &INTL_DATA_ERROR_CODE(source) );
61: INTL_METHOD_CHECK_STATUS(source, "Failed to retrieve vector value");
62: array_init( return_value );
63: for (i=0; i<ilen; i++) {
64: add_next_index_long( return_value, vfield[i] );
65: }
66: break;
67:
68: case URES_ARRAY:
69: case URES_TABLE:
70: object_init_ex( return_value, ResourceBundle_ce_ptr );
71: newrb = (ResourceBundle_object *) zend_object_store_get_object( return_value TSRMLS_CC );
72: newrb->me = source->child;
73: source->child = NULL;
74: intl_errors_reset(INTL_DATA_ERROR_P(source) TSRMLS_CC);
75: break;
76:
77: default:
78: intl_errors_set(INTL_DATA_ERROR_P(source), U_ILLEGAL_ARGUMENT_ERROR, "Unknown resource type", 0 TSRMLS_CC);
79: RETURN_FALSE;
80: break;
81: }
82: }
83: /* }}} */
84:
85: /*
86: * Local variables:
87: * tab-width: 4
88: * c-basic-offset: 4
89: * End:
90: * vim600: noet sw=4 ts=4 fdm=marker
91: * vim<600: noet sw=4 ts=4
92: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>