git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed strncmp
[tpg/acess2.git]
/
Kernel
/
vfs
/
open.c
diff --git
a/Kernel/vfs/open.c
b/Kernel/vfs/open.c
index
dc10123
..
1c00a1f
100644
(file)
--- a/
Kernel/vfs/open.c
+++ b/
Kernel/vfs/open.c
@@
-2,26
+2,16
@@
* AcessMicro VFS
* - Open, Close and ChDir
*/
* AcessMicro VFS
* - Open, Close and ChDir
*/
+#define DEBUG 0
#include <common.h>
#include "vfs.h"
#include "vfs_int.h"
#include "vfs_ext.h"
#include <common.h>
#include "vfs.h"
#include "vfs_int.h"
#include "vfs_ext.h"
-#define DEBUG 0
-
-#if DEBUG
-#else
-# undef ENTER
-# undef LOG
-# undef LEAVE
-# define ENTER(...)
-# define LOG(...)
-# define LEAVE(...)
-#endif
-
// === CONSTANTS ===
#define OPEN_MOUNT_ROOT 1
#define MAX_KERNEL_FILES 128
// === CONSTANTS ===
#define OPEN_MOUNT_ROOT 1
#define MAX_KERNEL_FILES 128
+#define MAX_PATH_SLASHES 256
// === IMPORTS ===
extern tVFS_Node gVFS_MemRoot;
// === IMPORTS ===
extern tVFS_Node gVFS_MemRoot;
@@
-42,7
+32,7
@@
char *VFS_GetAbsPath(char *Path)
int pathLen = strlen(Path);
int read, write;
int pos, slashNum=0, baseLen;
int pathLen = strlen(Path);
int read, write;
int pos, slashNum=0, baseLen;
- Uint slashOffsets[
256
];
+ Uint slashOffsets[
MAX_PATH_SLASHES
];
char *cwd = CFGPTR(CFG_VFS_CWD);
int cwdLen;
char *cwd = CFGPTR(CFG_VFS_CWD);
int cwdLen;
@@
-72,16
+62,20
@@
char *VFS_GetAbsPath(char *Path)
} else {
cwdLen = strlen(cwd);
// Prepend the current directory
} else {
cwdLen = strlen(cwd);
// Prepend the current directory
- ret = malloc(cwdLen+pathLen+
1
);
+ ret = malloc(cwdLen+pathLen+
2
);
strcpy(ret, cwd);
strcpy(ret, cwd);
- strcpy(&ret[cwdLen], Path);
+ ret[cwdLen] = '/';
+ strcpy(&ret[cwdLen+1], Path);
// Pre-fill the slash positions
// Pre-fill the slash positions
- pos = 0;
- while( (pos = strpos( &ret[pos+1], '/' )) != -1 )
+ read = 1; slashNum = 0;
+ while( (pos = strpos( &ret[read], '/' )) != -1 && slashNum < MAX_PATH_SLASHES )
+ {
+ read += pos+1;
slashOffsets[slashNum++] = pos;
slashOffsets[slashNum++] = pos;
+ }
- baseLen = cwdLen;
+ baseLen = cwdLen
+1
;
}
// Remove . and ..
}
// Remove . and ..
@@
-93,9
+87,12
@@
char *VFS_GetAbsPath(char *Path)
if(pos == -1) pos = baseLen+pathLen;
else pos += read; // Else, Adjust to absolute
if(pos == -1) pos = baseLen+pathLen;
else pos += read; // Else, Adjust to absolute
+ Log("pos-read = %i", pos-read);
+
// Check Length
if(pos - read <= 2)
{
// Check Length
if(pos - read <= 2)
{
+ Log("&ret[read] = '%s'", &ret[read]);
// Current Dir "."
if(strncmp(&ret[read], ".", pos-read) == 0) continue;
// Parent ".."
// Current Dir "."
if(strncmp(&ret[read], ".", pos-read) == 0) continue;
// Parent ".."
@@
-115,7
+112,7
@@
char *VFS_GetAbsPath(char *Path)
memcpy( &ret[write], &ret[read], pos-read+1 );
}
write = pos+1;
memcpy( &ret[write], &ret[read], pos-read+1 );
}
write = pos+1;
- if(slashNum <
256
)
+ if(slashNum <
MAX_PATH_SLASHES
)
slashOffsets[ slashNum++ ] = pos;
else {
LOG("Path '%s' has too many elements", Path);
slashOffsets[ slashNum++ ] = pos;
else {
LOG("Path '%s' has too many elements", Path);
@@
-127,6
+124,7
@@
char *VFS_GetAbsPath(char *Path)
// `ret` should now be the absolute path
LEAVE('s', ret);
// `ret` should now be the absolute path
LEAVE('s', ret);
+ Log("VFS_GetAbsPath: RETURN '%s'", ret);
return ret;
}
return ret;
}
UCC
git Repository :: git.ucc.asn.au