mirror of
https://github.com/php/php-src.git
synced 2024-11-23 18:04:36 +08:00
- Make TSRM work on Windows.
This commit is contained in:
parent
6c6471b160
commit
03432bf61f
44
TSRM/readdir.h
Normal file
44
TSRM/readdir.h
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#ifndef READDIR_H
|
||||||
|
#define READDIR_H
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structures and types used to implement opendir/readdir/closedir
|
||||||
|
* on Windows 95/NT.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <io.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* struct dirent - same as Unix */
|
||||||
|
|
||||||
|
struct dirent {
|
||||||
|
long d_ino; /* inode (always 1 in WIN32) */
|
||||||
|
off_t d_off; /* offset to this dirent */
|
||||||
|
unsigned short d_reclen; /* length of d_name */
|
||||||
|
char d_name[_MAX_FNAME + 1]; /* filename (null terminated) */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* typedef DIR - not the same as Unix */
|
||||||
|
typedef struct {
|
||||||
|
long handle; /* _findfirst/_findnext handle */
|
||||||
|
short offset; /* offset into directory */
|
||||||
|
short finished; /* 1 if there are not more files */
|
||||||
|
struct _finddata_t fileinfo; /* from _findfirst/_findnext */
|
||||||
|
char *dir; /* the dir we are reading */
|
||||||
|
struct dirent dent; /* the dirent to return */
|
||||||
|
} DIR;
|
||||||
|
|
||||||
|
/* Function prototypes */
|
||||||
|
DIR *opendir(const char *);
|
||||||
|
struct dirent *readdir(DIR *);
|
||||||
|
int readdir_r(DIR *, struct dirent *, struct dirent **);
|
||||||
|
int closedir(DIR *);
|
||||||
|
void rewinddir(DIR *);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* READDIR_H */
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
static inline int in_character_class(char ch, const char *delim)
|
static int in_character_class(char ch, const char *delim)
|
||||||
{
|
{
|
||||||
while (*delim) {
|
while (*delim) {
|
||||||
if (*delim == ch) {
|
if (*delim == ch) {
|
||||||
|
@ -28,10 +28,15 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
#include "tsrm_config.h"
|
|
||||||
#include "tsrm_strtok_r.h"
|
|
||||||
#include "tsrm_virtual_cwd.h"
|
#include "tsrm_virtual_cwd.h"
|
||||||
|
|
||||||
|
#ifndef TSRM_WIN32
|
||||||
|
#include "tsrm_config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "tsrm_strtok_r.h"
|
||||||
|
|
||||||
|
|
||||||
/* Are we doing enough to detect this? */
|
/* Are we doing enough to detect this? */
|
||||||
#ifndef MAXPATHLEN
|
#ifndef MAXPATHLEN
|
||||||
#define MAXPATHLEN 256
|
#define MAXPATHLEN 256
|
||||||
@ -42,15 +47,14 @@
|
|||||||
# define do_alloca(p) alloca(p)
|
# define do_alloca(p) alloca(p)
|
||||||
# define free_alloca(p)
|
# define free_alloca(p)
|
||||||
# else
|
# else
|
||||||
# define do_alloca(p) emalloc(p)
|
# define do_alloca(p) malloc(p)
|
||||||
# define free_alloca(p) efree(p)
|
# define free_alloca(p) free(p)
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef TSRM_WIN32
|
#ifdef TSRM_WIN32
|
||||||
/* mode_t isn't defined on Windows */
|
|
||||||
typedef int mode_t;
|
|
||||||
#include <sys/utime.h>
|
#include <sys/utime.h>
|
||||||
|
#include <io.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define VIRTUAL_CWD_DEBUG 0
|
#define VIRTUAL_CWD_DEBUG 0
|
||||||
@ -175,7 +179,7 @@ static void cwd_globals_dtor(virtual_cwd_globals *cwd_globals)
|
|||||||
CWD_STATE_FREE(&cwd_globals->cwd);
|
CWD_STATE_FREE(&cwd_globals->cwd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *tsrm_strndup(const char *s, uint length)
|
static char *tsrm_strndup(const char *s, size_t length)
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
@ -509,7 +513,7 @@ CWD_API FILE *virtual_fopen(const char *path, const char *mode)
|
|||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HAVE_UTIME
|
#if HAVE_UTIME || defined(TSRM_WIN32)
|
||||||
CWD_API int virtual_utime(const char *filename, struct utimbuf *buf)
|
CWD_API int virtual_utime(const char *filename, struct utimbuf *buf)
|
||||||
{
|
{
|
||||||
cwd_state new_state;
|
cwd_state new_state;
|
||||||
@ -541,7 +545,7 @@ CWD_API int virtual_chmod(const char *filename, mode_t mode)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef PHP_WIN32
|
#ifndef TSRM_WIN32
|
||||||
CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group)
|
CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group)
|
||||||
{
|
{
|
||||||
cwd_state new_state;
|
cwd_state new_state;
|
||||||
@ -657,8 +661,11 @@ CWD_API int virtual_mkdir(const char *pathname, mode_t mode)
|
|||||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||||
virtual_file_ex(&new_state, pathname, NULL);
|
virtual_file_ex(&new_state, pathname, NULL);
|
||||||
|
|
||||||
|
#ifdef TSRM_WIN32
|
||||||
|
retval = mkdir(new_state.cwd);
|
||||||
|
#else
|
||||||
retval = mkdir(new_state.cwd, mode);
|
retval = mkdir(new_state.cwd, mode);
|
||||||
|
#endif
|
||||||
CWD_STATE_FREE(&new_state);
|
CWD_STATE_FREE(&new_state);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
@ -678,6 +685,10 @@ CWD_API int virtual_rmdir(const char *pathname)
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef TSRM_WIN32
|
||||||
|
DIR *opendir(const char *name);
|
||||||
|
#endif
|
||||||
|
|
||||||
CWD_API DIR *virtual_opendir(const char *pathname)
|
CWD_API DIR *virtual_opendir(const char *pathname)
|
||||||
{
|
{
|
||||||
cwd_state new_state;
|
cwd_state new_state;
|
||||||
@ -724,7 +735,11 @@ CWD_API FILE *virtual_popen(const char *command, const char *type)
|
|||||||
*ptr++ = ' ';
|
*ptr++ = ' ';
|
||||||
|
|
||||||
memcpy(ptr, command, command_length+1);
|
memcpy(ptr, command, command_length+1);
|
||||||
|
#ifdef TSRM_WIN32
|
||||||
|
retval = _popen(command_line, type);
|
||||||
|
#else
|
||||||
retval = popen(command_line, type);
|
retval = popen(command_line, type);
|
||||||
|
#endif
|
||||||
free(command_line);
|
free(command_line);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
@ -751,7 +766,7 @@ CWD_API FILE *virtual_popen(const char *command, const char *type)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
chdir(CWDG(cwd).cwd);
|
chdir(CWDG(cwd).cwd);
|
||||||
retval = popen(command, type);
|
retval = _popen(command, type);
|
||||||
chdir(prev_cwd);
|
chdir(prev_cwd);
|
||||||
|
|
||||||
#ifdef ZTS
|
#ifdef ZTS
|
||||||
|
@ -43,7 +43,10 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef TSRM_WIN32
|
#ifdef TSRM_WIN32
|
||||||
#include "win32/readdir.h"
|
#include "readdir.h"
|
||||||
|
|
||||||
|
/* mode_t isn't defined on Windows */
|
||||||
|
typedef int mode_t;
|
||||||
|
|
||||||
#define IS_SLASH(c) ((c) == '/' || (c) == '\\')
|
#define IS_SLASH(c) ((c) == '/' || (c) == '\\')
|
||||||
|
|
||||||
@ -70,7 +73,7 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PHP_EXPORTS
|
#ifdef TSRM_EXPORTS
|
||||||
#define CWD_EXPORTS
|
#define CWD_EXPORTS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -97,7 +100,6 @@ CWD_API char *virtual_getcwd_ex(int *length);
|
|||||||
CWD_API char *virtual_getcwd(char *buf, size_t size);
|
CWD_API char *virtual_getcwd(char *buf, size_t size);
|
||||||
CWD_API int virtual_chdir(const char *path);
|
CWD_API int virtual_chdir(const char *path);
|
||||||
CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path));
|
CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path));
|
||||||
/* CWD_API void virtual_real_chdir_file(const char *path); */
|
|
||||||
CWD_API int virtual_filepath(const char *path, char **filepath);
|
CWD_API int virtual_filepath(const char *path, char **filepath);
|
||||||
CWD_API char *virtual_realpath(const char *path, char *real_path);
|
CWD_API char *virtual_realpath(const char *path, char *real_path);
|
||||||
CWD_API FILE *virtual_fopen(const char *path, const char *mode);
|
CWD_API FILE *virtual_fopen(const char *path, const char *mode);
|
||||||
@ -116,7 +118,7 @@ CWD_API FILE *virtual_popen(const char *command, const char *type);
|
|||||||
CWD_API int virtual_utime(const char *filename, struct utimbuf *buf);
|
CWD_API int virtual_utime(const char *filename, struct utimbuf *buf);
|
||||||
#endif
|
#endif
|
||||||
CWD_API int virtual_chmod(const char *filename, mode_t mode);
|
CWD_API int virtual_chmod(const char *filename, mode_t mode);
|
||||||
#ifndef PHP_WIN32
|
#ifndef TSRM_WIN32
|
||||||
CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group);
|
CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user