#define V_OPEN(open_args) open open_args
#define V_CREAT(path, mode) creat(path, mode)
#define V_CHDIR(path) chdir(path)
-#define V_CHDIR_FILE(path) chdir_file(path)
+#define V_CHDIR_FILE(path) virtual_real_chdir_file(path)
#define V_GETWD(buf) getwd(buf)
#define V_STAT(path, buff) stat(path, buff)
#define V_LSTAT(path, buff) lstat(path, buff)
#endif
+/* taken from Apache 1.3 */
+
+CWD_API void virtual_real_chdir_file(const char *file)
+{
+ const char *x;
+ char buf[4096];
+
+ x = strrchr(file, '/');
+ if (x == NULL) {
+ chdir(file);
+ }
+ else if (x - file < sizeof(buf) - 1) {
+ memcpy(buf, file, x - file);
+ buf[x - file] = '\0';
+ chdir(buf);
+ }
+ /* XXX: well, this is a silly function, no method of reporting an
+ * error... ah well. */
+}
+
#if 0
main(void)
CWD_API char *virtual_getcwd(char *buf, size_t size);
CWD_API int virtual_chdir(char *path);
CWD_API int virtual_chdir_file(char *path);
+CWD_API int virtual_real_chdir_file(char *path);
CWD_API int virtual_filepath(char *path, char **filepath);
CWD_API char *virtual_realpath(char *path, char *real_path);
CWD_API FILE *virtual_fopen(const char *path, const char *mode);