common_error.c 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  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. +----------------------------------------------------------------------+
  16. */
  17. #ifdef HAVE_CONFIG_H
  18. #include "config.h"
  19. #endif
  20. #include "php_intl.h"
  21. #include "intl_error.h"
  22. #include "common_error.h"
  23. /* {{{ proto int intl_get_error_code()
  24. * Get code of the last occurred error.
  25. */
  26. PHP_FUNCTION( intl_get_error_code )
  27. {
  28. RETURN_LONG( intl_error_get_code( NULL TSRMLS_CC ) );
  29. }
  30. /* }}} */
  31. /* {{{ proto string intl_get_error_message()
  32. * Get text description of the last occurred error.
  33. */
  34. PHP_FUNCTION( intl_get_error_message )
  35. {
  36. char* message = intl_error_get_message( NULL TSRMLS_CC );
  37. RETURN_STRING( message, FALSE );
  38. }
  39. /* }}} */
  40. /* {{{ proto bool intl_is_failure()
  41. * Check whether the given error code indicates a failure.
  42. * Returns true if it does, and false if the code
  43. * indicates success or a warning.
  44. */
  45. PHP_FUNCTION( intl_is_failure )
  46. {
  47. long err_code;
  48. /* Parse parameters. */
  49. if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "l",
  50. &err_code ) == FAILURE )
  51. {
  52. intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
  53. "intl_is_failure: unable to parse input params", 0 TSRMLS_CC );
  54. RETURN_FALSE;
  55. }
  56. RETURN_BOOL( U_FAILURE( err_code ) );
  57. }
  58. /* {{{ proto string intl_error_name()
  59. * Return a string for a given error code.
  60. * The string will be the same as the name of the error code constant.
  61. */
  62. PHP_FUNCTION( intl_error_name )
  63. {
  64. long err_code;
  65. /* Parse parameters. */
  66. if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "l",
  67. &err_code ) == FAILURE )
  68. {
  69. intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
  70. "intl_error_name: unable to parse input params", 0 TSRMLS_CC );
  71. RETURN_FALSE;
  72. }
  73. RETURN_STRING( (char*)u_errorName( err_code ), 1 );
  74. }
  75. /* }}} */
  76. /* {{{ intl_expose_icu_error_codes
  77. * Expose ICU error codes
  78. */
  79. void intl_expose_icu_error_codes( INIT_FUNC_ARGS )
  80. {
  81. #define INTL_EXPOSE_CONST(x) REGISTER_LONG_CONSTANT(#x, x, CONST_CS)
  82. /* Warnings */
  83. INTL_EXPOSE_CONST( U_USING_FALLBACK_WARNING );
  84. INTL_EXPOSE_CONST( U_ERROR_WARNING_START );
  85. INTL_EXPOSE_CONST( U_USING_DEFAULT_WARNING );
  86. INTL_EXPOSE_CONST( U_SAFECLONE_ALLOCATED_WARNING );
  87. INTL_EXPOSE_CONST( U_STATE_OLD_WARNING );
  88. INTL_EXPOSE_CONST( U_STRING_NOT_TERMINATED_WARNING );
  89. INTL_EXPOSE_CONST( U_SORT_KEY_TOO_SHORT_WARNING );
  90. INTL_EXPOSE_CONST( U_AMBIGUOUS_ALIAS_WARNING );
  91. INTL_EXPOSE_CONST( U_DIFFERENT_UCA_VERSION );
  92. INTL_EXPOSE_CONST( U_ERROR_WARNING_LIMIT );
  93. /* Standard errors */
  94. INTL_EXPOSE_CONST( U_ZERO_ERROR );
  95. INTL_EXPOSE_CONST( U_ILLEGAL_ARGUMENT_ERROR );
  96. INTL_EXPOSE_CONST( U_MISSING_RESOURCE_ERROR );
  97. INTL_EXPOSE_CONST( U_INVALID_FORMAT_ERROR );
  98. INTL_EXPOSE_CONST( U_FILE_ACCESS_ERROR );
  99. INTL_EXPOSE_CONST( U_INTERNAL_PROGRAM_ERROR );
  100. INTL_EXPOSE_CONST( U_MESSAGE_PARSE_ERROR );
  101. INTL_EXPOSE_CONST( U_MEMORY_ALLOCATION_ERROR );
  102. INTL_EXPOSE_CONST( U_INDEX_OUTOFBOUNDS_ERROR );
  103. INTL_EXPOSE_CONST( U_PARSE_ERROR );
  104. INTL_EXPOSE_CONST( U_INVALID_CHAR_FOUND );
  105. INTL_EXPOSE_CONST( U_TRUNCATED_CHAR_FOUND );
  106. INTL_EXPOSE_CONST( U_ILLEGAL_CHAR_FOUND );
  107. INTL_EXPOSE_CONST( U_INVALID_TABLE_FORMAT );
  108. INTL_EXPOSE_CONST( U_INVALID_TABLE_FILE );
  109. INTL_EXPOSE_CONST( U_BUFFER_OVERFLOW_ERROR );
  110. INTL_EXPOSE_CONST( U_UNSUPPORTED_ERROR );
  111. INTL_EXPOSE_CONST( U_RESOURCE_TYPE_MISMATCH );
  112. INTL_EXPOSE_CONST( U_ILLEGAL_ESCAPE_SEQUENCE );
  113. INTL_EXPOSE_CONST( U_UNSUPPORTED_ESCAPE_SEQUENCE );
  114. INTL_EXPOSE_CONST( U_NO_SPACE_AVAILABLE );
  115. INTL_EXPOSE_CONST( U_CE_NOT_FOUND_ERROR );
  116. INTL_EXPOSE_CONST( U_PRIMARY_TOO_LONG_ERROR );
  117. INTL_EXPOSE_CONST( U_STATE_TOO_OLD_ERROR );
  118. INTL_EXPOSE_CONST( U_TOO_MANY_ALIASES_ERROR );
  119. INTL_EXPOSE_CONST( U_ENUM_OUT_OF_SYNC_ERROR );
  120. INTL_EXPOSE_CONST( U_INVARIANT_CONVERSION_ERROR );
  121. INTL_EXPOSE_CONST( U_INVALID_STATE_ERROR );
  122. INTL_EXPOSE_CONST( U_COLLATOR_VERSION_MISMATCH );
  123. INTL_EXPOSE_CONST( U_USELESS_COLLATOR_ERROR );
  124. INTL_EXPOSE_CONST( U_NO_WRITE_PERMISSION );
  125. INTL_EXPOSE_CONST( U_STANDARD_ERROR_LIMIT );
  126. /* The error code range 0x10000 0x10100 are reserved for Transliterator */
  127. INTL_EXPOSE_CONST( U_BAD_VARIABLE_DEFINITION );
  128. INTL_EXPOSE_CONST( U_PARSE_ERROR_START );
  129. INTL_EXPOSE_CONST( U_MALFORMED_RULE );
  130. INTL_EXPOSE_CONST( U_MALFORMED_SET );
  131. INTL_EXPOSE_CONST( U_MALFORMED_SYMBOL_REFERENCE );
  132. INTL_EXPOSE_CONST( U_MALFORMED_UNICODE_ESCAPE );
  133. INTL_EXPOSE_CONST( U_MALFORMED_VARIABLE_DEFINITION );
  134. INTL_EXPOSE_CONST( U_MALFORMED_VARIABLE_REFERENCE );
  135. INTL_EXPOSE_CONST( U_MISMATCHED_SEGMENT_DELIMITERS );
  136. INTL_EXPOSE_CONST( U_MISPLACED_ANCHOR_START );
  137. INTL_EXPOSE_CONST( U_MISPLACED_CURSOR_OFFSET );
  138. INTL_EXPOSE_CONST( U_MISPLACED_QUANTIFIER );
  139. INTL_EXPOSE_CONST( U_MISSING_OPERATOR );
  140. INTL_EXPOSE_CONST( U_MISSING_SEGMENT_CLOSE );
  141. INTL_EXPOSE_CONST( U_MULTIPLE_ANTE_CONTEXTS );
  142. INTL_EXPOSE_CONST( U_MULTIPLE_CURSORS );
  143. INTL_EXPOSE_CONST( U_MULTIPLE_POST_CONTEXTS );
  144. INTL_EXPOSE_CONST( U_TRAILING_BACKSLASH );
  145. INTL_EXPOSE_CONST( U_UNDEFINED_SEGMENT_REFERENCE );
  146. INTL_EXPOSE_CONST( U_UNDEFINED_VARIABLE );
  147. INTL_EXPOSE_CONST( U_UNQUOTED_SPECIAL );
  148. INTL_EXPOSE_CONST( U_UNTERMINATED_QUOTE );
  149. INTL_EXPOSE_CONST( U_RULE_MASK_ERROR );
  150. INTL_EXPOSE_CONST( U_MISPLACED_COMPOUND_FILTER );
  151. INTL_EXPOSE_CONST( U_MULTIPLE_COMPOUND_FILTERS );
  152. INTL_EXPOSE_CONST( U_INVALID_RBT_SYNTAX );
  153. INTL_EXPOSE_CONST( U_INVALID_PROPERTY_PATTERN );
  154. INTL_EXPOSE_CONST( U_MALFORMED_PRAGMA );
  155. INTL_EXPOSE_CONST( U_UNCLOSED_SEGMENT );
  156. INTL_EXPOSE_CONST( U_ILLEGAL_CHAR_IN_SEGMENT );
  157. INTL_EXPOSE_CONST( U_VARIABLE_RANGE_EXHAUSTED );
  158. INTL_EXPOSE_CONST( U_VARIABLE_RANGE_OVERLAP );
  159. INTL_EXPOSE_CONST( U_ILLEGAL_CHARACTER );
  160. INTL_EXPOSE_CONST( U_INTERNAL_TRANSLITERATOR_ERROR );
  161. INTL_EXPOSE_CONST( U_INVALID_ID );
  162. INTL_EXPOSE_CONST( U_INVALID_FUNCTION );
  163. INTL_EXPOSE_CONST( U_PARSE_ERROR_LIMIT );
  164. /* The error code range 0x10100 0x10200 are reserved for formatting API parsing error */
  165. INTL_EXPOSE_CONST( U_UNEXPECTED_TOKEN );
  166. INTL_EXPOSE_CONST( U_FMT_PARSE_ERROR_START );
  167. INTL_EXPOSE_CONST( U_MULTIPLE_DECIMAL_SEPARATORS );
  168. INTL_EXPOSE_CONST( U_MULTIPLE_DECIMAL_SEPERATORS ); /* Typo: kept for backward compatibility. Use U_MULTIPLE_DECIMAL_SEPARATORS */
  169. INTL_EXPOSE_CONST( U_MULTIPLE_EXPONENTIAL_SYMBOLS );
  170. INTL_EXPOSE_CONST( U_MALFORMED_EXPONENTIAL_PATTERN );
  171. INTL_EXPOSE_CONST( U_MULTIPLE_PERCENT_SYMBOLS );
  172. INTL_EXPOSE_CONST( U_MULTIPLE_PERMILL_SYMBOLS );
  173. INTL_EXPOSE_CONST( U_MULTIPLE_PAD_SPECIFIERS );
  174. INTL_EXPOSE_CONST( U_PATTERN_SYNTAX_ERROR );
  175. INTL_EXPOSE_CONST( U_ILLEGAL_PAD_POSITION );
  176. INTL_EXPOSE_CONST( U_UNMATCHED_BRACES );
  177. INTL_EXPOSE_CONST( U_UNSUPPORTED_PROPERTY );
  178. INTL_EXPOSE_CONST( U_UNSUPPORTED_ATTRIBUTE );
  179. INTL_EXPOSE_CONST( U_FMT_PARSE_ERROR_LIMIT );
  180. /* The error code range 0x10200 0x102ff are reserved for Break Iterator related error */
  181. INTL_EXPOSE_CONST( U_BRK_INTERNAL_ERROR );
  182. INTL_EXPOSE_CONST( U_BRK_ERROR_START );
  183. INTL_EXPOSE_CONST( U_BRK_HEX_DIGITS_EXPECTED );
  184. INTL_EXPOSE_CONST( U_BRK_SEMICOLON_EXPECTED );
  185. INTL_EXPOSE_CONST( U_BRK_RULE_SYNTAX );
  186. INTL_EXPOSE_CONST( U_BRK_UNCLOSED_SET );
  187. INTL_EXPOSE_CONST( U_BRK_ASSIGN_ERROR );
  188. INTL_EXPOSE_CONST( U_BRK_VARIABLE_REDFINITION );
  189. INTL_EXPOSE_CONST( U_BRK_MISMATCHED_PAREN );
  190. INTL_EXPOSE_CONST( U_BRK_NEW_LINE_IN_QUOTED_STRING );
  191. INTL_EXPOSE_CONST( U_BRK_UNDEFINED_VARIABLE );
  192. INTL_EXPOSE_CONST( U_BRK_INIT_ERROR );
  193. INTL_EXPOSE_CONST( U_BRK_RULE_EMPTY_SET );
  194. INTL_EXPOSE_CONST( U_BRK_UNRECOGNIZED_OPTION );
  195. INTL_EXPOSE_CONST( U_BRK_MALFORMED_RULE_TAG );
  196. INTL_EXPOSE_CONST( U_BRK_ERROR_LIMIT );
  197. /* The error codes in the range 0x10300-0x103ff are reserved for regular expression related errrs */
  198. INTL_EXPOSE_CONST( U_REGEX_INTERNAL_ERROR );
  199. INTL_EXPOSE_CONST( U_REGEX_ERROR_START );
  200. INTL_EXPOSE_CONST( U_REGEX_RULE_SYNTAX );
  201. INTL_EXPOSE_CONST( U_REGEX_INVALID_STATE );
  202. INTL_EXPOSE_CONST( U_REGEX_BAD_ESCAPE_SEQUENCE );
  203. INTL_EXPOSE_CONST( U_REGEX_PROPERTY_SYNTAX );
  204. INTL_EXPOSE_CONST( U_REGEX_UNIMPLEMENTED );
  205. INTL_EXPOSE_CONST( U_REGEX_MISMATCHED_PAREN );
  206. INTL_EXPOSE_CONST( U_REGEX_NUMBER_TOO_BIG );
  207. INTL_EXPOSE_CONST( U_REGEX_BAD_INTERVAL );
  208. INTL_EXPOSE_CONST( U_REGEX_MAX_LT_MIN );
  209. INTL_EXPOSE_CONST( U_REGEX_INVALID_BACK_REF );
  210. INTL_EXPOSE_CONST( U_REGEX_INVALID_FLAG );
  211. INTL_EXPOSE_CONST( U_REGEX_LOOK_BEHIND_LIMIT );
  212. INTL_EXPOSE_CONST( U_REGEX_SET_CONTAINS_STRING );
  213. INTL_EXPOSE_CONST( U_REGEX_ERROR_LIMIT );
  214. /* The error code in the range 0x10400-0x104ff are reserved for IDNA related error codes */
  215. INTL_EXPOSE_CONST( U_IDNA_PROHIBITED_ERROR );
  216. INTL_EXPOSE_CONST( U_IDNA_ERROR_START );
  217. INTL_EXPOSE_CONST( U_IDNA_UNASSIGNED_ERROR );
  218. INTL_EXPOSE_CONST( U_IDNA_CHECK_BIDI_ERROR );
  219. INTL_EXPOSE_CONST( U_IDNA_STD3_ASCII_RULES_ERROR );
  220. INTL_EXPOSE_CONST( U_IDNA_ACE_PREFIX_ERROR );
  221. INTL_EXPOSE_CONST( U_IDNA_VERIFICATION_ERROR );
  222. INTL_EXPOSE_CONST( U_IDNA_LABEL_TOO_LONG_ERROR );
  223. INTL_EXPOSE_CONST( U_IDNA_ZERO_LENGTH_LABEL_ERROR );
  224. #if U_ICU_VERSION_MAJOR_NUM > 3 || U_ICU_VERSION_MAJOR_NUM == 3 && U_ICU_VERSION_MINOR_NUM >= 8
  225. INTL_EXPOSE_CONST( U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR );
  226. #endif
  227. INTL_EXPOSE_CONST( U_IDNA_ERROR_LIMIT );
  228. /* Aliases for StringPrep */
  229. INTL_EXPOSE_CONST( U_STRINGPREP_PROHIBITED_ERROR );
  230. INTL_EXPOSE_CONST( U_STRINGPREP_UNASSIGNED_ERROR );
  231. INTL_EXPOSE_CONST( U_STRINGPREP_CHECK_BIDI_ERROR );
  232. INTL_EXPOSE_CONST( U_ERROR_LIMIT );
  233. #undef INTL_EXPOSE_CONST
  234. }
  235. /* }}} */
  236. /*
  237. * Local variables:
  238. * tab-width: 4
  239. * c-basic-offset: 4
  240. * End:
  241. * vim600: noet sw=4 ts=4 fdm=marker
  242. * vim<600: noet sw=4 ts=4
  243. */