/*
+ * Acess2 VFS
+ * - Directory Management Functions
*/
-#include "vfs.h"
-#include "vfs_int.h"
+#define DEBUG 0
+#include <common.h>
+#include <vfs.h>
+#include <vfs_int.h>
// === IMPORTS ===
extern tVFS_Mount *gRootMount;
tVFS_Node *parent;
int ret;
- Debug_Enter("VFS_MkNod", "sPath xFlags", Path, Flags);
+ ENTER("sPath xFlags", Path, Flags);
absPath = VFS_GetAbsPath(Path);
if( !VFS_CheckACL(parent, VFS_PERM_EXECUTE|VFS_PERM_WRITE) ) {
if(parent->Close) parent->Close( parent );
free(absPath);
- Debug_Leave("VFS_MkNod", 'i', -1);
+ LEAVE('i', -1);
return -1;
}
- Debug_Log("VFS_MkNod", "parent = %p\n", parent);
+ LOG("parent = %p\n", parent);
if(parent->MkNod == NULL) {
Warning("VFS_MkNod - Directory has no MkNod method");
- Debug_Leave("VFS_MkNod", 'i', -1);
+ LEAVE('i', -1);
return -1;
}
if(parent->Close) parent->Close( parent );
// Error Check
- if(ret == 0) return -1;
+ if(ret == 0) {
+ LEAVE('i', -1);
+ return -1;
+ }
- Debug_Leave("VFS_MkNod", 'i', 0);
+ LEAVE('i', 0);
return 0;
}
int fp;
tVFS_Node *destNode;
- //LogF("vfs_symlink: (name='%s', link='%s')\n", name, link);
+ //ENTER("sName sLink", Name, Link);
// Get absolue path name
Link = VFS_GetAbsPath( Link );
return 1;
}
+
+/**
+ * \fn int VFS_ReadDir(int FD, char *Dest)
+ * \brief Read from a directory
+ */
+int VFS_ReadDir(int FD, char *Dest)
+{
+ tVFS_Handle *h = VFS_GetHandle(FD);
+ char *tmp;
+
+ //ENTER("ph pDest", h, Dest);
+
+ if(!h || h->Node->ReadDir == NULL) {
+ //LEAVE('i', 0);
+ return 0;
+ }
+
+ if(h->Node->Size != -1 && h->Position >= h->Node->Size) {
+ //LEAVE('i', 0);
+ return 0;
+ }
+
+ do {
+ tmp = h->Node->ReadDir(h->Node, h->Position);
+ if((Uint)tmp < (Uint)VFS_MAXSKIP)
+ h->Position += (Uint)tmp;
+ else
+ h->Position ++;
+ } while(tmp != NULL && (Uint)tmp < (Uint)VFS_MAXSKIP);
+
+ //LOG("tmp = '%s'", tmp);
+
+ if(!tmp) {
+ //LEAVE('i', 0);
+ return 0;
+ }
+
+ strcpy(Dest, tmp);
+ free(tmp);
+
+ //LEAVE('i', 1);
+ return 1;
+}