/* module helper function */ static int xc_init_constant(int module_number TSRMLS_DC) /* {{{ */ { typedef struct { const char *prefix; zend_uchar (*getsize)(); const char *(*get)(zend_uchar i); } xc_nameinfo_t; xc_nameinfo_t nameinfos[] = { { "", xc_get_op_type_count, xc_get_op_type }, { "", xc_get_data_type_count, xc_get_data_type }, { "", xc_get_opcode_count, xc_get_opcode }, { "OPSPEC_", xc_get_op_spec_count, xc_get_op_spec }, { NULL, NULL, NULL } }; int undefdone = 0; xc_nameinfo_t *p; for (p = nameinfos; p->getsize; p ++) { zend_uchar i, count; char const_name[96]; int const_name_len; count = p->getsize(); for (i = 0; i < count; i ++) { const char *name = p->get(i); if (!name) continue; if (strcmp(name, "UNDEF") == 0) { if (undefdone) continue; undefdone = 1; } const_name_len = snprintf(const_name, sizeof(const_name), "XC_%s%s", p->prefix, name); zend_register_long_constant(const_name, const_name_len+1, i, CONST_CS | CONST_PERSISTENT, module_number TSRMLS_CC); } } zend_register_long_constant(ZEND_STRS("XC_SIZEOF_TEMP_VARIABLE"), sizeof(temp_variable), CONST_CS | CONST_PERSISTENT, module_number TSRMLS_CC); zend_register_stringl_constant(ZEND_STRS("XCACHE_VERSION"), ZEND_STRL(XCACHE_VERSION), CONST_CS | CONST_PERSISTENT, module_number TSRMLS_CC); zend_register_stringl_constant(ZEND_STRS("XCACHE_MODULES"), ZEND_STRL(XCACHE_MODULES), CONST_CS | CONST_PERSISTENT, module_number TSRMLS_CC); return 0; }
ZEND_API void zend_register_string_constant(const char *name, size_t name_len, char *strval, int flags, int module_number) { zend_register_stringl_constant(name, name_len, strval, strlen(strval), flags, module_number); }