Browse Source

- Implement V_OPEN() V_OPEN_CREAT() and V_CREAT().

Next step is to substitute all open()'s and creat()'s in the PHP tree
PHP-4.0.5
Andi Gutmans 26 years ago
parent
commit
f1d5167ae3
  1. 6
      main/php.h
  2. 48
      main/php_virtual_cwd.c
  3. 2
      main/php_virtual_cwd.h

6
main/php.h

@ -298,6 +298,9 @@ PHPAPI int cfg_get_string(char *varname, char **result);
#ifdef VIRTUAL_DIR
#define V_GETCWD(buff, size) virtual_getcwd(buff,size)
#define V_FOPEN(path, mode) virtual_fopen(path, mode)
#define V_OPEN(path, flags) virtual_open(path, flags)
#define V_OPEN_CREAT(path, flags, mode) virtual_open(path, flags, mode)
#define V_CREAT(path, mode) virtual_creat(path, mode)
#define V_CHDIR(path) virtual_chdir(path)
#define V_CHDIR_FILE(path) virtual_chdir_file(path)
#define V_GETWD(buf)
@ -310,6 +313,9 @@ PHPAPI int cfg_get_string(char *varname, char **result);
#else
#define V_GETCWD(buff, size) getcwd(buff,size)
#define V_FOPEN(path, mode) fopen(path, mode)
#define V_OPEN(path, flags) open(path, flags)
#define V_OPEN_CREAT(path, flags, mode) open(path, flags, mode)
#define V_CREAT(path, mode) creat(path, mode)
#define V_CHDIR(path) chdir(path)
#define V_CHDIR_FILE(path) chdir_file(path)
#define V_GETWD(buf) getwd(buf)

48
main/php_virtual_cwd.c

@ -6,6 +6,11 @@
#include <errno.h>
#include <stdlib.h>
#include <ctype.h>
#include <fcntl.h>
#ifdef ZEND_WIN32
#include "win95nt.h"
#endif
#include "php_virtual_cwd.h"
@ -388,6 +393,49 @@ CWD_API FILE *virtual_fopen(const char *path, const char *mode)
return f;
}
CWD_API int virtual_open(const char *path, int flags)
{
cwd_state new_state;
int f;
CWDLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
if (flags & O_CREAT) {
mode_t mode;
va_list arg;
va_start(arg, flags);
mode = va_arg(arg, mode_t);
va_end(arg);
f = open(new_state.cwd, flags, mode);
} else {
f = open(new_state.cwd, flags);
}
CWD_STATE_FREE(&new_state);
return f;
}
CWD_API int virtual_creat(const char *path, mode_t mode)
{
cwd_state new_state;
int f;
CWDLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
f = open(new_state.cwd, O_CREAT | O_TRUNC, mode);
CWD_STATE_FREE(&new_state);
return f;
}
CWD_API int virtual_stat(const char *path, struct stat *buf)
{
cwd_state new_state;

2
main/php_virtual_cwd.h

@ -42,6 +42,8 @@ CWD_API int virtual_chdir(char *path);
CWD_API int virtual_chdir_file(char *path);
CWD_API int virtual_filepath(char *path, char **filepath);
CWD_API FILE *virtual_fopen(const char *path, const char *mode);
CWD_API int virtual_open(const char *path, int flags);
CWD_API int virtual_creat(const char *path, mode_t mode);
CWD_API int virtual_stat(const char *path, struct stat *buf);
#ifndef ZEND_WIN32
CWD_API int virtual_lstat(const char *path, struct stat *buf);

Loading…
Cancel
Save