Merge branch 'master' of git://git.ucc.asn.au/tpg/acess2
[tpg/acess2.git] / KernelLand / Kernel / include / vfs_ext.h
index b4d5e2a..44c70f8 100644 (file)
@@ -13,6 +13,7 @@ typedef Uint64        tInode;
 typedef Uint32 tMount;
 
 // === CONSTANTS ===
+#define FILENAME_MAX   256
 //! Maximum size of a Memory Path generated by VFS_GetMemPath
 #define        VFS_MEMPATH_SIZE        (3 + (BITS/4)*2)
 /**
@@ -29,6 +30,8 @@ typedef Uint32        tMount;
 #define        VFS_OPENFLAG_NOLINK     0x40
 //! Create the file if it doesn't exist
 #define VFS_OPENFLAG_CREATE    0x80
+//! Treat as a directory
+#define VFS_OPENFLAG_DIRECTORY 0x100
 //! Open as a user
 #define        VFS_OPENFLAG_USER       0x8000
 /**
@@ -274,7 +277,7 @@ extern Uint64       VFS_Tell(int FD);
  * \param Buffer       Destination of read data
  * \return Number of read bytes
  */
-extern Uint64  VFS_Read(int FD, Uint64 Length, void *Buffer);
+extern size_t  VFS_Read(int FD, size_t Length, void *Buffer);
 /**
  * \brief Writes data to a file
  * \param FD   File handle returned by ::VFS_Open
@@ -282,7 +285,7 @@ extern Uint64       VFS_Read(int FD, Uint64 Length, void *Buffer);
  * \param Buffer       Source of written data
  * \return Number of bytes written
  */
-extern Uint64  VFS_Write(int FD, Uint64 Length, const void *Buffer);
+extern size_t  VFS_Write(int FD, size_t Length, const void *Buffer);
 
 /**
  * \brief Reads from a specific offset in the file
@@ -292,7 +295,7 @@ extern Uint64       VFS_Write(int FD, Uint64 Length, const void *Buffer);
  * \param Buffer       Source of read data
  * \return Number of bytes read
  */
-extern Uint64  VFS_ReadAt(int FD, Uint64 Offset, Uint64 Length, void *Buffer);
+extern size_t  VFS_ReadAt(int FD, Uint64 Offset, size_t Length, void *Buffer);
 /**
  * \brief Writes to a specific offset in the file
  * \param FD   File handle returned by ::VFS_Open
@@ -301,7 +304,7 @@ extern Uint64       VFS_ReadAt(int FD, Uint64 Offset, Uint64 Length, void *Buffer);
  * \param Buffer       Source of written data
  * \return Number of bytes written
  */
-extern Uint64  VFS_WriteAt(int FD, Uint64 Offset, Uint64 Length, const void *Buffer);
+extern size_t  VFS_WriteAt(int FD, Uint64 Offset, size_t Length, const void *Buffer);
 
 /**
  * \brief Sends an IOCtl request to the driver
@@ -336,6 +339,19 @@ extern char        *VFS_GetTruePath(const char *Path);
  * \return 1 on succes, -1 on error
  */
 extern int     VFS_Mount(const char *Device, const char *MountPoint, const char *Filesystem, const char *Options);
+/**
+ * \brief Unmount a mounted filesystem
+ * \param Mountpoint   Location of the mount
+ * \return 0 on success, errno on error
+ */
+extern int     VFS_Unmount(const char *Mountpoint);
+/**
+ * \brief Attemt to unmount all fileystems
+ * \return Number of unmounted filesytems, -1 if none left to unmount
+ * \note Can return 0 when there are stil volumes mounted if there are open handles
+ */
+extern int     VFS_UnmountAll(void);
+
 /**
  * \brief Create a new directory
  * \param Path Path to new directory (absolute or relative)
@@ -353,10 +369,10 @@ extern int        VFS_Symlink(const char *Name, const char *Link);
 /**
  * \brief Read from a directory
  * \param FD   File handle returned by ::VFS_Open
- * \param Dest Destination array for the file name (max 255 bytes)
+ * \param Dest Destination array for the file name (max FILENAME_MAX bytes)
  * \return Boolean Success
  */
-extern int     VFS_ReadDir(int FD, char *Dest);
+extern int     VFS_ReadDir(int FD, char Dest[FILENAME_MAX]);
 /**
  * \brief Wait for an aciton on a file descriptor
  * \param MaxHandle    Maximum set handle in \a *Handles

UCC git Repository :: git.ucc.asn.au