# include "tsrm_config.h"
#endif
+
+#ifdef TSRM_WIN32
+# ifdef TSRM_EXPORTS
+# define TSRM_API __declspec(dllexport)
+# else
+# define TSRM_API __declspec(dllimport)
+# endif
+#else
+# define TSRM_API
+#endif
+
/* Only compile multi-threading functions if we're in ZTS mode */
#ifdef ZTS
typedef int ts_rsrc_id;
-#ifdef TSRM_WIN32
-# ifdef TSRM_EXPORTS
-# define TSRM_API __declspec(dllexport)
-# else
-# define TSRM_API __declspec(dllimport)
-# endif
-#else
-# define TSRM_API
-#endif
-
-
/* Define THREAD_T and MUTEX_T */
#ifdef TSRM_WIN32
# define THREAD_T DWORD
#define TSRM_SHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)+1)
#define TSRM_UNSHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)-1)
-#define TSRMLS_FETCH() void ***tsrm_ls = ts_resource_ex(0, NULL)
-#define TSRMG(id, type, element) (((type) (*tsrm_ls)[TSRM_UNSHUFFLE_RSRC_ID(id)])->element)
+#define TSRMLS_FETCH() void ***tsrm_ls = (void ***) ts_resource_ex(0, NULL)
+#define TSRMG(id, type, element) (((type) (*((void ***) tsrm_ls))[TSRM_UNSHUFFLE_RSRC_ID(id)])->element)
#define TSRMLS_D void ***tsrm_ls
#define TSRMLS_DC , TSRMLS_D
#define TSRMLS_C tsrm_ls
}
#endif
-#else
+#else /* non ZTS */
+#define TSRMLS_FETCH()
#define TSRMLS_D
#define TSRMLS_DC
#define TSRMLS_C
#define TSRMLS_CC
-#define TSRMLS_FETCH()
#endif /* ZTS */
#define VIRTUAL_CWD_DEBUG 0
+#ifdef ZTS
#include "TSRM.h"
+#endif
/* Only need mutex for popen() in Windows because it doesn't chdir() on UNIX */
#if defined(TSRM_WIN32) && defined(ZTS)
CWD_API char *virtual_getcwd_ex(size_t *length)
{
cwd_state *state;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
state = &CWDG(cwd);
CWD_API int virtual_chdir(const char *path)
{
- CWDLS_FETCH();
+ TSRMLS_FETCH();
return virtual_file_ex(&CWDG(cwd), path, php_is_dir_ok)?-1:0;
}
{
cwd_state new_state;
int retval;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
retval = virtual_file_ex(&new_state, path, NULL);
{
cwd_state new_state;
int retval;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
retval = virtual_file_ex(&new_state, path, verify_path);
{
cwd_state new_state;
FILE *f;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
if (path[0] == '\0') { /* Fail to open empty path */
return NULL;
{
cwd_state new_state;
int ret;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, filename, NULL);
{
cwd_state new_state;
int ret;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, filename, NULL);
{
cwd_state new_state;
int ret;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, filename, NULL);
{
cwd_state new_state;
int f;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
{
cwd_state new_state;
int f;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
cwd_state old_state;
cwd_state new_state;
int retval;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
CWD_STATE_COPY(&old_state, &CWDG(cwd));
virtual_file_ex(&old_state, oldname, NULL);
{
cwd_state new_state;
int retval;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
{
cwd_state new_state;
int retval;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
{
cwd_state new_state;
int retval;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
{
cwd_state new_state;
int retval;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, pathname, NULL);
{
cwd_state new_state;
int retval;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, pathname, NULL);
{
cwd_state new_state;
DIR *retval;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, pathname, NULL);
char *command_line;
char *ptr;
FILE *retval;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
command_length = strlen(command);
char prev_cwd[MAXPATHLEN];
char *getcwd_result;
FILE *retval;
- CWDLS_FETCH();
+ TSRMLS_FETCH();
getcwd_result = getcwd(prev_cwd, MAXPATHLEN);
if (!getcwd_result) {
} virtual_cwd_globals;
#ifdef ZTS
-# define CWDLS_D virtual_cwd_globals *cwd_globals
-# define CWDLS_DC , CWDLS_D
-# define CWDLS_C cwd_globals
-# define CWDLS_CC , CWDLS_C
-# define CWDG(v) (cwd_globals->v)
-# define CWDLS_FETCH() virtual_cwd_globals *cwd_globals = ts_resource(cwd_globals_id)
+# define CWDG(v) TSRMG(cwd_globals_id, virtual_cwd_globals *, v)
#else
-# define CWDLS_D void
-# define CWDLS_DC
-# define CWDLS_C
-# define CWDLS_CC
# define CWDG(v) (cwd_globals.v)
-# define CWDLS_FETCH()
#endif
/* The actual macros to be used in programs using TSRM