efree(d);
d = tmp;
#ifdef PHP_WIN32
- fp = popen(d, "rb");
+ fp = V_POPEN(d, "rb");
#else
- fp = popen(d, "r");
+ fp = V_POPEN(d, "r");
#endif
if (!fp) {
php_error(E_WARNING, "Unable to fork [%s]", d);
}
} else { /* not safe_mode */
#ifdef PHP_WIN32
- fp = popen(cmd, "rb");
+ fp = V_POPEN(cmd, "rb");
#else
- fp = popen(cmd, "r");
+ fp = V_POPEN(cmd, "r");
#endif
if (!fp) {
php_error(E_WARNING, "Unable to fork [%s]", cmd);
convert_to_string_ex(cmd);
#ifdef PHP_WIN32
- if ((in=popen((*cmd)->value.str.val,"rt"))==NULL) {
+ if ((in=V_POPEN((*cmd)->value.str.val,"rt"))==NULL) {
#else
- if ((in=popen((*cmd)->value.str.val,"r"))==NULL) {
+ if ((in=V_POPEN((*cmd)->value.str.val,"r"))==NULL) {
#endif
php_error(E_WARNING,"Unable to execute '%s'",(*cmd)->value.str.val);
}
}
tmp = php_escape_shell_cmd(buf);
- fp = popen(tmp,p);
+ fp = V_POPEN(tmp,p);
efree(tmp);
if (!fp) {
RETURN_FALSE;
}
} else {
- fp = popen((*arg1)->value.str.val,p);
+ fp = V_POPEN((*arg1)->value.str.val,p);
if (!fp) {
php_error(E_WARNING,"popen(\"%s\",\"%s\") - %s",(*arg1)->value.str.val,p,strerror(errno));
efree(p);
/* Virtual current directory support */
#ifdef VIRTUAL_DIR
+
#define V_GETCWD(buff, size) virtual_getcwd(buff,size)
#define V_FOPEN(path, mode) virtual_fopen(path, mode)
/* The V_OPEN macro will need to be used as V_OPEN((path, flags, ...)) */
#define V_MKDIR(pathname, mode) virtual_mkdir(pathname, mode)
#define V_RMDIR(pathname) virtual_rmdir(pathname)
#define V_OPENDIR(pathname) virtual_opendir(pathname)
+#ifdef PHP_WIN32
+/* Under Windows the "cd /cwd ; command" trick doesn't work */
+#define V_POPEN(command, type) popen(command, type)
+#else
#define V_POPEN(command, type) virtual_popen(command, type)
+#endif
+
#else
+
#define V_GETCWD(buff, size) getcwd(buff,size)
#define V_FOPEN(path, mode) fopen(path, mode)
#define V_OPEN(open_args) open open_args
#define V_RMDIR(pathname) rmdir(pathname)
#define V_OPENDIR(pathname) opendir(pathname)
#define V_POPEN(command, type) popen(command, type)
+
#endif
#include "zend_constants.h"