Example #1
0
ZEND_API int zend_register_constant(zend_constant *c)
{
	zend_string *lowercase_name = NULL;
	zend_string *name;
	int ret = SUCCESS;

#if 0
	printf("Registering constant for module %d\n", c->module_number);
#endif

    if (c->module_number != PHP_USER_CONSTANT) {
		c->name = zend_new_interned_string(c->name);
	}

	if (!(c->flags & CONST_CS)) {
		lowercase_name = zend_string_alloc(ZSTR_LEN(c->name), c->flags & CONST_PERSISTENT);
		zend_str_tolower_copy(ZSTR_VAL(lowercase_name), ZSTR_VAL(c->name), ZSTR_LEN(c->name));
		lowercase_name = zend_new_interned_string(lowercase_name);
		name = lowercase_name;
	} else {
		char *slash = strrchr(ZSTR_VAL(c->name), '\\');
		if (slash) {
			lowercase_name = zend_string_init(ZSTR_VAL(c->name), ZSTR_LEN(c->name), c->flags & CONST_PERSISTENT);
			zend_str_tolower(ZSTR_VAL(lowercase_name), slash - ZSTR_VAL(c->name));
			lowercase_name = zend_new_interned_string(lowercase_name);
			name = lowercase_name;
		} else {
			name = c->name;
		}
	}

	/* Check if the user is trying to define the internal pseudo constant name __COMPILER_HALT_OFFSET__ */
	if ((ZSTR_LEN(c->name) == sizeof("__COMPILER_HALT_OFFSET__")-1
		&& !memcmp(ZSTR_VAL(name), "__COMPILER_HALT_OFFSET__", sizeof("__COMPILER_HALT_OFFSET__")-1))
		|| zend_hash_add_constant(EG(zend_constants), name, c) == NULL) {

		/* The internal __COMPILER_HALT_OFFSET__ is prefixed by NULL byte */
		if (ZSTR_VAL(c->name)[0] == '\0' && ZSTR_LEN(c->name) > sizeof("\0__COMPILER_HALT_OFFSET__")-1
			&& memcmp(ZSTR_VAL(name), "\0__COMPILER_HALT_OFFSET__", sizeof("\0__COMPILER_HALT_OFFSET__")) == 0) {
		}
		zend_error(E_NOTICE,"Constant %s already defined", ZSTR_VAL(name));
		zend_string_release(c->name);
		if (!(c->flags & CONST_PERSISTENT)) {
			zval_dtor(&c->value);
		}
		ret = FAILURE;
	}
	if (lowercase_name) {
		zend_string_release(lowercase_name);
	}
	return ret;
}
/* {{{ dt_register_superglobal
	Register a new superglobal */
int dt_register_superglobal(char* variableName, int len) {
	ulong h;

	/* Get hash */
	h = zend_inline_hash_func(variableName, len + 1);

	/* Check if already registered */
	if(zend_hash_quick_exists(CG(auto_globals), variableName, len + 1, h)) {
		return 0;
	}

	/* Register auto global */
	zend_auto_global auto_global;

	auto_global.name = (char*) zend_new_interned_string((char*) variableName, len + 1, 0 TSRMLS_CC);
	auto_global.name_len = len;
	auto_global.auto_global_callback = NULL;
#	if DT_PHP_VERSION == 54
		auto_global.jit = 1;
#	endif
	zend_hash_quick_add(CG(auto_globals), variableName, len + 1, h, &auto_global, sizeof(zend_auto_global), NULL);
	zend_rebuild_symbol_table();

	return 1;
}
Example #3
0
ZEND_API int zend_register_constant(zend_constant *c)
{
	zend_string *lowercase_name = NULL;
	zend_string *name;
	int ret = SUCCESS;
	zend_bool persistent = (ZEND_CONSTANT_FLAGS(c) & CONST_PERSISTENT) != 0;

#if 0
	printf("Registering constant for module %d\n", c->module_number);
#endif

	char *slash = strrchr(ZSTR_VAL(c->name), '\\');
	if (slash) {
		lowercase_name = zend_string_init(ZSTR_VAL(c->name), ZSTR_LEN(c->name), persistent);
		zend_str_tolower(ZSTR_VAL(lowercase_name), slash - ZSTR_VAL(c->name));
		lowercase_name = zend_new_interned_string(lowercase_name);
		name = lowercase_name;
	} else {
		name = c->name;
	}

	/* Check if the user is trying to define any special constant */
	if (zend_string_equals_literal(name, "__COMPILER_HALT_OFFSET__")
		|| (!persistent && zend_get_special_const(ZSTR_VAL(name), ZSTR_LEN(name)))
		|| zend_hash_add_constant(EG(zend_constants), name, c) == NULL
	) {
		zend_error(E_NOTICE,"Constant %s already defined", ZSTR_VAL(name));
		zend_string_release(c->name);
		if (!persistent) {
			zval_ptr_dtor_nogc(&c->value);
		}
		ret = FAILURE;
	}
	if (lowercase_name) {
		zend_string_release(lowercase_name);
	}
	return ret;
}
Example #4
0
const char *apc_new_interned_string(const char *arKey, int nKeyLength TSRMLS_DC)
{
#ifndef ZTS
    ulong h;
    uint nIndex;
    Bucket *p;

    if (arKey >= APCSG(interned_strings_start) && arKey < APCSG(interned_strings_end)) {
        return arKey;
    }

    h = zend_inline_hash_func(arKey, nKeyLength);
    nIndex = h & APCSG(interned_strings).nTableMask;

    p = APCSG(interned_strings).arBuckets[nIndex];
    while (p != NULL) {
        if ((p->h == h) && (p->nKeyLength == nKeyLength)) {
            if (!memcmp(p->arKey, arKey, nKeyLength)) {
                return p->arKey;
            }
        }
        p = p->pNext;
    }
   
    if (APCSG(interned_strings_top) + ZEND_MM_ALIGNED_SIZE(sizeof(Bucket) + nKeyLength + 1) >=
        APCSG(interned_strings_end)) {
        /* no memory */
        return NULL;
    }

    p = (Bucket *) APCSG(interned_strings_top);
    APCSG(interned_strings_top) += ZEND_MM_ALIGNED_SIZE(sizeof(Bucket) + nKeyLength + 1);

    p->arKey = (char*)(p+1);
    memcpy(p->arKey, arKey, nKeyLength);
    ((char *)p->arKey)[nKeyLength] = '\0';
    p->nKeyLength = nKeyLength;
    p->h = h;
    p->pData = &p->pDataPtr;
    p->pDataPtr = p;

    p->pNext = APCSG(interned_strings).arBuckets[nIndex];
    p->pLast = NULL;
    if (p->pNext) {
        p->pNext->pLast = p;
    }
    APCSG(interned_strings).arBuckets[nIndex] = p;

    p->pListLast = APCSG(interned_strings).pListTail;
    APCSG(interned_strings).pListTail = p;
    p->pListNext = NULL;
    if (p->pListLast != NULL) {
        p->pListLast->pListNext = p;
    }
    if (!APCSG(interned_strings).pListHead) {
        APCSG(interned_strings).pListHead = p;
    }

    APCSG(interned_strings).nNumOfElements++;

    return p->arKey;
#else
    return zend_new_interned_string(arKey, nKeyLength, 0 TSRMLS_CC);
#endif
}
Example #5
0
PHALCON_STATIC void phalcon_init_interned_strings(TSRMLS_D)
{
	phalcon_interned_DELETE				= zend_new_interned_string(ZEND_STRS("DELETE"), 0 TSRMLS_CC);
	phalcon_interned_GET				= zend_new_interned_string(ZEND_STRS("GET"), 0 TSRMLS_CC);
	phalcon_interned_HEAD				= zend_new_interned_string(ZEND_STRS("HEAD"), 0 TSRMLS_CC);
	phalcon_interned_OPTIONS			= zend_new_interned_string(ZEND_STRS("OPTIONS"), 0 TSRMLS_CC);
	phalcon_interned_PATCH				= zend_new_interned_string(ZEND_STRS("PATCH"), 0 TSRMLS_CC);
	phalcon_interned_POST				= zend_new_interned_string(ZEND_STRS("POST"), 0 TSRMLS_CC);
	phalcon_interned_PUT				= zend_new_interned_string(ZEND_STRS("PUT"), 0 TSRMLS_CC);
	phalcon_interned_action				= zend_new_interned_string(ZEND_STRS("action"), 0 TSRMLS_CC);
	phalcon_interned_alias				= zend_new_interned_string(ZEND_STRS("alias"), 0 TSRMLS_CC);
	phalcon_interned_all				= zend_new_interned_string(ZEND_STRS("all"), 0 TSRMLS_CC);
	phalcon_interned_allowEmpty			= zend_new_interned_string(ZEND_STRS("allowEmpty"), 0 TSRMLS_CC);
	phalcon_interned_arguments			= zend_new_interned_string(ZEND_STRS("arguments"), 0 TSRMLS_CC);
	phalcon_interned_balias				= zend_new_interned_string(ZEND_STRS("balias"), 0 TSRMLS_CC);
	phalcon_interned_binary_op			= zend_new_interned_string(ZEND_STRS("binary-op"), 0 TSRMLS_CC);
	phalcon_interned_code				= zend_new_interned_string(ZEND_STRS("code"), 0 TSRMLS_CC);
	phalcon_interned_column				= zend_new_interned_string(ZEND_STRS("column"), 0 TSRMLS_CC);
	phalcon_interned_columns			= zend_new_interned_string(ZEND_STRS("columns"), 0 TSRMLS_CC);
	phalcon_interned_conditions			= zend_new_interned_string(ZEND_STRS("conditions"), 0 TSRMLS_CC);
	phalcon_interned_controller			= zend_new_interned_string(ZEND_STRS("controller"), 0 TSRMLS_CC);
	phalcon_interned_delete				= zend_new_interned_string(ZEND_STRS("delete"), 0 TSRMLS_CC);
	phalcon_interned_dispatcher			= zend_new_interned_string(ZEND_STRS("dispatcher"), 0 TSRMLS_CC);
	phalcon_interned_distinct			= zend_new_interned_string(ZEND_STRS("distinct"), 0 TSRMLS_CC);
	phalcon_interned_domain				= zend_new_interned_string(ZEND_STRS("domain"), 0 TSRMLS_CC);
	phalcon_interned_escaper			= zend_new_interned_string(ZEND_STRS("escaper"), 0 TSRMLS_CC);
	phalcon_interned_expr				= zend_new_interned_string(ZEND_STRS("expr"), 0 TSRMLS_CC);
	phalcon_interned_fields				= zend_new_interned_string(ZEND_STRS("fields"), 0 TSRMLS_CC);
	phalcon_interned_file				= zend_new_interned_string(ZEND_STRS("file"), 0 TSRMLS_CC);
	phalcon_interned_filter				= zend_new_interned_string(ZEND_STRS("filter"), 0 TSRMLS_CC);
	phalcon_interned_functionCall		= zend_new_interned_string(ZEND_STRS("functionCall"), 0 TSRMLS_CC);
	phalcon_interned_group				= zend_new_interned_string(ZEND_STRS("group"), 0 TSRMLS_CC);
	phalcon_interned_groupBy			= zend_new_interned_string(ZEND_STRS("groupBy"), 0 TSRMLS_CC);
	phalcon_interned_having				= zend_new_interned_string(ZEND_STRS("having"), 0 TSRMLS_CC);
	phalcon_interned_items				= zend_new_interned_string(ZEND_STRS("items"), 0 TSRMLS_CC);
	phalcon_interned_joins				= zend_new_interned_string(ZEND_STRS("joins"), 0 TSRMLS_CC);
	phalcon_interned_label				= zend_new_interned_string(ZEND_STRS("label"), 0 TSRMLS_CC);
	phalcon_interned_left				= zend_new_interned_string(ZEND_STRS("left"), 0 TSRMLS_CC);
	phalcon_interned_limit				= zend_new_interned_string(ZEND_STRS("limit"), 0 TSRMLS_CC);
	phalcon_interned_line				= zend_new_interned_string(ZEND_STRS("line"), 0 TSRMLS_CC);
	phalcon_interned_message			= zend_new_interned_string(ZEND_STRS("message"), 0 TSRMLS_CC);
	phalcon_interned_model				= zend_new_interned_string(ZEND_STRS("model"), 0 TSRMLS_CC);
	phalcon_interned_models				= zend_new_interned_string(ZEND_STRS("models"), 0 TSRMLS_CC);
	phalcon_interned_modelsCache		= zend_new_interned_string(ZEND_STRS("modelsCache"), 0 TSRMLS_CC);
	phalcon_interned_modelsManager		= zend_new_interned_string(ZEND_STRS("modelsManager"), 0 TSRMLS_CC);
	phalcon_interned_modelsMetadata		= zend_new_interned_string(ZEND_STRS("modelsMetadata"), 0 TSRMLS_CC);
	phalcon_interned_module				= zend_new_interned_string(ZEND_STRS("module"), 0 TSRMLS_CC);
	phalcon_interned_name				= zend_new_interned_string(ZEND_STRS("name"), 0 TSRMLS_CC);
	phalcon_interned_namespace			= zend_new_interned_string(ZEND_STRS("namespace"), 0 TSRMLS_CC);
	phalcon_interned_ns_alias			= zend_new_interned_string(ZEND_STRS("ns-alias"), 0 TSRMLS_CC);
	phalcon_interned_number				= zend_new_interned_string(ZEND_STRS("number"), 0 TSRMLS_CC);
	phalcon_interned_offset				= zend_new_interned_string(ZEND_STRS("offset"), 0 TSRMLS_CC);
	phalcon_interned_op					= zend_new_interned_string(ZEND_STRS("op"), 0 TSRMLS_CC);
	phalcon_interned_order				= zend_new_interned_string(ZEND_STRS("order"), 0 TSRMLS_CC);
	phalcon_interned_orderBy			= zend_new_interned_string(ZEND_STRS("orderBy"), 0 TSRMLS_CC);
	phalcon_interned_params				= zend_new_interned_string(ZEND_STRS("params"), 0 TSRMLS_CC);
	phalcon_interned_parent				= zend_new_interned_string(ZEND_STRS("parent"), 0 TSRMLS_CC);
	phalcon_interned_paths				= zend_new_interned_string(ZEND_STRS("paths"), 0 TSRMLS_CC);
	phalcon_interned_qualified			= zend_new_interned_string(ZEND_STRS("qualified"), 0 TSRMLS_CC);
	phalcon_interned_qualifiedName		= zend_new_interned_string(ZEND_STRS("qualifiedName"), 0 TSRMLS_CC);
	phalcon_interned_request			= zend_new_interned_string(ZEND_STRS("request"), 0 TSRMLS_CC);
	phalcon_interned_response			= zend_new_interned_string(ZEND_STRS("response"), 0 TSRMLS_CC);
	phalcon_interned_right				= zend_new_interned_string(ZEND_STRS("right"), 0 TSRMLS_CC);
	phalcon_interned_router				= zend_new_interned_string(ZEND_STRS("router"), 0 TSRMLS_CC);
	phalcon_interned_select				= zend_new_interned_string(ZEND_STRS("select"), 0 TSRMLS_CC);
	phalcon_interned_self				= zend_new_interned_string(ZEND_STRS("self"), 0 TSRMLS_CC);
	phalcon_interned_session			= zend_new_interned_string(ZEND_STRS("session"), 0 TSRMLS_CC);
	phalcon_interned_sort				= zend_new_interned_string(ZEND_STRS("sort"), 0 TSRMLS_CC);
	phalcon_interned_source				= zend_new_interned_string(ZEND_STRS("source"), 0 TSRMLS_CC);
	phalcon_interned_static				= zend_new_interned_string(ZEND_STRS("static"), 0 TSRMLS_CC);
	phalcon_interned_sqlAlias			= zend_new_interned_string(ZEND_STRS("sqlAlias"), 0 TSRMLS_CC);
	phalcon_interned_table				= zend_new_interned_string(ZEND_STRS("table"), 0 TSRMLS_CC);
	phalcon_interned_tables				= zend_new_interned_string(ZEND_STRS("tables"), 0 TSRMLS_CC);
	phalcon_interned_type				= zend_new_interned_string(ZEND_STRS("type"), 0 TSRMLS_CC);
	phalcon_interned_update				= zend_new_interned_string(ZEND_STRS("update"), 0 TSRMLS_CC);
	phalcon_interned_url				= zend_new_interned_string(ZEND_STRS("url"), 0 TSRMLS_CC);
	phalcon_interned_value				= zend_new_interned_string(ZEND_STRS("value"), 0 TSRMLS_CC);
	phalcon_interned_values				= zend_new_interned_string(ZEND_STRS("values"), 0 TSRMLS_CC);
	phalcon_interned_where				= zend_new_interned_string(ZEND_STRS("where"), 0 TSRMLS_CC);
	phalcon_interned_rows				= zend_new_interned_string(ZEND_STRS("rows"), 0 TSRMLS_CC);
	phalcon_interned_cookies			= zend_new_interned_string(ZEND_STRS("cookies"), 0 TSRMLS_CC);
	phalcon_interned_annotations		= zend_new_interned_string(ZEND_STRS("annotations"), 0 TSRMLS_CC);
	phalcon_interned_security			= zend_new_interned_string(ZEND_STRS("security"), 0 TSRMLS_CC);
	phalcon_interned_crypt				= zend_new_interned_string(ZEND_STRS("crypt"), 0 TSRMLS_CC);
	phalcon_interned_flash				= zend_new_interned_string(ZEND_STRS("flash"), 0 TSRMLS_CC);
	phalcon_interned_flashSession		= zend_new_interned_string(ZEND_STRS("flashSession"), 0 TSRMLS_CC);
	phalcon_interned_tag				= zend_new_interned_string(ZEND_STRS("tag"), 0 TSRMLS_CC);
	phalcon_interned_sessionBag			= zend_new_interned_string(ZEND_STRS("sessionBag"), 0 TSRMLS_CC);
	phalcon_interned_eventsManager		= zend_new_interned_string(ZEND_STRS("eventsManager"), 0 TSRMLS_CC);
	phalcon_interned_transactionManager	= zend_new_interned_string(ZEND_STRS("transactions"), 0 TSRMLS_CC);
	phalcon_interned_assets				= zend_new_interned_string(ZEND_STRS("assets"), 0 TSRMLS_CC);
}