summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2007-07-23 08:57:20 +0000
committerDmitry Stogov <dmitry@php.net>2007-07-23 08:57:20 +0000
commita53d148b7ec1ff24bca2afbbb286fad72b280e5a (patch)
treedfdb9e74e9e8d7e0e2131377a8441a4d17d4ffb6
parent307d9364ab0051f391edd77723f76174ed31b959 (diff)
downloadphp-git-a53d148b7ec1ff24bca2afbbb286fad72b280e5a.tar.gz
Fixed rename() in ZTS to allow renaming of symbolic links;
Consistent handling of trailing slash
-rw-r--r--TSRM/tsrm_virtual_cwd.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/TSRM/tsrm_virtual_cwd.c b/TSRM/tsrm_virtual_cwd.c
index 5786e0d130..0e2e2ed63f 100644
--- a/TSRM/tsrm_virtual_cwd.c
+++ b/TSRM/tsrm_virtual_cwd.c
@@ -692,6 +692,15 @@ no_realpath:
}
ptr = tsrm_strtok_r(NULL, TOKENIZER_STRING, &tok);
}
+#if defined(TSRM_WIN32) || defined(NETWARE)
+ if (path[path_length-1] == '\\' || path[path_length-1] == '/') {
+#else
+ if (path[path_length-1] == '/') {
+#endif
+ state->cwd = (char*)realloc(state->cwd, state->cwd_length + 2);
+ state->cwd[state->cwd_length++] = DEFAULT_SLASH;
+ state->cwd[state->cwd_length] = 0;
+ }
free(free_path);
@@ -979,14 +988,14 @@ CWD_API int virtual_rename(char *oldname, char *newname TSRMLS_DC)
int retval;
CWD_STATE_COPY(&old_state, &CWDG(cwd));
- if (virtual_file_ex(&old_state, oldname, NULL, CWD_REALPATH)) {
+ if (virtual_file_ex(&old_state, oldname, NULL, CWD_EXPAND)) {
CWD_STATE_FREE(&old_state);
return -1;
}
oldname = old_state.cwd;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
- if (virtual_file_ex(&new_state, newname, NULL, CWD_FILEPATH)) {
+ if (virtual_file_ex(&new_state, newname, NULL, CWD_EXPAND)) {
CWD_STATE_FREE(&old_state);
CWD_STATE_FREE(&new_state);
return -1;