helly           Sat Mar  3 15:08:59 2007 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src    NEWS 
    /php-src/ext/spl    spl_directory.c 
  Log:
  - MFH [DOC] Add SplFileInfo::getBasename(), DirectoryIterator::getBasename
  - MFH Add SplFileInfo::getLinkTarget(), SplFileInfo::getRealPath()
  # All based on suggestions by Arnold Daniels
  
  
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.567&r2=1.2027.2.547.2.568&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.567 php-src/NEWS:1.2027.2.547.2.568
--- php-src/NEWS:1.2027.2.547.2.567     Sat Mar  3 02:06:43 2007
+++ php-src/NEWS        Sat Mar  3 15:08:58 2007
@@ -7,6 +7,10 @@
   . libmysql (MySQL) to version 5.0.36
 - Upgraded SQLite 3 to version 3.3.13 (Ilia)
 - Upgraded PCRE to version 7.0 (Nuno)
+- Improved SPL (Marcus)
+  . Added SplFileInfo::getBasename(), DirectoryIterator::getBasename().
+  . Added SplFileInfo::getLinkTarget(), SplFileInfo::getRealPath().
+# All based on suggestions by Arnold Davies
 - Added --ri switch to CLI which allows to check extension information. 
(Marcus)
 - Added tidyNode::getParent() method (John, Nuno)
 - Fixed zend_llist_remove_tail (Michael Wallner, Dmitry)
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_directory.c?r1=1.45.2.27.2.16&r2=1.45.2.27.2.17&diff_format=u
Index: php-src/ext/spl/spl_directory.c
diff -u php-src/ext/spl/spl_directory.c:1.45.2.27.2.16 
php-src/ext/spl/spl_directory.c:1.45.2.27.2.17
--- php-src/ext/spl/spl_directory.c:1.45.2.27.2.16      Tue Feb 27 03:28:16 2007
+++ php-src/ext/spl/spl_directory.c     Sat Mar  3 15:08:59 2007
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_directory.c,v 1.45.2.27.2.16 2007/02/27 03:28:16 iliaa Exp $ */
+/* $Id: spl_directory.c,v 1.45.2.27.2.17 2007/03/03 15:08:59 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -577,6 +577,50 @@
 }
 /* }}} */
 
+/* {{{ proto string SplFileInfo::getBasename([string $suffix]) U
+   Returns filename component of path */
+SPL_METHOD(SplFileInfo, getBasename)
+{
+       spl_filesystem_object *intern = 
(spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+       char *fname, *suffix = 0;
+       int flen, slen = 0;
+
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &suffix, 
&slen) == FAILURE) {
+               return;
+       }
+
+       if (intern->path_len && intern->path_len < intern->file_name_len) {
+               fname = intern->file_name + intern->path_len + 1;
+               flen = intern->file_name_len - (intern->path_len + 1);
+       } else {
+               fname = intern->file_name;
+               flen = intern->file_name_len;
+       }
+
+       php_basename(fname, flen, suffix, slen, &fname, &flen TSRMLS_CC);
+
+       RETURN_STRINGL(fname, flen, 0);
+}
+/* }}}*/   
+
+/* {{{ proto string DirectoryIterator::getBasename([string $suffix]) U
+   Returns filename component of current dir entry */
+SPL_METHOD(DirectoryIterator, getBasename)
+{
+       spl_filesystem_object *intern = 
(spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+       char *suffix = 0, *fname;
+       int slen = 0, flen;
+       
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &suffix, 
&slen) == FAILURE) {
+               return;
+       }
+
+       php_basename(intern->u.dir.entry.d_name, 
strlen(intern->u.dir.entry.d_name), suffix, slen, &fname, &flen TSRMLS_CC);
+
+       RETURN_STRINGL(fname, flen, 0);
+}
+/* }}} */
+
 /* {{{ proto string SplFileInfo::getPathname()
    Return path and filename */
 SPL_METHOD(SplFileInfo, getPathname)
@@ -761,6 +805,56 @@
 FileInfoFunction(isLink, FS_IS_LINK)
 /* }}} */
 
+/* {{{ proto string SplFileInfo::getLinkTarget() U
+   Return the target of a symbolic link */
+SPL_METHOD(SplFileInfo, getLinkTarget)
+{
+       spl_filesystem_object *intern = 
(spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+       int ret;
+       char buff[MAXPATHLEN];
+
+       php_set_error_handling(EH_THROW, spl_ce_RuntimeException TSRMLS_CC);
+
+       ret = readlink(intern->file_name, buff, MAXPATHLEN-1);
+
+       if (ret == -1) {
+               zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, 
"Unable to read link %s, error: %s", intern->file_name, strerror(errno));
+               RETVAL_FALSE;
+       } else {
+               /* Append NULL to the end of the string */
+               buff[ret] = '\0';
+
+               RETVAL_STRINGL(buff, ret, 1);
+       }
+       php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
+}
+/* }}} */
+
+#if (!defined(__BEOS__) && !defined(NETWARE) && HAVE_REALPATH) || defined(ZTS)
+/* {{{ proto string SplFileInfo::getRealPath()
+   Return the resolved path */
+SPL_METHOD(SplFileInfo, getRealPath)
+{
+       spl_filesystem_object *intern = 
(spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+       char buff[MAXPATHLEN];
+
+       php_set_error_handling(EH_THROW, spl_ce_RuntimeException TSRMLS_CC);
+
+       if (VCWD_REALPATH(intern->file_name, buff)) {
+#ifdef ZTS
+               if (VCWD_ACCESS(buff, F_OK)) {
+                       RETVAL_FALSE;
+               } else
+#endif
+               RETVAL_STRING(buff, 1);
+       } else {
+               RETVAL_FALSE;
+       }
+       php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
+}
+/* }}} */
+#endif
+
 /* {{{ proto SplFileObject SplFileInfo::openFile([string mode = 'r' [, bool 
use_include_path  [, resource context]]])
    Open the current file */
 SPL_METHOD(SplFileInfo, openFile)
@@ -1286,12 +1380,18 @@
        ZEND_ARG_INFO(0, class_name)
 ZEND_END_ARG_INFO()
 
+static
+ZEND_BEGIN_ARG_INFO_EX(arginfo_optinalSuffix, 0, 0, 0)
+       ZEND_ARG_INFO(0, suffix)
+ZEND_END_ARG_INFO()
+
 /* the method table */
 /* each method can have its own parameters and visibility */
 static zend_function_entry spl_SplFileInfo_functions[] = {
        SPL_ME(SplFileInfo,       __construct,   arginfo_info___construct, 
ZEND_ACC_PUBLIC)
        SPL_ME(SplFileInfo,       getPath,       NULL, ZEND_ACC_PUBLIC)
        SPL_ME(SplFileInfo,       getFilename,   NULL, ZEND_ACC_PUBLIC)
+       SPL_ME(SplFileInfo,       getBasename,   arginfo_optinalSuffix, 
ZEND_ACC_PUBLIC)
        SPL_ME(SplFileInfo,       getPathname,   NULL, ZEND_ACC_PUBLIC)
        SPL_ME(SplFileInfo,       getPerms,      NULL, ZEND_ACC_PUBLIC)
        SPL_ME(SplFileInfo,       getInode,      NULL, ZEND_ACC_PUBLIC)
@@ -1308,6 +1408,10 @@
        SPL_ME(SplFileInfo,       isFile,        NULL, ZEND_ACC_PUBLIC)
        SPL_ME(SplFileInfo,       isDir,         NULL, ZEND_ACC_PUBLIC)
        SPL_ME(SplFileInfo,       isLink,        NULL, ZEND_ACC_PUBLIC)
+       SPL_ME(SplFileInfo,       getLinkTarget, NULL, ZEND_ACC_PUBLIC)
+#if (!defined(__BEOS__) && !defined(NETWARE) && HAVE_REALPATH) || defined(ZTS)
+       SPL_ME(SplFileInfo,       getRealPath,   NULL, ZEND_ACC_PUBLIC)
+#endif
        SPL_ME(SplFileInfo,       getFileInfo,   arginfo_info_optinalFileClass, 
ZEND_ACC_PUBLIC)
        SPL_ME(SplFileInfo,       getPathInfo,   arginfo_info_optinalFileClass, 
ZEND_ACC_PUBLIC)
        SPL_ME(SplFileInfo,       openFile,      arginfo_info_openFile,         
ZEND_ACC_PUBLIC)
@@ -1327,6 +1431,7 @@
 static zend_function_entry spl_DirectoryIterator_functions[] = {
        SPL_ME(DirectoryIterator, __construct,   arginfo_dir___construct, 
ZEND_ACC_PUBLIC)
        SPL_ME(DirectoryIterator, getFilename,   NULL, ZEND_ACC_PUBLIC)
+       SPL_ME(DirectoryIterator, getBasename,   arginfo_optinalSuffix, 
ZEND_ACC_PUBLIC)
        SPL_ME(DirectoryIterator, isDot,         NULL, ZEND_ACC_PUBLIC)
        SPL_ME(DirectoryIterator, rewind,        NULL, ZEND_ACC_PUBLIC)
        SPL_ME(DirectoryIterator, valid,         NULL, ZEND_ACC_PUBLIC)

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to