summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO1
-rw-r--r--ext/standard/file.c23
-rw-r--r--ext/standard/file.h1
3 files changed, 24 insertions, 1 deletions
diff --git a/TODO b/TODO
index d460b01ee6..d110d7d434 100644
--- a/TODO
+++ b/TODO
@@ -49,7 +49,6 @@ ext/standard
------------
* strpad() (Andrei)
* stri_replace() (Andrei)
- * realpath() (Andrei)
* socket_get_status (Andrei)
* comparing arrays semantically (like Python) (Andrei)
* NOT binary safe:
diff --git a/ext/standard/file.c b/ext/standard/file.c
index c5aa4a2201..145c92589b 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -86,6 +86,8 @@ extern int fclose();
#define MAP_FAILED ((void *) -1)
#endif
+#include "php_realpath.h"
+
/* }}} */
/* {{{ ZTS-stuff / Globals / Prototypes */
@@ -243,6 +245,7 @@ function_entry file_functions[] = {
#if HAVE_SYS_TIME_H
PHP_FE(set_socket_timeout, NULL)
#endif
+ PHP_FE(realpath, NULL)
#if 0 /* needs to be rethought 991221 thies@digicol.de */
PHP_FE(fd_set, NULL)
PHP_FE(fd_isset, NULL)
@@ -1687,6 +1690,26 @@ PHP_FUNCTION(fgetcsv) {
/* }}} */
+/* {{{ proto string realpath(string path)
+ Returns the resolved path */
+PHP_FUNCTION(realpath)
+{
+ zval **path;
+ char resolved_path[MAXPATHLEN];
+
+ if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &path) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string_ex(path);
+ if (php_realpath((*path)->value.str.val, resolved_path)) {
+ RETURN_STRING(resolved_path, 1);
+ } else {
+ RETURN_FALSE;
+ }
+}
+/* }}} */
+
#if 0
static fd_set readfd;
diff --git a/ext/standard/file.h b/ext/standard/file.h
index 231935ef56..e0e05cf98f 100644
--- a/ext/standard/file.h
+++ b/ext/standard/file.h
@@ -71,6 +71,7 @@ PHP_FUNCTION(flock);
PHP_FUNCTION(fd_set);
PHP_FUNCTION(fd_isset);
PHP_FUNCTION(select);
+PHP_FUNCTION(realpath);
PHPAPI int php_set_sock_blocking(int socketd, int block);
PHPAPI int php_file_le_fopen(void);