extern tVFS_Mount *gRootMount;
// === PROTOTYPES ===
- int VFS_MkDir(char *Path);
- int VFS_MkNod(char *Path, Uint Flags);
+#if 0
+ int VFS_MkDir(const char *Path);
+ int VFS_MkNod(const char *Path, Uint Flags);
+ int VFS_Symlink(const char *Name, const char *Link);
+#endif
// === CODE ===
/**
* \brief Create a new node
* \param Path Path of directory to create
*/
-int VFS_MkDir(char *Path)
+int VFS_MkDir(const char *Path)
{
return VFS_MkNod(Path, VFS_FFLAG_DIRECTORY);
}
* \param Path Path of new node
* \param Flags Flags to apply to the node
*/
-int VFS_MkNod(char *Path, Uint Flags)
+int VFS_MkNod(const char *Path, Uint Flags)
{
char *absPath, *name;
int pos = 0, oldpos = 0;
// Check for root
if(absPath[0] == '\0')
- parent = VFS_ParsePath("/", NULL);
+ parent = VFS_ParsePath("/", NULL, NULL);
else
- parent = VFS_ParsePath(absPath, NULL);
+ parent = VFS_ParsePath(absPath, NULL, NULL);
LOG("parent = %p", parent);
// Permissions Check
if( !VFS_CheckACL(parent, VFS_PERM_EXECUTE|VFS_PERM_WRITE) ) {
- if(parent->Close) parent->Close( parent );
+ _CloseNode(parent);
free(absPath);
LEAVE('i', -1);
return -1;
LOG("parent = %p", parent);
- if(parent->MkNod == NULL) {
+ if(!parent->Type || !parent->Type->MkNod) {
Warning("VFS_MkNod - Directory has no MkNod method");
LEAVE('i', -1);
return -1;
}
// Create node
- ret = parent->MkNod(parent, name, Flags);
+ ret = parent->Type->MkNod(parent, name, Flags);
// Free allocated string
free(absPath);
// Free Parent
- if(parent->Close) parent->Close( parent );
+ _CloseNode(parent);
// Error Check
if(ret == 0) {
}
/**
- * \fn int VFS_Symlink(char *Name, char *Link)
+ * \fn int VFS_Symlink(const char *Name, const char *Link)
* \brief Creates a symlink called \a Name to \a Link
* \param Name Name of symbolic link
* \param Link Destination of symbolic link
*/
-int VFS_Symlink(char *Name, char *Link)
+int VFS_Symlink(const char *Name, const char *Link)
{
char *realLink;
int fp;
- tVFS_Node *destNode;
- //ENTER("sName sLink", Name, Link);
+ ENTER("sName sLink", Name, Link);
// Get absolue path name
- Link = VFS_GetAbsPath( Link );
- if(!Link) {
- Warning("Path '%s' is badly formed", Link);
- return -1;
- }
-
- // Get true path and node
- destNode = VFS_ParsePath( Link, &realLink );
- free(Link);
-
- // Check if destination exists
- if(!destNode) {
- Warning("File '%s' does not exist, symlink not created", Link);
+ realLink = VFS_GetAbsPath( Link );
+ if(!realLink) {
+ Log_Warning("VFS", "Path '%s' is badly formed", Link);
+ LEAVE('i', -1);
return -1;
}
-
- // Derefence the destination
- if(destNode->Close) destNode->Close(destNode);
-
+
+ LOG("realLink = '%s'", realLink);
+
// Make node
if( VFS_MkNod(Name, VFS_FFLAG_SYMLINK) != 0 ) {
- Warning("Unable to create link node '%s'", Name);
+ Log_Warning("VFS", "Unable to create link node '%s'", Name);
+ free(realLink);
+ LEAVE('i', -2);
return -2; // Make link node
}
free(realLink);
+ LEAVE('i', 1);
return 1;
}
//ENTER("ph pDest", h, Dest);
- if(!h || h->Node->ReadDir == NULL) {
+ if(!h || !h->Node->Type || !h->Node->Type->ReadDir) {
//LEAVE('i', 0);
return 0;
}
}
do {
- tmp = h->Node->ReadDir(h->Node, h->Position);
+ tmp = h->Node->Type->ReadDir(h->Node, h->Position);
if((Uint)tmp < (Uint)VFS_MAXSKIP)
h->Position += (Uint)tmp;
else