From f2cec0600c5fd3bc3ee60ef164ae739cc40304f7 Mon Sep 17 00:00:00 2001 From: Marcus Boerger Date: Mon, 21 May 2007 16:43:53 +0000 Subject: [PATCH] - Make Pahr::loadPhar() and Phar::mapPhar() respect extract list --- ext/phar/phar_object.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index d91b6476f0..135b4549b0 100755 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -54,12 +54,24 @@ PHP_METHOD(Phar, getExtractList) * Reads the currently executed file (a phar) and registers its manifest */ PHP_METHOD(Phar, mapPhar) { - char *alias = NULL, *error; - int alias_len = 0; + char *fname, *alias = NULL, *error, *plain_map; + int fname_len, alias_len = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &alias, &alias_len) == FAILURE) { return; } + phar_request_initialize(TSRMLS_C); + if (zend_hash_num_elements(&(PHAR_GLOBALS->phar_plain_map))) { + fname = zend_get_executed_filename(TSRMLS_C); + fname_len = strlen(fname); + if((alias && + zend_hash_find(&(PHAR_GLOBALS->phar_plain_map), alias, alias_len+1, (void **)&plain_map) == SUCCESS) + || (zend_hash_find(&(PHAR_GLOBALS->phar_plain_map), fname, fname_len+1, (void **)&plain_map) == SUCCESS) + ) { + RETURN_STRING(plain_map, 1); + } + } + RETVAL_BOOL(phar_open_compiled_file(alias, alias_len, &error TSRMLS_CC) == SUCCESS); if (error) { zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error); @@ -71,12 +83,23 @@ PHP_METHOD(Phar, mapPhar) * Loads any phar archive with an alias */ PHP_METHOD(Phar, loadPhar) { - char *fname, *alias = NULL, *error; + char *fname, *alias = NULL, *error, *plain_map; int fname_len, alias_len = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &fname, &fname_len, &alias, &alias_len) == FAILURE) { return; } + + phar_request_initialize(TSRMLS_C); + if (zend_hash_num_elements(&(PHAR_GLOBALS->phar_plain_map))) { + if((alias && + zend_hash_find(&(PHAR_GLOBALS->phar_plain_map), alias, alias_len+1, (void **)&plain_map) == SUCCESS) + || (zend_hash_find(&(PHAR_GLOBALS->phar_plain_map), fname, fname_len+1, (void **)&plain_map) == SUCCESS) + ) { + RETURN_STRING(plain_map, 1); + } + } + RETVAL_BOOL(phar_open_filename(fname, fname_len, alias, alias_len, REPORT_ERRORS, NULL, &error TSRMLS_CC) == SUCCESS); if (error) { zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, error); -- 2.50.1