salathe Fri, 11 Feb 2011 22:07:22 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=308264
Log: MFH - Added SplFileInfo::getExtension() (FR #48767) Bug: http://bugs.php.net/48767 (To be documented) SplFileInfo::getExtension() Changed paths: U php/php-src/branches/PHP_5_3/NEWS U php/php-src/branches/PHP_5_3/UPGRADING U php/php-src/branches/PHP_5_3/ext/spl/spl_directory.c A php/php-src/branches/PHP_5_3/ext/spl/tests/DirectoryIterator_getExtension_basic.phpt A php/php-src/branches/PHP_5_3/ext/spl/tests/SplFileInfo_getExtension_basic.phpt Modified: php/php-src/branches/PHP_5_3/NEWS =================================================================== --- php/php-src/branches/PHP_5_3/NEWS 2011-02-11 21:13:16 UTC (rev 308263) +++ php/php-src/branches/PHP_5_3/NEWS 2011-02-11 22:07:22 UTC (rev 308264) @@ -148,7 +148,8 @@ . Fixed bug #53914 (SPL assumes HAVE_GLOB is defined). (Chris Jones) . Fixed bug #53515 (property_exists incorrect on ArrayObject null and 0 values). (Felipe) - + . Added SplFileInfo::getExtension(). FR #48767. (Peter Cowburn) + - SQLite3 extension: . Fixed memory leaked introduced by the NULL poisoning patch. (Mateusz Kocielski, Pierre) Modified: php/php-src/branches/PHP_5_3/UPGRADING =================================================================== --- php/php-src/branches/PHP_5_3/UPGRADING 2011-02-11 21:13:16 UTC (rev 308263) +++ php/php-src/branches/PHP_5_3/UPGRADING 2011-02-11 22:07:22 UTC (rev 308264) @@ -670,7 +670,9 @@ ReflectionClass::inNamespace() ReflectionClass::getNamespaceName() ReflectionClass::getShortName() - - SPL SplObjectStorage::addAll() + - SPL: DirectoryIterator::getExtension() + SplFileObject::getExtension() + SplObjectStorage::addAll() SplObjectStorage::removeAll() - XSL: XSLTProcessor::setProfiling() Modified: php/php-src/branches/PHP_5_3/ext/spl/spl_directory.c =================================================================== --- php/php-src/branches/PHP_5_3/ext/spl/spl_directory.c 2011-02-11 21:13:16 UTC (rev 308263) +++ php/php-src/branches/PHP_5_3/ext/spl/spl_directory.c 2011-02-11 22:07:22 UTC (rev 308264) @@ -849,6 +849,66 @@ } /* }}} */ +/* {{{ proto string SplFileInfo::getExtension() + Returns file extension component of path */ +SPL_METHOD(SplFileInfo, getExtension) +{ + spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + char *fname, *p; + size_t flen; + int path_len, idx; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + spl_filesystem_object_get_path(intern, &path_len TSRMLS_CC); + + if (path_len && path_len < intern->file_name_len) { + fname = intern->file_name + path_len + 1; + flen = intern->file_name_len - (path_len + 1); + } else { + fname = intern->file_name; + flen = intern->file_name_len; + } + + php_basename(fname, flen, NULL, 0, &fname, &flen TSRMLS_CC); + + p = zend_memrchr(fname, '.', flen); + if (p) { + idx = p - fname; + RETURN_STRINGL(fname + idx + 1, flen - idx - 1, 1); + } + + RETURN_EMPTY_STRING(); +} +/* }}}*/ + +/* {{{ proto string DirectoryIterator::getExtension() + Returns the file extension component of path */ +SPL_METHOD(DirectoryIterator, getExtension) +{ + spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + char *fname, *p; + size_t flen; + int idx; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + php_basename(intern->u.dir.entry.d_name, strlen(intern->u.dir.entry.d_name), NULL, 0, &fname, &flen TSRMLS_CC); + + p = zend_memrchr(fname, '.', flen); + if (p) { + idx = p - fname; + RETURN_STRINGL(fname + idx + 1, flen - idx - 1, 1); + } + + RETURN_EMPTY_STRING(); +} +/* }}} */ + /* {{{ proto string SplFileInfo::getBasename([string $suffix]) U Returns filename component of path */ SPL_METHOD(SplFileInfo, getBasename) @@ -1786,6 +1846,7 @@ SPL_ME(SplFileInfo, __construct, arginfo_info___construct, ZEND_ACC_PUBLIC) SPL_ME(SplFileInfo, getPath, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC) SPL_ME(SplFileInfo, getFilename, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC) + SPL_ME(SplFileInfo, getExtension, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC) SPL_ME(SplFileInfo, getBasename, arginfo_optinalSuffix, ZEND_ACC_PUBLIC) SPL_ME(SplFileInfo, getPathname, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC) SPL_ME(SplFileInfo, getPerms, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC) @@ -1829,6 +1890,7 @@ static const zend_function_entry spl_DirectoryIterator_functions[] = { SPL_ME(DirectoryIterator, __construct, arginfo_dir___construct, ZEND_ACC_PUBLIC) SPL_ME(DirectoryIterator, getFilename, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC) + SPL_ME(DirectoryIterator, getExtension, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC) SPL_ME(DirectoryIterator, getBasename, arginfo_optinalSuffix, ZEND_ACC_PUBLIC) SPL_ME(DirectoryIterator, isDot, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC) SPL_ME(DirectoryIterator, rewind, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC) Added: php/php-src/branches/PHP_5_3/ext/spl/tests/DirectoryIterator_getExtension_basic.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/spl/tests/DirectoryIterator_getExtension_basic.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/ext/spl/tests/DirectoryIterator_getExtension_basic.phpt 2011-02-11 22:07:22 UTC (rev 308264) @@ -0,0 +1,51 @@ +--TEST-- +SPL: DirectoryIterator::getExtension() basic test +--FILE-- +<?php +$dir = __DIR__ . DIRECTORY_SEPARATOR . md5('DirectoryIterator::getExtension') . DIRECTORY_SEPARATOR; +mkdir($dir); + +$files = array('test.txt', 'test.extension', 'test..', 'test.', 'test'); +foreach ($files as $file) { + touch($dir . $file); +} + +$dit_exts = array(); +$nfo_exts = array(); +$skip = array('.', '..'); + +foreach (new DirectoryIterator($dir) as $file) { + if (in_array($file->getFilename(), $skip)) { + continue; + } + $dit_exts[] = $file->getExtension(); + $nfo_exts[] = pathinfo($file->getFilename(), PATHINFO_EXTENSION); +} +var_dump($dit_exts === $nfo_exts); +sort($dit_exts); +var_dump($dit_exts); +?> +--CLEAN-- +<?php +$dir = __DIR__ . DIRECTORY_SEPARATOR . md5('DirectoryIterator::getExtension') . DIRECTORY_SEPARATOR; +$files = array('test.txt', 'test.extension', 'test..', 'test.', 'test'); +foreach ($files as $file) { + unlink($dir . $file); +} +rmdir($dir); +?> +--EXPECTF-- +bool(true) +array(5) { + [0]=> + string(0) "" + [1]=> + string(0) "" + [2]=> + string(0) "" + [3]=> + string(9) "extension" + [4]=> + string(3) "txt" +} + Added: php/php-src/branches/PHP_5_3/ext/spl/tests/SplFileInfo_getExtension_basic.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/spl/tests/SplFileInfo_getExtension_basic.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/ext/spl/tests/SplFileInfo_getExtension_basic.phpt 2011-02-11 22:07:22 UTC (rev 308264) @@ -0,0 +1,31 @@ +--TEST-- +SPL: SplFileInfo::getExtension() basic test +--FILE-- +<?php +$file = md5('SplFileInfo::getExtension'); +$exts = array('.txt', '.extension', '..', '.', ''); +foreach ($exts as $ext) { + touch($file . $ext); + $info = new SplFileInfo($file . $ext); + var_dump($info->getExtension(), pathinfo($file . $ext, PATHINFO_EXTENSION)); +} +?> +--CLEAN-- +<?php +$file = md5('SplFileInfo::getExtension'); +$exts = array('.txt', '.extension', '..', '.', ''); +foreach ($exts as $ext) { + unlink($file . $ext); +} +?> +--EXPECTF-- +string(3) "txt" +string(3) "txt" +string(9) "extension" +string(9) "extension" +string(0) "" +string(0) "" +string(0) "" +string(0) "" +string(0) "" +string(0) ""
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php