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
Cleaning up debug (and set modules to build with debug)
[tpg/acess2.git]
/
Kernel
/
vfs
/
open.c
diff --git
a/Kernel/vfs/open.c
b/Kernel/vfs/open.c
index
a396465
..
bd43a5f
100644
(file)
--- a/
Kernel/vfs/open.c
+++ b/
Kernel/vfs/open.c
@@
-1,5
+1,5
@@
/*
/*
- * Acess
Micro
VFS
+ * Acess
2
VFS
* - Open, Close and ChDir
*/
#define DEBUG 0
* - Open, Close and ChDir
*/
#define DEBUG 0
@@
-167,7
+167,7
@@
char *VFS_GetAbsPath(const char *Path)
}
/**
}
/**
- * \fn char *VFS_ParsePath(char *Path, char **TruePath)
+ * \fn char *VFS_ParsePath(c
onst c
har *Path, char **TruePath)
* \brief Parses a path, resolving sysmlinks and applying permissions
*/
tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath)
* \brief Parses a path, resolving sysmlinks and applying permissions
*/
tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath)
@@
-191,8
+191,8
@@
tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath)
LEAVE('p', curNode);
return curNode;
}
LEAVE('p', curNode);
return curNode;
}
- // For root we always fast return
+ // For root we always fast return
if(Path[0] == '/' && Path[1] == '\0') {
if(TruePath) {
*TruePath = malloc( gVFS_RootMount->MountPointLen+1 );
if(Path[0] == '/' && Path[1] == '\0') {
if(TruePath) {
*TruePath = malloc( gVFS_RootMount->MountPointLen+1 );
@@
-202,7
+202,7
@@
tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath)
return gVFS_RootMount->RootNode;
}
return gVFS_RootMount->RootNode;
}
- // Check if there is anything mounted
+ // Check if there is an
`
ything mounted
if(!gVFS_Mounts) {
Warning("WTF! There's nothing mounted?");
return NULL;
if(!gVFS_Mounts) {
Warning("WTF! There's nothing mounted?");
return NULL;
@@
-237,12
+237,6
@@
tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath)
longestMount = mnt;
}
longestMount = mnt;
}
- // Sanity Check
- /*if(!longestMount) {
- Log("VFS_ParsePath - ERROR: No Root Node\n");
- return NULL;
- }*/
-
// Save to shorter variable
mnt = longestMount;
// Save to shorter variable
mnt = longestMount;
@@
-260,7
+254,7
@@
tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath)
curNode->ReferenceCount ++;
// Parse Path
ofs = mnt->MountPointLen+1;
curNode->ReferenceCount ++;
// Parse Path
ofs = mnt->MountPointLen+1;
- for(; (nextSlash = strpos(&Path[ofs], '/')) != -1; ofs = nextSlash + 1)
+ for(; (nextSlash = strpos(&Path[ofs], '/')) != -1; ofs
+
= nextSlash + 1)
{
char pathEle[nextSlash+1];
{
char pathEle[nextSlash+1];
@@
-294,11
+288,14
@@
tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath)
LEAVE('n');
return NULL;
}
LEAVE('n');
return NULL;
}
- LOG("FindDir
(%p, '%s')"
, curNode, pathEle);
+ LOG("FindDir
{=%p}(%p, '%s')", curNode->FindDir
, curNode, pathEle);
// Get Child Node
tmpNode = curNode->FindDir(curNode, pathEle);
LOG("tmpNode = %p", tmpNode);
// Get Child Node
tmpNode = curNode->FindDir(curNode, pathEle);
LOG("tmpNode = %p", tmpNode);
- if(curNode->Close) curNode->Close(curNode);
+ if(curNode->Close) {
+ //LOG2("curNode->Close = %p", curNode->Close);
+ curNode->Close(curNode);
+ }
curNode = tmpNode;
// Error Check
curNode = tmpNode;
// Error Check
@@
-319,11
+316,19
@@
tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath)
free(*TruePath);
*TruePath = NULL;
}
free(*TruePath);
*TruePath = NULL;
}
- tmp = malloc( curNode->Size + 1 );
if(!curNode->Read) {
Warning("VFS_ParsePath - Read of node %p is NULL (%s)",
curNode, Path);
if(curNode->Close) curNode->Close(curNode);
if(!curNode->Read) {
Warning("VFS_ParsePath - Read of node %p is NULL (%s)",
curNode, Path);
if(curNode->Close) curNode->Close(curNode);
+ // No need to free *TruePath, see above
+ LEAVE('n');
+ return NULL;
+ }
+
+ tmp = malloc( curNode->Size + 1 );
+ if(!tmp) {
+ Log_Warning("VFS", "VFS_ParsePath - Malloc failure");
+ // No need to free *TruePath, see above
LEAVE('n');
return NULL;
}
LEAVE('n');
return NULL;
}
@@
-333,12
+338,13
@@
tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath)
// Parse Symlink Path
curNode = VFS_ParsePath(tmp, TruePath);
if(TruePath)
// Parse Symlink Path
curNode = VFS_ParsePath(tmp, TruePath);
if(TruePath)
- L
og_Debug
("VFS", "*TruePath='%s'", *TruePath);
+ L
OG
("VFS", "*TruePath='%s'", *TruePath);
// Error Check
if(!curNode) {
// Error Check
if(!curNode) {
- Log
(
"Symlink fail '%s'", tmp);
+ Log
_Debug("VFS",
"Symlink fail '%s'", tmp);
free(tmp); // Free temp string
free(tmp); // Free temp string
+ if(TruePath) free(TruePath);
LEAVE('n');
return NULL;
}
LEAVE('n');
return NULL;
}
@@
-367,11
+373,12
@@
tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath)
if(!TruePath) continue;
// Increase buffer space
if(!TruePath) continue;
// Increase buffer space
- tmp = realloc( *TruePath, retLength + strlen(
&Path[ofs]
) + 1 + 1 );
+ tmp = realloc( *TruePath, retLength + strlen(
pathEle
) + 1 + 1 );
// Check if allocation succeeded
if(!tmp) {
Warning("VFS_ParsePath - Unable to reallocate true path buffer");
free(*TruePath);
// Check if allocation succeeded
if(!tmp) {
Warning("VFS_ParsePath - Unable to reallocate true path buffer");
free(*TruePath);
+ *TruePath = NULL;
if(curNode->Close) curNode->Close(curNode);
LEAVE('n');
return NULL;
if(curNode->Close) curNode->Close(curNode);
LEAVE('n');
return NULL;
@@
-380,8
+387,22
@@
tVFS_Node *VFS_ParsePath(const char *Path, char **TruePath)
// Append to path
(*TruePath)[retLength] = '/';
strcpy(*TruePath+retLength+1, pathEle);
// Append to path
(*TruePath)[retLength] = '/';
strcpy(*TruePath+retLength+1, pathEle);
+
+ LOG("*TruePath = '%s'", *TruePath);
+
// - Extend Path
// - Extend Path
- retLength += nextSlash;
+ retLength += nextSlash + 1;
+ }
+
+ if( !curNode->FindDir ) {
+ if(curNode->Close) curNode->Close(curNode);
+ if(TruePath) {
+ free(*TruePath);
+ *TruePath = NULL;
+ }
+ Log("FindDir fail on '%s'", Path);
+ LEAVE('n');
+ return NULL;
}
// Get last node
}
// Get last node
UCC
git Repository :: git.ucc.asn.au