dirp = emalloc(sizeof(php_dir));
- dirp->dir = opendir((*arg)->value.str.val);
+ dirp->dir = V_OPENDIR((*arg)->value.str.val);
if (! dirp->dir) {
efree(dirp);
#define V_UNLINK(path) virtual_unlink(path)
#define V_MKDIR(pathname, mode) virtual_mkdir(pathname, mode)
#define V_RMDIR(pathname) virtual_rmdir(pathname)
+#define V_OPENDIR(pathname) virtual_opendir(pathname)
#else
#define V_GETCWD(buff, size) getcwd(buff,size)
#define V_FOPEN(path, mode) fopen(path, mode)
#define V_UNLINK(path) unlink(path)
#define V_MKDIR(pathname, mode) mkdir(pathname, mode)
#define V_RMDIR(pathname) rmdir(pathname)
+#define V_OPENDIR(pathname) opendir(pathname)
#endif
#include "zend_constants.h"
return retval;
}
+CWD_API DIR *virtual_opendir(const char *pathname)
+{
+ cwd_state new_state;
+ DIR *retval;
+ CWDLS_FETCH();
+
+ CWD_STATE_COPY(&new_state, &CWDG(cwd));
+ virtual_file_ex(&new_state, pathname, NULL);
+
+ retval = opendir(new_state.cwd);
+
+ CWD_STATE_FREE(&new_state);
+ return retval;
+}
+
#if 0
main(void)
#include <unistd.h>
#endif
+#ifdef ZEND_WIN32
+#include "win32/readdir.h"
+#else
+#ifdef HAVE_DIRENT_H
+#include <dirent.h>
+#endif
+#endif
#ifdef PHP_EXPORTS
#define CWD_EXPORTS
CWD_API int virtual_unlink(const char *path);
CWD_API int virtual_mkdir(const char *pathname, mode_t mode);
CWD_API int virtual_rmdir(const char *pathname);
+CWD_API DIR *virtual_opendir(const char *pathname);
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path);