From 6432df629daa6c6884b3ba4032497af44ed55d77 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sun, 27 Sep 2009 18:21:30 +0800 Subject: [PATCH] Correctness Fix: Stuff speed, now parses CWD with the rest of the path to fix issues with relative paths --- Kernel/vfs/open.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/Kernel/vfs/open.c b/Kernel/vfs/open.c index be7ebc3d..2eccac23 100644 --- a/Kernel/vfs/open.c +++ b/Kernel/vfs/open.c @@ -66,20 +66,10 @@ char *VFS_GetAbsPath(char *Path) strcpy(ret, cwd); ret[cwdLen] = '/'; strcpy(&ret[cwdLen+1], Path); - - // Pre-fill the slash positions - read = 1; slashNum = 0; - while( (pos = strpos( &ret[read], '/' )) != -1 && slashNum < MAX_PATH_SLASHES ) - { - read += pos+1; - slashOffsets[slashNum++] = read; - } - - baseLen = cwdLen+1; } // Remove . and .. - read = write = baseLen; // Cwd has already been parsed + read = write = 1; // Cwd has already been parsed for(; read < baseLen+pathLen; read = pos+1) { pos = strpos( &ret[read], '/' ); @@ -87,12 +77,12 @@ char *VFS_GetAbsPath(char *Path) if(pos == -1) pos = baseLen+pathLen; else pos += read; // Else, Adjust to absolute - Log("pos-read = %i", pos-read); + //Log("pos-read = %i", pos-read); // Check Length if(pos - read <= 2) { - Log("&ret[read] = '%s'", &ret[read]); + //Log("&ret[read] = '%s'", &ret[read]); // Current Dir "." if(strncmp(&ret[read], ".", pos-read) == 0) continue; // Parent ".." -- 2.20.1