diff --git a/src/fs/Kconfig b/src/fs/Kconfig index 0367555fce06c297700d6d9932ba581207363383..177862295177c82c2dbd9633615f1fc663f7e800 100644 --- a/src/fs/Kconfig +++ b/src/fs/Kconfig @@ -44,18 +44,18 @@ config NX_ENABLE_MOUNT_TABLE endif -config NX_VFS_MAX_PATH +config NX_FILE_MAX_PATH int "vfs max path length" default 512 -config NX_VFS_MAX_NAME +config NX_FILE_MAX_NAME int "vfs max name length" default 256 -config NX_VFS_MAX_FD +config NX_FILE_MAX_FD int "vfs max file descriptor number" default 256 -config NX_VFS_NODE_HASH_SIZE +config NX_FILE_NODE_HASH_SIZE int "vfs max node hash list size" default 256 diff --git a/src/fs/cpio/cpio.c b/src/fs/cpio/cpio.c index e666358f19a40f1f5e95e4c3068ff660fa5fee4f..6998c8d55aa7016e055f5cf9f828ed3949d9fc39 100644 --- a/src/fs/cpio/cpio.c +++ b/src/fs/cpio/cpio.c @@ -7,7 +7,7 @@ * Mobile phone: +86-18665388956 * QQ: 8192542 * - * Contains: virtual file system form xboot. + * Contains: nxos file system. * * Change Logs: * Date Author Notes @@ -18,7 +18,7 @@ #ifdef CONFIG_NX_FS_CPIO -#include +#include #include #include #include @@ -141,7 +141,7 @@ NX_PRIVATE NX_Bool CheckPath(const char * path, const char * prefix, const char return NX_True; } -NX_PRIVATE NX_Error CpioMount(NX_VfsMount * m, const char * dev) +NX_PRIVATE NX_Error CpioMount(NX_MountDesc * m, const char * dev) { struct CpioNewcHeader header; NX_U64 rd; @@ -167,40 +167,40 @@ NX_PRIVATE NX_Error CpioMount(NX_VfsMount * m, const char * dev) return NX_EFAULT; } - m->flags |= NX_VFS_MOUNT_RO; + m->flags |= NX_MOUNT_RO; m->root->data = NX_NULL; m->data = NX_NULL; return NX_EOK; } -NX_PRIVATE NX_Error CpioUnmount(NX_VfsMount * m) +NX_PRIVATE NX_Error CpioUnmount(NX_MountDesc * m) { m->data = NX_NULL; return NX_EOK; } -NX_PRIVATE NX_Error CpioMountSync(NX_VfsMount * m) +NX_PRIVATE NX_Error CpioMountSync(NX_MountDesc * m) { return NX_EOK; } -NX_PRIVATE NX_Error CpioVget(NX_VfsMount * m, NX_VfsNode * n) +NX_PRIVATE NX_Error CpioGetNode(NX_MountDesc * m, NX_FileNode * n) { return NX_EOK; } -NX_PRIVATE NX_Error CpioVput(NX_VfsMount * m, NX_VfsNode * n) +NX_PRIVATE NX_Error CpioPutNode(NX_MountDesc * m, NX_FileNode * n) { return NX_EOK; } -NX_PRIVATE NX_U64 CpioRead(NX_VfsNode * n, NX_I64 off, void * buf, NX_U64 len, NX_Error *outErr) +NX_PRIVATE NX_U64 CpioRead(NX_FileNode * n, NX_I64 off, void * buf, NX_U64 len, NX_Error *outErr) { NX_U64 toff; NX_U64 sz = 0; - if(n->type != NX_VFS_NODE_TYPE_REG) + if(n->type != NX_FILE_NODE_TYPE_REG) { NX_ErrorSet(outErr, NX_EINVAL); return 0; @@ -225,32 +225,32 @@ NX_PRIVATE NX_U64 CpioRead(NX_VfsNode * n, NX_I64 off, void * buf, NX_U64 len, N return sz; } -NX_PRIVATE NX_U64 CpioWrite(NX_VfsNode * n, NX_I64 off, void * buf, NX_U64 len, NX_Error *outErr) +NX_PRIVATE NX_U64 CpioWrite(NX_FileNode * n, NX_I64 off, void * buf, NX_U64 len, NX_Error *outErr) { NX_ErrorSet(outErr, NX_EPERM); return 0; } -NX_PRIVATE NX_Error CpioIoctl(NX_VfsNode * n, NX_U32 cmd, void *arg) +NX_PRIVATE NX_Error CpioIoctl(NX_FileNode * n, NX_U32 cmd, void *arg) { return NX_ENOFUNC; } -NX_PRIVATE NX_Error CpioTruncate(NX_VfsNode * n, NX_I64 off) +NX_PRIVATE NX_Error CpioTruncate(NX_FileNode * n, NX_I64 off) { return NX_EPERM; /* can't truncate */ } -NX_PRIVATE NX_Error CpioSync(NX_VfsNode * n) +NX_PRIVATE NX_Error CpioSync(NX_FileNode * n) { return NX_EOK; } -NX_PRIVATE NX_Error CpioReaddir(NX_VfsNode * dn, NX_I64 off, NX_VfsDirent * d) +NX_PRIVATE NX_Error CpioReadDir(NX_FileNode * dn, NX_I64 off, NX_Dirent * d) { struct CpioNewcHeader header; - char path[NX_VFS_MAX_PATH]; - char name[NX_VFS_MAX_NAME]; + char path[NX_FILE_MAX_PATH]; + char name[NX_FILE_MAX_NAME]; NX_U32 size, name_size, mode; NX_U64 toff = 0, rd; char buf[9]; @@ -311,38 +311,14 @@ NX_PRIVATE NX_Error CpioReaddir(NX_VfsNode * dn, NX_I64 off, NX_VfsDirent * d) break; } } - - if((mode & 00170000) == 0140000) - { - d->type = NX_VFS_DIR_TYPE_SOCK; - } - else if((mode & 00170000) == 0120000) - { - d->type = NX_VFS_DIR_TYPE_LNK; - } - else if ((mode & 00170000) == 0100000) - { - d->type = NX_VFS_DIR_TYPE_REG; - } - else if ((mode & 00170000) == 0060000) - { - d->type = NX_VFS_DIR_TYPE_BLK; - } - else if ((mode & 00170000) == 0040000) - { - d->type = NX_VFS_DIR_TYPE_DIR; - } - else if ((mode & 00170000) == 0020000) - { - d->type = NX_VFS_DIR_TYPE_CHR; - } - else if ((mode & 00170000) == 0010000) + + if ((mode & 00170000) == 0040000) { - d->type = NX_VFS_DIR_TYPE_FIFO; + d->type = NX_DIR_TYPE_DIR; } else { - d->type = NX_VFS_DIR_TYPE_REG; + d->type = NX_DIR_TYPE_REG; } NX_StrCopyN(d->name, name, sizeof(d->name)); @@ -352,10 +328,10 @@ NX_PRIVATE NX_Error CpioReaddir(NX_VfsNode * dn, NX_I64 off, NX_VfsDirent * d) return NX_EOK; } -NX_PRIVATE NX_Error CpioLookup(NX_VfsNode * dn, const char * name, NX_VfsNode * n) +NX_PRIVATE NX_Error CpioLookup(NX_FileNode * dn, const char * name, NX_FileNode * n) { struct CpioNewcHeader header; - char path[NX_VFS_MAX_PATH]; + char path[NX_FILE_MAX_PATH]; NX_U64 off = 0, rd; NX_U32 size, name_size, mode, mtime; NX_U8 buf[9]; @@ -413,55 +389,20 @@ NX_PRIVATE NX_Error CpioLookup(NX_VfsNode * dn, const char * name, NX_VfsNode * n->ctime = mtime; n->mode = 0; - if((mode & 00170000) == 0140000) + if((mode & 00170000) == 0040000) { - n->type = NX_VFS_NODE_TYPE_SOCK; - n->mode |= NX_VFS_S_IFSOCK; - } - else if((mode & 00170000) == 0120000) - { - n->type = NX_VFS_NODE_TYPE_LNK; - n->mode |= NX_VFS_S_IFLNK; - } - else if((mode & 00170000) == 0100000) - { - n->type = NX_VFS_NODE_TYPE_REG; - n->mode |= NX_VFS_S_IFREG; - } - else if((mode & 00170000) == 0060000) - { - n->type = NX_VFS_NODE_TYPE_BLK; - n->mode |= NX_VFS_S_IFBLK; - } - else if((mode & 00170000) == 0040000) - { - n->type = NX_VFS_NODE_TYPE_DIR; - n->mode |= NX_VFS_S_IFDIR; - } - else if((mode & 00170000) == 0020000) - { - n->type = NX_VFS_NODE_TYPE_CHR; - n->mode |= NX_VFS_S_IFCHR; - } - else if((mode & 00170000) == 0010000) - { - n->type = NX_VFS_NODE_TYPE_FIFO; - n->mode |= NX_VFS_S_IFIFO; + n->type = NX_FILE_NODE_TYPE_DIR; + n->mode |= NX_FILE_TYPE_DIR; } else { - n->type = NX_VFS_NODE_TYPE_REG; + n->type = NX_FILE_NODE_TYPE_REG; + n->mode |= NX_FILE_TYPE_REG; } - n->mode |= (mode & 00400) ? NX_VFS_S_IRUSR : 0; - n->mode |= (mode & 00200) ? NX_VFS_S_IWUSR : 0; - n->mode |= (mode & 00100) ? NX_VFS_S_IXUSR : 0; - n->mode |= (mode & 00040) ? NX_VFS_S_IRGRP : 0; - n->mode |= (mode & 00020) ? NX_VFS_S_IWGRP : 0; - n->mode |= (mode & 00010) ? NX_VFS_S_IXGRP : 0; - n->mode |= (mode & 00004) ? NX_VFS_S_IROTH : 0; - n->mode |= (mode & 00002) ? NX_VFS_S_IWOTH : 0; - n->mode |= (mode & 00001) ? NX_VFS_S_IXOTH : 0; + n->mode |= (mode & 00400) ? NX_FILE_MODE_READ : 0; + n->mode |= (mode & 00200) ? NX_FILE_MODE_WRITE : 0; + n->mode |= (mode & 00100) ? NX_FILE_MODE_EXEC : 0; n->size = size; off += sizeof(struct CpioNewcHeader); @@ -471,68 +412,66 @@ NX_PRIVATE NX_Error CpioLookup(NX_VfsNode * dn, const char * name, NX_VfsNode * return NX_EOK; } -NX_PRIVATE NX_Error CpioCreate(NX_VfsNode * dn, const char * filename, NX_U32 mode) +NX_PRIVATE NX_Error CpioCreate(NX_FileNode * dn, const char * filename, NX_U32 mode) { return NX_EPERM; } -NX_PRIVATE NX_Error CpioRemove(NX_VfsNode * dn, NX_VfsNode * n, const char *name) +NX_PRIVATE NX_Error CpioDelete(NX_FileNode * dn, NX_FileNode * n, const char *name) { return NX_EPERM; } -NX_PRIVATE NX_Error CpioRename(NX_VfsNode * sn, const char * sname, NX_VfsNode * n, NX_VfsNode * dn, const char * dname) +NX_PRIVATE NX_Error CpioRename(NX_FileNode * sn, const char * sname, NX_FileNode * n, NX_FileNode * dn, const char * dname) { return NX_EPERM; } -NX_PRIVATE NX_Error CpioMkdir(NX_VfsNode * dn, const char * name, NX_U32 mode) +NX_PRIVATE NX_Error CpioCreateDir(NX_FileNode * dn, const char * name, NX_U32 mode) { return NX_EPERM; } -NX_PRIVATE NX_Error CpioRmdir(NX_VfsNode * dn, NX_VfsNode * n, const char *name) +NX_PRIVATE NX_Error CpioDeleteDir(NX_FileNode * dn, NX_FileNode * n, const char *name) { return NX_EPERM; } -NX_PRIVATE NX_Error CpioChmod(NX_VfsNode * n, NX_U32 mode) +NX_PRIVATE NX_Error CpioSetMode(NX_FileNode * n, NX_U32 mode) { return NX_EPERM; } -NX_PRIVATE NX_VfsFileSystem cpio = { +NX_PRIVATE NX_FileSystem cpio = { .name = "cpio", - .mount = CpioMount, .unmount = CpioUnmount, - .msync = CpioMountSync, - .vget = CpioVget, - .vput = CpioVput, - + .mountSync = CpioMountSync, + .getNode = CpioGetNode, + .putNode = CpioPutNode, .read = CpioRead, .write = CpioWrite, .ioctl = CpioIoctl, .truncate = CpioTruncate, .sync = CpioSync, - .readdir = CpioReaddir, + .readDir = CpioReadDir, .lookup = CpioLookup, .create = CpioCreate, - .remove = CpioRemove, + .delete = CpioDelete, .rename = CpioRename, - .mkdir = CpioMkdir, - .rmdir = CpioRmdir, - .chmod = CpioChmod, + .createDir = CpioCreateDir, + .deleteDir = CpioDeleteDir, + .setMode = CpioSetMode, }; NX_PRIVATE void NX_FileSystemCpioInit(void) { - NX_VfsRegisterFileSystem(&cpio); + NX_FileSystemRegister(&cpio); } NX_PRIVATE void NX_FileSystemCpioExit(void) { - NX_VfsUnregisterFileSystem(&cpio); + NX_FileSystemUnregister(&cpio); } NX_FS_INIT(NX_FileSystemCpioInit); diff --git a/src/fs/devfs/devfs.c b/src/fs/devfs/devfs.c index f5f709d8e3925469ba4b78153ef5402b8f238a9c..1efa158191849a780c34bbc0f9a6c200baf9f4c8 100644 --- a/src/fs/devfs/devfs.c +++ b/src/fs/devfs/devfs.c @@ -12,41 +12,41 @@ #include #ifdef CONFIG_NX_FS_DEVFS -#include +#include #include #define NX_LOG_NAME "devfs" #include #include -NX_PRIVATE NX_Error DevMount(NX_VfsMount * m, const char * dev) +NX_PRIVATE NX_Error DevMount(NX_MountDesc * m, const char * dev) { m->root->data = (void *)NX_NULL; m->data = NX_NULL; return NX_EOK; } -NX_PRIVATE NX_Error DevUnmount(NX_VfsMount * m) +NX_PRIVATE NX_Error DevUnmount(NX_MountDesc * m) { m->data = NX_NULL; return NX_EOK; } -NX_PRIVATE NX_Error DevMountSync(NX_VfsMount * m) +NX_PRIVATE NX_Error DevMountSync(NX_MountDesc * m) { return NX_EOK; } -NX_PRIVATE NX_Error DevVget(NX_VfsMount * m, NX_VfsNode * n) +NX_PRIVATE NX_Error DevGetNode(NX_MountDesc * m, NX_FileNode * n) { return NX_EOK; } -NX_PRIVATE NX_Error DevVput(NX_VfsMount * m, NX_VfsNode * n) +NX_PRIVATE NX_Error DevPutNode(NX_MountDesc * m, NX_FileNode * n) { return NX_EOK; } -NX_PRIVATE NX_U64 DevRead(NX_VfsNode * n, NX_I64 off, void * buf, NX_U64 len, NX_Error *outErr) +NX_PRIVATE NX_U64 DevRead(NX_FileNode * n, NX_I64 off, void * buf, NX_U64 len, NX_Error *outErr) { NX_Device *dev; NX_Size outLen; @@ -66,7 +66,7 @@ NX_PRIVATE NX_U64 DevRead(NX_VfsNode * n, NX_I64 off, void * buf, NX_U64 len, NX return outLen; } -NX_PRIVATE NX_U64 DevWrite(NX_VfsNode * n, NX_I64 off, void * buf, NX_U64 len, NX_Error *outErr) +NX_PRIVATE NX_U64 DevWrite(NX_FileNode * n, NX_I64 off, void * buf, NX_U64 len, NX_Error *outErr) { NX_Device *dev; NX_Size outLen; @@ -87,7 +87,7 @@ NX_PRIVATE NX_U64 DevWrite(NX_VfsNode * n, NX_I64 off, void * buf, NX_U64 len, N return outLen; } -NX_PRIVATE NX_Error DevIoctl(NX_VfsNode * n, NX_U32 cmd, void *arg) +NX_PRIVATE NX_Error DevIoctl(NX_FileNode * n, NX_U32 cmd, void *arg) { NX_Device *dev; @@ -96,17 +96,17 @@ NX_PRIVATE NX_Error DevIoctl(NX_VfsNode * n, NX_U32 cmd, void *arg) return NX_DeviceControl(dev, cmd, arg); } -NX_PRIVATE NX_Error DevTruncate(NX_VfsNode * n, NX_I64 off) +NX_PRIVATE NX_Error DevTruncate(NX_FileNode * n, NX_I64 off) { return NX_EPERM; /* can't truncate */ } -NX_PRIVATE NX_Error DevSync(NX_VfsNode * n) +NX_PRIVATE NX_Error DevSync(NX_FileNode * n) { return NX_EOK; } -NX_PRIVATE NX_Error DevReaddir(NX_VfsNode * dn, NX_I64 off, NX_VfsDirent * d) +NX_PRIVATE NX_Error DevReadDir(NX_FileNode * dn, NX_I64 off, NX_Dirent * d) { NX_Device *device; @@ -116,14 +116,7 @@ NX_PRIVATE NX_Error DevReaddir(NX_VfsNode * dn, NX_I64 off, NX_VfsDirent * d) return NX_ENORES; } - if (device->driver->type == NX_DEVICE_TYPE_BLOCK) - { - d->type = NX_VFS_DIR_TYPE_BLK; - } - else - { - d->type = NX_VFS_DIR_TYPE_CHR; - } + d->type = NX_DIR_TYPE_REG; NX_StrCopyN(d->name, device->name, sizeof(d->name)); d->name[sizeof(device->name) - 1] = '\0'; @@ -134,7 +127,7 @@ NX_PRIVATE NX_Error DevReaddir(NX_VfsNode * dn, NX_I64 off, NX_VfsDirent * d) return NX_EOK; } -NX_PRIVATE NX_Error DevLookup(NX_VfsNode * dn, const char * name, NX_VfsNode * n) +NX_PRIVATE NX_Error DevLookup(NX_FileNode * dn, const char * name, NX_FileNode * n) { NX_Device *dev; @@ -151,83 +144,81 @@ NX_PRIVATE NX_Error DevLookup(NX_VfsNode * dn, const char * name, NX_VfsNode * n n->size = 0; n->data = (void *)dev; - n->type = NX_VFS_NODE_TYPE_REG; - n->mode |= NX_VFS_S_IFREG; + n->type = NX_FILE_NODE_TYPE_REG; + n->mode |= NX_FILE_TYPE_REG; if(dev->driver->ops->read) { - n->mode |= (NX_VFS_S_IRUSR | NX_VFS_S_IRGRP | NX_VFS_S_IROTH); + n->mode |= (NX_FILE_MODE_READ); } if(dev->driver->ops->write) { - n->mode |= (NX_VFS_S_IWUSR | NX_VFS_S_IWGRP | NX_VFS_S_IWOTH); + n->mode |= (NX_FILE_MODE_WRITE); } return NX_EOK; } -NX_PRIVATE NX_Error DevCreate(NX_VfsNode * dn, const char * filename, NX_U32 mode) +NX_PRIVATE NX_Error DevCreate(NX_FileNode * dn, const char * filename, NX_U32 mode) { return NX_EPERM; } -NX_PRIVATE NX_Error DevRemove(NX_VfsNode * dn, NX_VfsNode * n, const char *name) +NX_PRIVATE NX_Error DevDelete(NX_FileNode * dn, NX_FileNode * n, const char *name) { return NX_EPERM; } -NX_PRIVATE NX_Error DevRename(NX_VfsNode * sn, const char * sname, NX_VfsNode * n, NX_VfsNode * dn, const char * dname) +NX_PRIVATE NX_Error DevRename(NX_FileNode * sn, const char * sname, NX_FileNode * n, NX_FileNode * dn, const char * dname) { return NX_EPERM; } -NX_PRIVATE NX_Error DevMkdir(NX_VfsNode * dn, const char * name, NX_U32 mode) +NX_PRIVATE NX_Error DevCreateDir(NX_FileNode * dn, const char * name, NX_U32 mode) { return NX_EPERM; } -NX_PRIVATE NX_Error DevRmdir(NX_VfsNode * dn, NX_VfsNode * n, const char *name) +NX_PRIVATE NX_Error DevDeleteDir(NX_FileNode * dn, NX_FileNode * n, const char *name) { return NX_EPERM; } -NX_PRIVATE NX_Error DevChmod(NX_VfsNode * n, NX_U32 mode) +NX_PRIVATE NX_Error DevSetMode(NX_FileNode * n, NX_U32 mode) { return NX_EPERM; } -NX_PRIVATE NX_VfsFileSystem devfs = { +NX_PRIVATE NX_FileSystem devfs = { .name = "devfs", - .mount = DevMount, .unmount = DevUnmount, - .msync = DevMountSync, - .vget = DevVget, - .vput = DevVput, - + .mountSync = DevMountSync, + .getNode = DevGetNode, + .putNode = DevPutNode, .read = DevRead, .write = DevWrite, .ioctl = DevIoctl, .truncate = DevTruncate, .sync = DevSync, - .readdir = DevReaddir, + .readDir = DevReadDir, .lookup = DevLookup, .create = DevCreate, - .remove = DevRemove, + .delete = DevDelete, .rename = DevRename, - .mkdir = DevMkdir, - .rmdir = DevRmdir, - .chmod = DevChmod, + .createDir = DevCreateDir, + .deleteDir = DevDeleteDir, + .setMode = DevSetMode, }; NX_PRIVATE void NX_FileSystemDevInit(void) { - NX_VfsRegisterFileSystem(&devfs); + NX_FileSystemRegister(&devfs); NX_LOG_I("register devfs done."); } NX_PRIVATE void NX_FileSystemDevExit(void) { - NX_VfsUnregisterFileSystem(&devfs); + NX_FileSystemUnregister(&devfs); } NX_FS_INIT(NX_FileSystemDevInit); diff --git a/src/fs/fat/fat-node.c b/src/fs/fat/fat-node.c index 9e8522aa3f0cfab56736877f7bb9a6f1eb78d8c2..f84d5d15b0a69dcccb66f0d002045c7a8340a8fe 100644 --- a/src/fs/fat/fat-node.c +++ b/src/fs/fat/fat-node.c @@ -496,11 +496,11 @@ static NX_U8 fatfs_node_lfn_checksum(const NX_U8 * name) return sum; } -int fatfs_node_read_dirent(struct fatfs_node_t * dnode, NX_I64 off, NX_VfsDirent * d) +int fatfs_node_read_dirent(struct fatfs_node_t * dnode, NX_I64 off, NX_Dirent * d) { NX_U32 i, rlen, len; NX_U8 lcsum = 0, dcsum = 0, check[11]; - char lname[NX_VFS_MAX_NAME]; + char lname[NX_FILE_MAX_NAME]; struct fat_dirent_t dent; struct fat_longname_t lfn; NX_U32 fileoff = (NX_U32) off; @@ -612,9 +612,9 @@ int fatfs_node_read_dirent(struct fatfs_node_t * dnode, NX_I64 off, NX_VfsDirent } if(dent.file_attributes & FAT_DIRENT_SUBDIR) - d->type = NX_VFS_DIR_TYPE_DIR; + d->type = NX_DIR_TYPE_DIR; else - d->type = NX_VFS_DIR_TYPE_REG; + d->type = NX_DIR_TYPE_REG; return 0; } @@ -624,7 +624,7 @@ int fatfs_node_find_dirent(struct fatfs_node_t * dnode, const char * name, struc NX_U8 lcsum = 0, dcsum = 0, check[11]; NX_U32 i, off, rlen, len, lfn_off, lfn_len; struct fat_longname_t lfn; - char lname[NX_VFS_MAX_NAME]; + char lname[NX_FILE_MAX_NAME]; lfn_off = 0; lfn_len = 0; @@ -721,7 +721,7 @@ int fatfs_node_find_dirent(struct fatfs_node_t * dnode, const char * name, struc lcsum = dcsum; } - if(!NX_StrCmpN(lname, name, NX_VFS_MAX_NAME) && (lcsum == dcsum)) + if(!NX_StrCmpN(lname, name, NX_FILE_MAX_NAME) && (lcsum == dcsum)) { *dent_off = lfn_off; *dent_len = sizeof(struct fat_dirent_t) + lfn_len; diff --git a/src/fs/fat/fat-node.h b/src/fs/fat/fat-node.h index 8d8078ee11e78cde0264d911e6c31b99fb8f5d87..1dca3f083d5e94682f6e9739abe1072514e42712 100644 --- a/src/fs/fat/fat-node.h +++ b/src/fs/fat/fat-node.h @@ -49,7 +49,7 @@ int fatfs_node_truncate(struct fatfs_node_t * node, NX_U32 pos); int fatfs_node_sync(struct fatfs_node_t * node); int fatfs_node_init(struct fatfs_control_t * ctrl, struct fatfs_node_t * node); int fatfs_node_exit(struct fatfs_node_t * node); -int fatfs_node_read_dirent(struct fatfs_node_t * dnode, NX_I64 off, NX_VfsDirent * d); +int fatfs_node_read_dirent(struct fatfs_node_t * dnode, NX_I64 off, NX_Dirent * d); int fatfs_node_find_dirent(struct fatfs_node_t * dnode, const char * name, struct fat_dirent_t * dent, NX_U32 * dent_off, NX_U32 * dent_len); int fatfs_node_add_dirent(struct fatfs_node_t * dnode, const char * name, struct fat_dirent_t * ndent); int fatfs_node_del_dirent(struct fatfs_node_t * dnode, const char * name, NX_U32 dent_off, NX_U32 dent_len); diff --git a/src/fs/fat/fat.c b/src/fs/fat/fat.c index a9c4b745ac51c4c3a2f1b4a3d54864b286d75fea..1805c423689f0fd44a32b781d446d0bbb006833c 100644 --- a/src/fs/fat/fat.c +++ b/src/fs/fat/fat.c @@ -48,7 +48,7 @@ #include #include -static NX_Error fatfs_mount(NX_VfsMount * m, const char * dev) +NX_PRIVATE NX_Error FatfsMount(NX_MountDesc * m, const char * dev) { struct fatfs_control_t * ctrl; struct fatfs_node_t * root; @@ -91,8 +91,8 @@ static NX_Error fatfs_mount(NX_VfsMount * m, const char * dev) root->parent_dent_dirty = NX_False; /* Handcraft the root vfs node */ - m->root->type = NX_VFS_NODE_TYPE_DIR; - m->root->mode = NX_VFS_S_IFDIR | NX_VFS_S_IRWXU | NX_VFS_S_IRWXG | NX_VFS_S_IRWXO; + m->root->type = NX_FILE_NODE_TYPE_DIR; + m->root->mode = NX_FILE_TYPE_DIR | NX_FILE_MODE_MASK; m->root->ctime = 0; m->root->atime = 0; m->root->mtime = 0; @@ -108,7 +108,7 @@ fail: return NX_ERROR; } -static NX_Error fatfs_unmount(NX_VfsMount * m) +NX_PRIVATE NX_Error FatfsUnmount(NX_MountDesc * m) { int rc; struct fatfs_control_t *ctrl = m->data; @@ -122,7 +122,7 @@ static NX_Error fatfs_unmount(NX_VfsMount * m) return rc ? NX_ERROR : NX_EOK; } -static NX_Error fatfs_msync(NX_VfsMount * m) +NX_PRIVATE NX_Error FatfsMountSync(NX_MountDesc * m) { struct fatfs_control_t * ctrl = m->data; @@ -135,7 +135,7 @@ static NX_Error fatfs_msync(NX_VfsMount * m) return NX_EOK; } -static NX_Error fatfs_vget(NX_VfsMount * m, NX_VfsNode * n) +NX_PRIVATE NX_Error FatfsGetNode(NX_MountDesc * m, NX_FileNode * n) { int rc; struct fatfs_node_t * node; @@ -153,7 +153,7 @@ static NX_Error fatfs_vget(NX_VfsMount * m, NX_VfsNode * n) return rc ? NX_ERROR : NX_EOK; } -static NX_Error fatfs_vput(NX_VfsMount * m, NX_VfsNode * n) +NX_PRIVATE NX_Error FatfsPutNode(NX_MountDesc * m, NX_FileNode * n) { int rc; struct fatfs_node_t * node = n->data; @@ -166,7 +166,7 @@ static NX_Error fatfs_vput(NX_VfsMount * m, NX_VfsNode * n) return rc ? NX_ERROR : NX_EOK; } -static NX_U64 fatfs_read(NX_VfsNode * n, NX_I64 off, void * buf, NX_U64 len, NX_Error *outErr) +NX_PRIVATE NX_U64 FatfsRead(NX_FileNode * n, NX_I64 off, void * buf, NX_U64 len, NX_Error *outErr) { struct fatfs_node_t * node = n->data; NX_U32 filesize = fatfs_node_get_size(node); @@ -184,7 +184,7 @@ static NX_U64 fatfs_read(NX_VfsNode * n, NX_I64 off, void * buf, NX_U64 len, NX_ return fatfs_node_read(node, (NX_U32) off, len, buf); } -static NX_U64 fatfs_write(NX_VfsNode * n, NX_I64 off, void * buf, NX_U64 len, NX_Error *outErr) +NX_PRIVATE NX_U64 FatfsWrite(NX_FileNode * n, NX_I64 off, void * buf, NX_U64 len, NX_Error *outErr) { NX_U32 wlen; struct fatfs_node_t *node = n->data; @@ -201,7 +201,7 @@ static NX_U64 fatfs_write(NX_VfsNode * n, NX_I64 off, void * buf, NX_U64 len, NX return wlen; } -static NX_Error fatfs_truncate(NX_VfsNode * n, NX_I64 off) +NX_PRIVATE NX_Error FatfsTruncate(NX_FileNode * n, NX_I64 off) { int rc; struct fatfs_node_t * node = n->data; @@ -225,7 +225,7 @@ static NX_Error fatfs_truncate(NX_VfsNode * n, NX_I64 off) return NX_EOK; } -static NX_Error fatfs_sync(NX_VfsNode * n) +NX_PRIVATE NX_Error FatfsSync(NX_FileNode * n) { struct fatfs_node_t *node = n->data; NX_U32 year, mon, day, hour, min, sec; @@ -237,15 +237,15 @@ static NX_Error fatfs_sync(NX_VfsNode * n) fileattr = 0; switch(n->type) { - case NX_VFS_NODE_TYPE_DIR: + case NX_FILE_NODE_TYPE_DIR: fileattr |= FAT_DIRENT_SUBDIR; break; - case NX_VFS_NODE_TYPE_REG: + case NX_FILE_NODE_TYPE_REG: default: break; } - if(!(n->mode & (NX_VFS_S_IWUSR | NX_VFS_S_IWGRP | NX_VFS_S_IWOTH))) + if(!(n->mode & (NX_FILE_MODE_WRITE))) fileattr |= FAT_DIRENT_READONLY; node->parent_dent.file_attributes = fileattr; @@ -288,14 +288,14 @@ static NX_Error fatfs_sync(NX_VfsNode * n) return fatfs_node_sync(node) ? NX_ERROR : NX_EOK; } -static NX_Error fatfs_readdir(NX_VfsNode * dn, NX_I64 off, NX_VfsDirent * d) +NX_PRIVATE NX_Error FatfsReadDir(NX_FileNode * dn, NX_I64 off, NX_Dirent * d) { struct fatfs_node_t * dnode = dn->data; return fatfs_node_read_dirent(dnode, off, d) ? NX_ERROR : NX_EOK; } -static NX_Error fatfs_lookup(NX_VfsNode * dn, const char * name, NX_VfsNode * n) +NX_PRIVATE NX_Error FatfsLookup(NX_FileNode * dn, const char * name, NX_FileNode * n) { int rc; NX_U32 off, len; @@ -330,19 +330,19 @@ static NX_Error fatfs_lookup(NX_VfsNode * dn, const char * name, NX_VfsNode * n) if(dent.file_attributes & FAT_DIRENT_SUBDIR) { - n->type = NX_VFS_NODE_TYPE_DIR; - n->mode |= NX_VFS_S_IFDIR; + n->type = NX_FILE_NODE_TYPE_DIR; + n->mode |= NX_FILE_TYPE_DIR; } else { - n->type = NX_VFS_NODE_TYPE_REG; - n->mode |= NX_VFS_S_IFREG; + n->type = NX_FILE_NODE_TYPE_REG; + n->mode |= NX_FILE_TYPE_REG; } - n->mode |= (NX_VFS_S_IRWXU | NX_VFS_S_IRWXG | NX_VFS_S_IRWXO); + n->mode |= (NX_FILE_MODE_MASK); if(dent.file_attributes & FAT_DIRENT_READONLY) { - n->mode &= ~(NX_VFS_S_IWUSR | NX_VFS_S_IWGRP | NX_VFS_S_IWOTH); + n->mode &= ~(NX_FILE_MODE_WRITE); } n->ctime = fatfs_pack_timestamp(dent.create_date_year, dent.create_date_month, dent.create_date_day, dent.create_time_hours, dent.create_time_minutes, @@ -356,7 +356,7 @@ static NX_Error fatfs_lookup(NX_VfsNode * dn, const char * name, NX_VfsNode * n) return NX_EOK; } -static NX_Error fatfs_create(NX_VfsNode * dn, const char * name, NX_U32 mode) +NX_PRIVATE NX_Error FatfsCreate(NX_FileNode * dn, const char * name, NX_U32 mode) { int rc; NX_U8 fileattr; @@ -377,7 +377,7 @@ static NX_Error fatfs_create(NX_VfsNode * dn, const char * name, NX_U32 mode) fatfs_current_timestamp(&year, &mon, &day, &hour, &min, &sec); fileattr = 0; - if(!(mode & (NX_VFS_S_IWUSR | NX_VFS_S_IWGRP | NX_VFS_S_IWOTH))) + if(!(mode & (NX_FILE_MODE_WRITE))) { fileattr |= FAT_DIRENT_READONLY; } @@ -411,7 +411,7 @@ static NX_Error fatfs_create(NX_VfsNode * dn, const char * name, NX_U32 mode) return NX_EOK; } -static NX_Error fatfs_remove(NX_VfsNode * dn, NX_VfsNode * n, const char *name) +NX_PRIVATE NX_Error FatfsDelete(NX_FileNode * dn, NX_FileNode * n, const char *name) { int rc; NX_U32 off, len, clust; @@ -444,7 +444,7 @@ static NX_Error fatfs_remove(NX_VfsNode * dn, NX_VfsNode * n, const char *name) return NX_EOK; } -static NX_Error fatfs_rename(NX_VfsNode * sv, const char *sname, NX_VfsNode * n, NX_VfsNode * dn, const char *dname) +NX_PRIVATE NX_Error FatfsRename(NX_FileNode * sv, const char *sname, NX_FileNode * n, NX_FileNode * dn, const char *dname) { int rc; NX_U32 off, len; @@ -476,7 +476,7 @@ static NX_Error fatfs_rename(NX_VfsNode * sv, const char *sname, NX_VfsNode * n, return NX_EOK; } -static NX_Error fatfs_mkdir(NX_VfsNode * dn, const char *name, NX_U32 mode) +NX_PRIVATE NX_Error FatfsCreateDir(NX_FileNode * dn, const char *name, NX_U32 mode) { int rc; NX_U8 fileattr; @@ -497,7 +497,7 @@ static NX_Error fatfs_mkdir(NX_VfsNode * dn, const char *name, NX_U32 mode) fatfs_current_timestamp(&year, &mon, &day, &hour, &min, &sec); fileattr = FAT_DIRENT_SUBDIR; - if(!(mode & (NX_VFS_S_IWUSR | NX_VFS_S_IWGRP | NX_VFS_S_IWOTH))) + if(!(mode & (NX_FILE_MODE_WRITE))) { fileattr |= FAT_DIRENT_READONLY; } @@ -531,7 +531,7 @@ static NX_Error fatfs_mkdir(NX_VfsNode * dn, const char *name, NX_U32 mode) return NX_EOK; } -static NX_Error fatfs_rmdir(NX_VfsNode * dn, NX_VfsNode * n, const char * name) +NX_PRIVATE NX_Error FatfsDeleteDir(NX_FileNode * dn, NX_FileNode * n, const char * name) { int rc; NX_U32 off, len, clust; @@ -568,12 +568,12 @@ static NX_Error fatfs_rmdir(NX_VfsNode * dn, NX_VfsNode * n, const char * name) return NX_EOK; } -static NX_Error fatfs_chmod(NX_VfsNode * n, NX_U32 mode) +NX_PRIVATE NX_Error FatfsSetMode(NX_FileNode * n, NX_U32 mode) { struct fatfs_node_t *node = n->data; NX_U32 year, month, day, hour, min, second; - n->mode &= ~(NX_VFS_S_IRWXU | NX_VFS_S_IRWXG | NX_VFS_S_IRWXO); + n->mode &= ~(NX_FILE_MODE_MASK); n->mode |= mode; fatfs_current_timestamp(&year, &month, &day, &hour, &min, &second); @@ -584,37 +584,35 @@ static NX_Error fatfs_chmod(NX_VfsNode * n, NX_U32 mode) return NX_EOK; } -static NX_VfsFileSystem fat = { +NX_PRIVATE NX_FileSystem fat = { .name = "fat", - - .mount = fatfs_mount, - .unmount = fatfs_unmount, - .msync = fatfs_msync, - .vget = fatfs_vget, - .vput = fatfs_vput, - - .read = fatfs_read, - .write = fatfs_write, - .truncate = fatfs_truncate, - .sync = fatfs_sync, - .readdir = fatfs_readdir, - .lookup = fatfs_lookup, - .create = fatfs_create, - .remove = fatfs_remove, - .rename = fatfs_rename, - .mkdir = fatfs_mkdir, - .rmdir = fatfs_rmdir, - .chmod = fatfs_chmod, + .mount = FatfsMount, + .unmount = FatfsUnmount, + .mountSync = FatfsMountSync, + .getNode = FatfsGetNode, + .putNode = FatfsPutNode, + .read = FatfsRead, + .write = FatfsWrite, + .truncate = FatfsTruncate, + .sync = FatfsSync, + .readDir = FatfsReadDir, + .lookup = FatfsLookup, + .create = FatfsCreate, + .delete = FatfsDelete, + .rename = FatfsRename, + .createDir = FatfsCreateDir, + .deleteDir = FatfsDeleteDir, + .setMode = FatfsSetMode, }; NX_PRIVATE void NX_FileSystemFatInit(void) { - NX_VfsRegisterFileSystem(&fat); + NX_FileSystemRegister(&fat); } NX_PRIVATE void NX_FileSystemFatExit(void) { - NX_VfsUnregisterFileSystem(&fat); + NX_FileSystemUnregister(&fat); } NX_FS_INIT(NX_FileSystemFatInit); diff --git a/src/fs/fat/fat.h b/src/fs/fat/fat.h index af180d28b88a12964bc2233b8f2f998ada03bec5..7698ebbf086c23a08a38511fbfb58f495c887c9a 100644 --- a/src/fs/fat/fat.h +++ b/src/fs/fat/fat.h @@ -41,7 +41,7 @@ #define __FS_FAT_H__ #include -#include +#include #include #include @@ -212,7 +212,7 @@ struct fat_dirent_t { #define FAT_LONGNAME_SEQNO(s) ((s) & ~0x40) #define FAT_LONGNAME_LASTSEQ(s) ((s) & 0x40) #define FAT_LONGNAME_MINSEQ (1) -#define FAT_LONGNAME_MAXSEQ (NX_VFS_MAX_NAME / 13) +#define FAT_LONGNAME_MAXSEQ (NX_FILE_MAX_NAME / 13) /* * Directory long filename information for FAT12 / FAT16 / FAT32 diff --git a/src/fs/vfs.c b/src/fs/fs.c similarity index 62% rename from src/fs/vfs.c rename to src/fs/fs.c index da0cec0182f7134441708358e97e409887147fd4..77edf2211fd7d93508dc36579289dc13e07df4e0 100644 --- a/src/fs/vfs.c +++ b/src/fs/fs.c @@ -7,7 +7,7 @@ * Mobile phone: +86-18665388956 * QQ: 8192542 * - * Contains: virtual file system form xboot. + * Contains: nxos file system. * * Change Logs: * Date Author Notes @@ -15,7 +15,7 @@ */ #include -#include +#include #include #include #include @@ -25,7 +25,7 @@ #include #include -#define VFS_GET_FILE_TABLE() NX_ThreadGetFileTable(NX_ThreadSelf()) +#define GET_FILE_TABLE() NX_ThreadGetFileTable(NX_ThreadSelf()) NX_PRIVATE NX_LIST_HEAD(fileSystemListHead); @@ -33,13 +33,13 @@ NX_PRIVATE NX_SPIN_DEFINE_UNLOCKED(fileSystemLock); NX_PRIVATE NX_List fileSystemMountList; NX_PRIVATE NX_Mutex fileSystemMountLock; -NX_PRIVATE NX_List fileSystemNodeList[NX_VFS_NODE_HASH_SIZE]; -NX_PRIVATE NX_Mutex fileSystemNodeLock[NX_VFS_NODE_HASH_SIZE]; +NX_PRIVATE NX_List fileSystemNodeList[NX_FILE_NODE_HASH_SIZE]; +NX_PRIVATE NX_Mutex fileSystemNodeLock[NX_FILE_NODE_HASH_SIZE]; /* default file table for kernel thread */ -NX_PRIVATE NX_VfsFileTable defaultFileTable; +NX_PRIVATE NX_FileTable defaultFileTable; -NX_Error NX_VfsRegisterFileSystem(NX_VfsFileSystem * fs) +NX_Error NX_FileSystemRegister(NX_FileSystem * fs) { NX_UArch level; if(!fs || !fs->name) @@ -53,7 +53,7 @@ NX_Error NX_VfsRegisterFileSystem(NX_VfsFileSystem * fs) return NX_EOK; } -NX_Error NX_VfsUnregisterFileSystem(NX_VfsFileSystem * fs) +NX_Error NX_FileSystemUnregister(NX_FileSystem * fs) { NX_UArch level; @@ -69,9 +69,9 @@ NX_Error NX_VfsUnregisterFileSystem(NX_VfsFileSystem * fs) return NX_EOK; } -NX_VfsFileSystem * NX_VfsSearchFileSystem(const char * name) +NX_FileSystem * NX_FileSystemSearch(const char * name) { - NX_VfsFileSystem * pos, * n; + NX_FileSystem * pos, * n; if(!name) { @@ -88,7 +88,7 @@ NX_VfsFileSystem * NX_VfsSearchFileSystem(const char * name) return NX_NULL; } -NX_VfsFileTable *NX_VfsGetDefaultFileTable(void) +NX_FileTable *NX_FileTableGetDefault(void) { return &defaultFileTable; } @@ -126,9 +126,9 @@ NX_PRIVATE int CountMatch(const char * path, char * mount_root) return 0; } -NX_PRIVATE NX_Error VfsFindRoot(const char * path, NX_VfsMount ** mp, char ** root) +NX_PRIVATE NX_Error FindRoot(const char * path, NX_MountDesc ** mp, char ** root) { - NX_VfsMount * pos, * m = NX_NULL; + NX_MountDesc * pos, * m = NX_NULL; int len, max_len = 0; if(!path || !mp || !root) @@ -163,10 +163,10 @@ NX_PRIVATE NX_Error VfsFindRoot(const char * path, NX_VfsMount ** mp, char ** ro return NX_EOK; } -void NX_VfsFileTableInit(NX_VfsFileTable *ft) +void NX_FileTableInit(NX_FileTable *ft) { int i; - for(i = 0; i < NX_VFS_MAX_FD; i++) + for(i = 0; i < NX_FILE_MAX_FD; i++) { NX_MutexInit(&ft->file[i].lock); ft->file[i].node = NX_NULL; @@ -176,12 +176,12 @@ void NX_VfsFileTableInit(NX_VfsFileTable *ft) NX_MutexInit(&ft->file_lock); } -NX_PRIVATE int VfsFileAlloc(NX_VfsFileTable *ft) +NX_PRIVATE int FileAlloc(NX_FileTable *ft) { int i, fd = -1; NX_MutexLock(&ft->file_lock); - for(i = 3; i < NX_VFS_MAX_FD; i++) + for(i = 3; i < NX_FILE_MAX_FD; i++) { if(ft->file[i].node == NX_NULL) { @@ -194,9 +194,9 @@ NX_PRIVATE int VfsFileAlloc(NX_VfsFileTable *ft) return fd; } -NX_PRIVATE void VfsFileFree(NX_VfsFileTable *ft, int fd) +NX_PRIVATE void FileFree(NX_FileTable *ft, int fd) { - if((fd >= 3) && (fd < NX_VFS_MAX_FD)) + if((fd >= 3) && (fd < NX_FILE_MAX_FD)) { NX_MutexLock(&ft->file_lock); if(ft->file[fd].node) @@ -211,17 +211,16 @@ NX_PRIVATE void VfsFileFree(NX_VfsFileTable *ft, int fd) } } - -NX_PRIVATE NX_VfsFile * VfsFileDescriptorToFile(NX_VfsFileTable *ft, int fd) +NX_PRIVATE NX_FileDesc * FileDescriptorToFile(NX_FileTable *ft, int fd) { if (!ft) { return NX_NULL; } - return ((fd >= 0) && (fd < NX_VFS_MAX_FD)) ? &ft->file[fd] : NX_NULL; + return ((fd >= 0) && (fd < NX_FILE_MAX_FD)) ? &ft->file[fd] : NX_NULL; } -NX_PRIVATE NX_U32 VfsNodeHash(NX_VfsMount * m, const char * path) +NX_PRIVATE NX_U32 NodeHash(NX_MountDesc * m, const char * path) { NX_U32 val = 0; @@ -232,16 +231,16 @@ NX_PRIVATE NX_U32 VfsNodeHash(NX_VfsMount * m, const char * path) val = ((val << 5) + val) + *path++; } } - return (val ^ (NX_U32)((NX_UArch)m)) & (NX_VFS_NODE_HASH_SIZE - 1); + return (val ^ (NX_U32)((NX_UArch)m)) & (NX_FILE_NODE_HASH_SIZE - 1); } -NX_PRIVATE NX_VfsNode * VfsNodeGet(NX_VfsMount * m, const char * path) +NX_PRIVATE NX_FileNode * NodeGet(NX_MountDesc * m, const char * path) { - NX_VfsNode * n; - NX_U32 hash = VfsNodeHash(m, path); + NX_FileNode * n; + NX_U32 hash = NodeHash(m, path); int err; - if(!(n = NX_MemAlloc(sizeof(NX_VfsNode)))) + if(!(n = NX_MemAlloc(sizeof(NX_FileNode)))) { return NX_NULL; } @@ -257,7 +256,7 @@ NX_PRIVATE NX_VfsNode * VfsNodeGet(NX_VfsMount * m, const char * path) } NX_MutexLock(&m->lock); - err = m->fs->vget(m, n); + err = m->fs->getNode(m, n); NX_MutexUnlock(&m->lock); if(err != NX_EOK) { @@ -273,16 +272,16 @@ NX_PRIVATE NX_VfsNode * VfsNodeGet(NX_VfsMount * m, const char * path) return n; } -NX_PRIVATE NX_VfsNode * VfsNodeLookup(NX_VfsMount * m, const char * path) +NX_PRIVATE NX_FileNode * NodeLookup(NX_MountDesc * m, const char * path) { - NX_VfsNode * n; - NX_U32 hash = VfsNodeHash(m, path); + NX_FileNode * n; + NX_U32 hash = NodeHash(m, path); int found = 0; NX_MutexLock(&fileSystemNodeLock[hash]); NX_ListForEachEntry(n, &fileSystemNodeList[hash], link) { - if((n->mount == m) && (!NX_StrCmpN(n->path, path, NX_VFS_MAX_PATH))) + if((n->mount == m) && (!NX_StrCmpN(n->path, path, NX_FILE_MAX_PATH))) { found = 1; break; @@ -299,12 +298,12 @@ NX_PRIVATE NX_VfsNode * VfsNodeLookup(NX_VfsMount * m, const char * path) return n; } -NX_PRIVATE void VfsNodeIncreaseRef(NX_VfsNode * n) +NX_PRIVATE void NodeIncreaseRef(NX_FileNode * n) { NX_AtomicAdd(&n->refcnt, 1); } -NX_PRIVATE void VfsNodePut(NX_VfsNode * n) +NX_PRIVATE void NodePut(NX_FileNode * n) { NX_U32 hash; @@ -315,29 +314,28 @@ NX_PRIVATE void VfsNodePut(NX_VfsNode * n) return; } - hash = VfsNodeHash(n->mount, n->path); + hash = NodeHash(n->mount, n->path); NX_MutexLock(&fileSystemNodeLock[hash]); NX_ListDel(&n->link); NX_MutexUnlock(&fileSystemNodeLock[hash]); NX_MutexLock(&n->mount->lock); - n->mount->fs->vput(n->mount, n); + n->mount->fs->putNode(n->mount, n); NX_MutexUnlock(&n->mount->lock); NX_AtomicSub(&n->mount->refcnt, 1); NX_MemFree(n); } -NX_PRIVATE NX_Error VfsNodeStat(NX_VfsNode * n, NX_VfsStatInfo * st) +NX_PRIVATE NX_Error NodeStat(NX_FileNode * n, NX_FileStatInfo * st) { NX_U32 mode; - NX_MemZero(st, sizeof(NX_VfsStatInfo)); + NX_MemZero(st, sizeof(NX_FileStatInfo)); - st->ino = (NX_U64)((NX_UArch)n); NX_MutexLock(&n->lock); st->size = n->size; - mode = n->mode & (NX_VFS_S_IRWXU | NX_VFS_S_IRWXG | NX_VFS_S_IRWXO); + mode = n->mode & (NX_FILE_MODE_MASK); st->ctime = n->ctime; st->atime = n->atime; st->mtime = n->mtime; @@ -345,41 +343,21 @@ NX_PRIVATE NX_Error VfsNodeStat(NX_VfsNode * n, NX_VfsStatInfo * st) switch(n->type) { - case NX_VFS_NODE_TYPE_REG: - mode |= NX_VFS_S_IFREG; - break; - case NX_VFS_NODE_TYPE_DIR: - mode |= NX_VFS_S_IFDIR; - break; - case NX_VFS_NODE_TYPE_BLK: - mode |= NX_VFS_S_IFBLK; - break; - case NX_VFS_NODE_TYPE_CHR: - mode |= NX_VFS_S_IFCHR; + case NX_FILE_NODE_TYPE_REG: + mode |= NX_FILE_TYPE_REG; break; - case NX_VFS_NODE_TYPE_LNK: - mode |= NX_VFS_S_IFLNK; - break; - case NX_VFS_NODE_TYPE_SOCK: - mode |= NX_VFS_S_IFSOCK; - break; - case NX_VFS_NODE_TYPE_FIFO: - mode |= NX_VFS_S_IFIFO; + case NX_FILE_NODE_TYPE_DIR: + mode |= NX_FILE_TYPE_DIR; break; default: return NX_ENORES; }; st->mode = mode; - if(n->type == NX_VFS_NODE_TYPE_CHR || n->type == NX_VFS_NODE_TYPE_BLK) - st->dev = (NX_U64)((NX_UArch)n->data); - st->uid = 0; - st->gid = 0; - return NX_EOK; } -NX_PRIVATE int VfsNodeAccess(NX_VfsNode * n, NX_U32 mode) +NX_PRIVATE int NodeAccess(NX_FileNode * n, NX_U32 mode) { NX_U32 m; @@ -387,25 +365,25 @@ NX_PRIVATE int VfsNodeAccess(NX_VfsNode * n, NX_U32 mode) m = n->mode; NX_MutexUnlock(&n->lock); - if((mode & NX_VFS_R_OK) && !(m & (NX_VFS_S_IRUSR | NX_VFS_S_IRGRP | NX_VFS_S_IROTH))) + if((mode & NX_FILE_READ_OK) && !(m & (NX_FILE_MODE_READ))) { return -1; } - if(mode & NX_VFS_W_OK) + if(mode & NX_FILE_WRITE_OK) { - if(n->mount->flags & NX_VFS_MOUNT_RO) + if(n->mount->flags & NX_MOUNT_RO) { return -1; } - if(!(m & (NX_VFS_S_IWUSR | NX_VFS_S_IWGRP | NX_VFS_S_IWOTH))) + if(!(m & (NX_FILE_MODE_WRITE))) { return -1; } } - if((mode & NX_VFS_X_OK) && !(m & (NX_VFS_S_IXUSR | NX_VFS_S_IXGRP | NX_VFS_S_IXOTH))) + if((mode & NX_FILE_EXEC_OK) && !(m & (NX_FILE_MODE_EXEC))) { return -1; } @@ -413,10 +391,10 @@ NX_PRIVATE int VfsNodeAccess(NX_VfsNode * n, NX_U32 mode) return 0; } -NX_PRIVATE void VfsNodeRelease(NX_VfsNode * n) +NX_PRIVATE void NodeRelease(NX_FileNode * n) { - NX_VfsMount * m; - char path[NX_VFS_MAX_PATH]; + NX_MountDesc * m; + char path[NX_FILE_MAX_PATH]; char * p; if(!n) @@ -428,7 +406,7 @@ NX_PRIVATE void VfsNodeRelease(NX_VfsNode * n) if(m->root == n) { - VfsNodePut(n); + NodePut(n); return; } @@ -437,7 +415,7 @@ NX_PRIVATE void VfsNodeRelease(NX_VfsNode * n) return; } - VfsNodePut(n); + NodePut(n); while(1) { @@ -453,28 +431,28 @@ NX_PRIVATE void VfsNodeRelease(NX_VfsNode * n) break; } - n = VfsNodeLookup(m, path); + n = NodeLookup(m, path); if(!n) { continue; } - VfsNodePut(n); - VfsNodePut(n); + NodePut(n); + NodePut(n); } - VfsNodePut(m->root); + NodePut(m->root); } -NX_PRIVATE int VfsNodeAcquire(const char * path, NX_VfsNode ** np) +NX_PRIVATE int NodeAcquire(const char * path, NX_FileNode ** np) { - NX_VfsMount * m; - NX_VfsNode * dn, * n; - char node[NX_VFS_MAX_PATH]; + NX_MountDesc * m; + NX_FileNode * dn, * n; + char node[NX_FILE_MAX_PATH]; char * p; NX_Error err; int i, j; - if(VfsFindRoot(path, &m, &p) != NX_EOK) + if(FindRoot(path, &m, &p) != NX_EOK) { return -1; } @@ -485,7 +463,7 @@ NX_PRIVATE int VfsNodeAcquire(const char * path, NX_VfsNode ** np) } dn = n = m->root; - VfsNodeIncreaseRef(dn); + NodeIncreaseRef(dn); i = 0; while(*p != '\0') @@ -511,13 +489,13 @@ NX_PRIVATE int VfsNodeAcquire(const char * path, NX_VfsNode ** np) } node[i] = '\0'; - n = VfsNodeLookup(m, node); + n = NodeLookup(m, node); if(n == NX_NULL) { - n = VfsNodeGet(m, node); + n = NodeGet(m, node); if(n == NX_NULL) { - VfsNodePut(dn); + NodePut(dn); return -1; } @@ -526,9 +504,9 @@ NX_PRIVATE int VfsNodeAcquire(const char * path, NX_VfsNode ** np) err = dn->mount->fs->lookup(dn, &node[j], n); NX_MutexUnlock(&dn->lock); NX_MutexUnlock(&n->lock); - if(err != NX_EOK || (*p == '/' && n->type != NX_VFS_NODE_TYPE_DIR)) + if(err != NX_EOK || (*p == '/' && n->type != NX_FILE_NODE_TYPE_DIR)) { - VfsNodeRelease(n); + NodeRelease(n); return -1; } } @@ -540,12 +518,12 @@ NX_PRIVATE int VfsNodeAcquire(const char * path, NX_VfsNode ** np) } /* build path(relative or absolte) to absolte path */ -NX_Error NX_VfsBuildAbsPath(const char * path, char * absPath) +NX_Error NX_PathBuildAbs(const char * path, char * absPath) { char * p, * q, * s; int leftLen, fullLen; - char left[NX_VFS_MAX_PATH]; - char nextToken[NX_VFS_MAX_PATH]; + char left[NX_FILE_MAX_PATH]; + char nextToken[NX_FILE_MAX_PATH]; if(path[0] == '/') { @@ -567,12 +545,12 @@ NX_Error NX_VfsBuildAbsPath(const char * path, char * absPath) NX_LOG_E("kernel thread no cwd! must use absolute path on %s .", path); return NX_ENORES; } - NX_StrCopyN(absPath, cwd, NX_VFS_MAX_PATH); + NX_StrCopyN(absPath, cwd, NX_FILE_MAX_PATH); fullLen = NX_StrLen(absPath); leftLen = NX_StrCopyN(left, path, sizeof(left)); } - if((leftLen >= sizeof(left)) || (fullLen >= NX_VFS_MAX_PATH)) + if((leftLen >= sizeof(left)) || (fullLen >= NX_FILE_MAX_PATH)) { return NX_EINVAL; } @@ -596,7 +574,7 @@ NX_Error NX_VfsBuildAbsPath(const char * path, char * absPath) if(absPath[fullLen - 1] != '/') { - if (fullLen + 1 >= NX_VFS_MAX_PATH) + if (fullLen + 1 >= NX_FILE_MAX_PATH) { return NX_EINVAL; } @@ -620,8 +598,8 @@ NX_Error NX_VfsBuildAbsPath(const char * path, char * absPath) continue; } - fullLen = NX_StrCatN(absPath, nextToken, NX_VFS_MAX_PATH); - if(fullLen >= NX_VFS_MAX_PATH) + fullLen = NX_StrCatN(absPath, nextToken, NX_FILE_MAX_PATH); + if(fullLen >= NX_FILE_MAX_PATH) { return NX_EINVAL; } @@ -634,26 +612,26 @@ NX_Error NX_VfsBuildAbsPath(const char * path, char * absPath) return NX_EOK; } -NX_Error NX_VfsMountFileSystem(const char * dev, const char * path, const char * fsname, NX_U32 flags) +NX_Error NX_FileSystemMount(const char * dev, const char * path, const char * fsname, NX_U32 flags) { NX_Device * bdev; - NX_VfsFileSystem * fs; - NX_VfsMount * m, * tm; - NX_VfsNode * n, * n_covered; + NX_FileSystem * fs; + NX_MountDesc * m, * tm; + NX_FileNode * n, * n_covered; NX_Error err; - char absPath[NX_VFS_MAX_PATH + 1] = {0}; + char absPath[NX_FILE_MAX_PATH + 1] = {0}; if(!path || *path == '\0') { return NX_EINVAL; } - if ((err = NX_VfsBuildAbsPath(path, absPath)) != NX_EOK) + if ((err = NX_PathBuildAbs(path, absPath)) != NX_EOK) { return err; } - if(!(fs = NX_VfsSearchFileSystem(fsname))) + if(!(fs = NX_FileSystemSearch(fsname))) { return NX_ENOSRCH; } @@ -670,7 +648,7 @@ NX_Error NX_VfsMountFileSystem(const char * dev, const char * path, const char * bdev = NX_NULL; } - if(!(m = NX_MemAlloc(sizeof(NX_VfsMount)))) + if(!(m = NX_MemAlloc(sizeof(NX_MountDesc)))) { return NX_ENOMEM; } @@ -678,7 +656,7 @@ NX_Error NX_VfsMountFileSystem(const char * dev, const char * path, const char * NX_ListInit(&m->link); NX_MutexInit(&m->lock); m->fs = fs; - m->flags = flags & NX_VFS_MOUNT_MASK; + m->flags = flags & NX_MOUNT_MASK; NX_AtomicSet(&m->refcnt, 0); if(NX_StrCopyN(m->path, absPath, sizeof(m->path)) >= sizeof(m->path)) { @@ -693,32 +671,32 @@ NX_Error NX_VfsMountFileSystem(const char * dev, const char * path, const char * } else { - if(VfsNodeAcquire(absPath, &n_covered) != 0) + if(NodeAcquire(absPath, &n_covered) != 0) { NX_MemFree(m); return NX_ENORES; } - if(n_covered->type != NX_VFS_NODE_TYPE_DIR) + if(n_covered->type != NX_FILE_NODE_TYPE_DIR) { - VfsNodeRelease(n_covered); + NodeRelease(n_covered); NX_MemFree(m); return NX_EFAULT; } } m->covered = n_covered; - if(!(n = VfsNodeGet(m, "/"))) + if(!(n = NodeGet(m, "/"))) { if(m->covered) { - VfsNodeRelease(m->covered); + NodeRelease(m->covered); } NX_MemFree(m); return NX_EFAULT; } - n->type = NX_VFS_NODE_TYPE_DIR; - n->flags = NX_VFS_NODE_FLAG_ROOT; - n->mode = NX_VFS_S_IFDIR | NX_VFS_S_IRWXU | NX_VFS_S_IRWXG | NX_VFS_S_IRWXO; + n->type = NX_FILE_NODE_TYPE_DIR; + n->flags = NX_FILE_NODE_FLAG_ROOT; + n->mode = NX_FILE_TYPE_DIR | NX_FILE_MODE_MASK; m->root = n; NX_MutexLock(&m->lock); @@ -726,18 +704,18 @@ NX_Error NX_VfsMountFileSystem(const char * dev, const char * path, const char * NX_MutexUnlock(&m->lock); if(err != NX_EOK) { - VfsNodeRelease(m->root); + NodeRelease(m->root); if(m->covered) { - VfsNodeRelease(m->covered); + NodeRelease(m->covered); } NX_MemFree(m); return err; } - if(m->flags & NX_VFS_MOUNT_RO) + if(m->flags & NX_MOUNT_RO) { - m->root->mode &= ~(NX_VFS_S_IWUSR | NX_VFS_S_IWGRP | NX_VFS_S_IWOTH); + m->root->mode &= ~(NX_FILE_MODE_WRITE); } NX_MutexLock(&fileSystemMountLock); @@ -749,10 +727,10 @@ NX_Error NX_VfsMountFileSystem(const char * dev, const char * path, const char * NX_MutexLock(&m->lock); m->fs->unmount(m); NX_MutexUnlock(&m->lock); - VfsNodeRelease(m->root); + NodeRelease(m->root); if(m->covered) { - VfsNodeRelease(m->covered); + NodeRelease(m->covered); } NX_MemFree(m); return NX_EAGAIN; @@ -764,14 +742,14 @@ NX_Error NX_VfsMountFileSystem(const char * dev, const char * path, const char * return NX_EOK; } -NX_Error NX_VfsUnmountFileSystem(const char * path) +NX_Error NX_FileSystemUnmount(const char * path) { - NX_VfsMount * m; + NX_MountDesc * m; int found; NX_Error err; - char absPath[NX_VFS_MAX_PATH + 1] = {0}; + char absPath[NX_FILE_MAX_PATH + 1] = {0}; - if ((err = NX_VfsBuildAbsPath(path, absPath)) != NX_EOK) + if ((err = NX_PathBuildAbs(path, absPath)) != NX_EOK) { return err; } @@ -800,14 +778,14 @@ NX_Error NX_VfsUnmountFileSystem(const char * path) NX_MutexUnlock(&fileSystemMountLock); NX_MutexLock(&m->lock); - err = m->fs->msync(m); + err = m->fs->mountSync(m); m->fs->unmount(m); NX_MutexUnlock(&m->lock); - VfsNodeRelease(m->root); + NodeRelease(m->root); if(m->covered) { - VfsNodeRelease(m->covered); + NodeRelease(m->covered); } if(m->dev) @@ -821,15 +799,15 @@ NX_Error NX_VfsUnmountFileSystem(const char * path) return err; } -NX_Error NX_VfsSync(void) +NX_Error NX_FileSystemSync(void) { - NX_VfsMount * m; + NX_MountDesc * m; NX_Error err; NX_MutexLock(&fileSystemMountLock); NX_ListForEachEntry(m, &fileSystemMountList, link) { NX_MutexLock(&m->lock); - err = m->fs->msync(m); + err = m->fs->mountSync(m); if (err != NX_EOK) { NX_LOG_W("mount point path %s sync error! with %d", m->path, err); @@ -841,9 +819,9 @@ NX_Error NX_VfsSync(void) return NX_EOK; } -NX_VfsMount * NX_VfsGetMount(int index) +NX_MountDesc * NX_MountGetByIndex(int index) { - NX_VfsMount * m = NX_NULL; + NX_MountDesc * m = NX_NULL; int found = 0; if(index < 0) @@ -868,9 +846,9 @@ NX_VfsMount * NX_VfsGetMount(int index) return m; } -int NX_VfsGetMountCount(void) +int NX_MountGetCount(void) { - NX_VfsMount * m; + NX_MountDesc * m; int ret = 0; NX_MutexLock(&fileSystemMountLock); @@ -883,10 +861,10 @@ int NX_VfsGetMountCount(void) return ret; } -NX_PRIVATE int VfsLookupDir(const char * path, NX_VfsNode ** np, char ** name) +NX_PRIVATE int LookupDir(const char * path, NX_FileNode ** np, char ** name) { - NX_VfsNode * n; - char buf[NX_VFS_MAX_PATH]; + NX_FileNode * n; + char buf[NX_FILE_MAX_PATH]; char * file, * dir; int err; @@ -916,13 +894,13 @@ NX_PRIVATE int VfsLookupDir(const char * path, NX_VfsNode ** np, char ** name) dir = buf; } - if((err = VfsNodeAcquire(dir, &n))) + if((err = NodeAcquire(dir, &n))) { return err; } - if(n->type != NX_VFS_NODE_TYPE_DIR) + if(n->type != NX_FILE_NODE_TYPE_DIR) { - VfsNodeRelease(n); + NodeRelease(n); return -1; } *np = n; @@ -937,53 +915,53 @@ NX_PRIVATE int VfsLookupDir(const char * path, NX_VfsNode ** np, char ** name) return 0; } -int NX_VfsOpen(const char * path, NX_U32 flags, NX_U32 mode, NX_Error *outErr) +int NX_FileOpen(const char * path, NX_U32 flags, NX_U32 mode, NX_Error *outErr) { - NX_VfsNode * n, * dn; - NX_VfsFile * f; + NX_FileNode * n, * dn; + NX_FileDesc * f; char * filename; int err, fd; - NX_VfsFileTable *ft; - char absPath[NX_VFS_MAX_PATH + 1] = {0}; + NX_FileTable *ft; + char absPath[NX_FILE_MAX_PATH + 1] = {0}; - if(!path || !(flags & NX_VFS_O_ACCMODE)) + if(!path || !(flags & NX_FILE_ACCMODE)) { NX_ErrorSet(outErr, NX_EINVAL); return -1; } /* check has file table */ - ft = VFS_GET_FILE_TABLE(); + ft = GET_FILE_TABLE(); if (!ft) { NX_ErrorSet(outErr, NX_ENORES); return -1; } - if (NX_VfsBuildAbsPath(path, absPath) != NX_EOK) + if (NX_PathBuildAbs(path, absPath) != NX_EOK) { NX_ErrorSet(outErr, NX_ENOSRCH); return -1; } - if(flags & NX_VFS_O_CREAT) + if(flags & NX_FILE_CREAT) { - err = VfsNodeAcquire(absPath, &n); + err = NodeAcquire(absPath, &n); if(err) { - if((err = VfsLookupDir(absPath, &dn, &filename))) + if((err = LookupDir(absPath, &dn, &filename))) { NX_ErrorSet(outErr, NX_ENOSRCH); return err; } - if((err = VfsNodeAccess(dn, NX_VFS_W_OK))) + if((err = NodeAccess(dn, NX_FILE_WRITE_OK))) { NX_ErrorSet(outErr, NX_EPERM); - VfsNodeRelease(dn); + NodeRelease(dn); return err; } - mode &= ~NX_VFS_S_IFMT; - mode |= NX_VFS_S_IFREG; + mode &= ~NX_FILE_TYPE_MASK; + mode |= NX_FILE_TYPE_REG; NX_MutexLock(&dn->lock); err = dn->mount->fs->create(dn, filename, mode); if(err == NX_EOK) @@ -991,60 +969,60 @@ int NX_VfsOpen(const char * path, NX_U32 flags, NX_U32 mode, NX_Error *outErr) err = dn->mount->fs->sync(dn); } NX_MutexUnlock(&dn->lock); - VfsNodeRelease(dn); + NodeRelease(dn); if(err != NX_EOK) { NX_ErrorSet(outErr, err); return -1; } - if((err = VfsNodeAcquire(absPath, &n))) + if((err = NodeAcquire(absPath, &n))) { NX_ErrorSet(outErr, NX_ENORES); return err; } - flags &= ~NX_VFS_O_TRUNC; + flags &= ~NX_FILE_TRUNC; } else { - if(flags & NX_VFS_O_EXCL) + if(flags & NX_FILE_EXCL) { NX_ErrorSet(outErr, NX_EAGAIN); - VfsNodeRelease(n); + NodeRelease(n); return -1; } - flags &= ~NX_VFS_O_CREAT; + flags &= ~NX_FILE_CREAT; } } else { - if((err = VfsNodeAcquire(absPath, &n))) + if((err = NodeAcquire(absPath, &n))) { NX_ErrorSet(outErr, NX_ENORES); return err; } - if((flags & NX_VFS_O_WRONLY) || (flags & NX_VFS_O_TRUNC)) + if((flags & NX_FILE_WRONLY) || (flags & NX_FILE_TRUNC)) { - if((err = VfsNodeAccess(n, NX_VFS_W_OK))) + if((err = NodeAccess(n, NX_FILE_WRITE_OK))) { NX_ErrorSet(outErr, NX_EPERM); - VfsNodeRelease(n); + NodeRelease(n); return err; } - if(n->type == NX_VFS_NODE_TYPE_DIR) + if(n->type == NX_FILE_NODE_TYPE_DIR) { NX_ErrorSet(outErr, NX_EPERM); - VfsNodeRelease(n); + NodeRelease(n); return -1; } } } - if(flags & NX_VFS_O_TRUNC) + if(flags & NX_FILE_TRUNC) { - if(!(flags & NX_VFS_O_WRONLY) || (n->type == NX_VFS_NODE_TYPE_DIR)) + if(!(flags & NX_FILE_WRONLY) || (n->type == NX_FILE_NODE_TYPE_DIR)) { NX_ErrorSet(outErr, NX_EPERM); - VfsNodeRelease(n); + NodeRelease(n); return -1; } NX_MutexLock(&n->lock); @@ -1053,19 +1031,19 @@ int NX_VfsOpen(const char * path, NX_U32 flags, NX_U32 mode, NX_Error *outErr) if(err) { NX_ErrorSet(outErr, err); - VfsNodeRelease(n); + NodeRelease(n); return -1; } } - fd = VfsFileAlloc(ft); + fd = FileAlloc(ft); if(fd < 0) { NX_ErrorSet(outErr, NX_ENORES); - VfsNodeRelease(n); + NodeRelease(n); return -1; } - f = VfsFileDescriptorToFile(ft, fd); + f = FileDescriptorToFile(ft, fd); NX_MutexLock(&f->lock); f->node = n; @@ -1077,21 +1055,21 @@ int NX_VfsOpen(const char * path, NX_U32 flags, NX_U32 mode, NX_Error *outErr) return fd; } -NX_Error NX_VfsClose(int fd) +NX_Error NX_FileClose(int fd) { - NX_VfsNode * n; - NX_VfsFile * f; + NX_FileNode * n; + NX_FileDesc * f; NX_Error err; - NX_VfsFileTable *ft; + NX_FileTable *ft; /* check has file table */ - ft = VFS_GET_FILE_TABLE(); + ft = GET_FILE_TABLE(); if (!ft) { return NX_ENORES; } - f = VfsFileDescriptorToFile(ft, fd); + f = FileDescriptorToFile(ft, fd); if(!f) { return NX_EFAULT; @@ -1113,19 +1091,19 @@ NX_Error NX_VfsClose(int fd) NX_MutexUnlock(&f->lock); return err; } - VfsNodeRelease(n); + NodeRelease(n); NX_MutexUnlock(&f->lock); - VfsFileFree(ft, fd); + FileFree(ft, fd); return NX_EOK; } -NX_U64 NX_VfsRead(int fd, void * buf, NX_U64 len, NX_Error *outErr) +NX_U64 NX_FileRead(int fd, void * buf, NX_U64 len, NX_Error *outErr) { - NX_VfsNode * n; - NX_VfsFile * f; + NX_FileNode * n; + NX_FileDesc * f; NX_U64 ret; - NX_VfsFileTable *ft; + NX_FileTable *ft; NX_Error err = NX_EOK; if(!buf || !len) @@ -1134,8 +1112,8 @@ NX_U64 NX_VfsRead(int fd, void * buf, NX_U64 len, NX_Error *outErr) return 0; } - ft = VFS_GET_FILE_TABLE(); - f = VfsFileDescriptorToFile(ft, fd); + ft = GET_FILE_TABLE(); + f = FileDescriptorToFile(ft, fd); if(!f) { NX_ErrorSet(outErr, NX_ENORES); @@ -1150,14 +1128,14 @@ NX_U64 NX_VfsRead(int fd, void * buf, NX_U64 len, NX_Error *outErr) NX_ErrorSet(outErr, NX_EFAULT); return 0; } - if(n->type != NX_VFS_NODE_TYPE_REG) + if(n->type != NX_FILE_NODE_TYPE_REG) { NX_MutexUnlock(&f->lock); NX_ErrorSet(outErr, NX_ENORES); return 0; } - if(!(f->flags & NX_VFS_O_RDONLY)) + if(!(f->flags & NX_FILE_RDONLY)) { NX_MutexUnlock(&f->lock); NX_ErrorSet(outErr, NX_EPERM); @@ -1174,12 +1152,12 @@ NX_U64 NX_VfsRead(int fd, void * buf, NX_U64 len, NX_Error *outErr) return ret; } -NX_U64 NX_VfsWrite(int fd, void * buf, NX_U64 len, NX_Error *outErr) +NX_U64 NX_FileWrite(int fd, void * buf, NX_U64 len, NX_Error *outErr) { - NX_VfsNode * n; - NX_VfsFile * f; + NX_FileNode * n; + NX_FileDesc * f; NX_U64 ret; - NX_VfsFileTable *ft; + NX_FileTable *ft; NX_Error err = NX_EOK; if(!buf || !len) @@ -1188,8 +1166,8 @@ NX_U64 NX_VfsWrite(int fd, void * buf, NX_U64 len, NX_Error *outErr) return 0; } - ft = VFS_GET_FILE_TABLE(); - f = VfsFileDescriptorToFile(ft, fd); + ft = GET_FILE_TABLE(); + f = FileDescriptorToFile(ft, fd); if(!f) { NX_ErrorSet(outErr, NX_ENORES); @@ -1204,14 +1182,14 @@ NX_U64 NX_VfsWrite(int fd, void * buf, NX_U64 len, NX_Error *outErr) NX_ErrorSet(outErr, NX_EFAULT); return 0; } - if(n->type != NX_VFS_NODE_TYPE_REG) + if(n->type != NX_FILE_NODE_TYPE_REG) { NX_MutexUnlock(&f->lock); NX_ErrorSet(outErr, NX_ENORES); return 0; } - if(!(f->flags & NX_VFS_O_WRONLY)) + if(!(f->flags & NX_FILE_WRONLY)) { NX_MutexUnlock(&f->lock); NX_ErrorSet(outErr, NX_EPERM); @@ -1229,15 +1207,15 @@ NX_U64 NX_VfsWrite(int fd, void * buf, NX_U64 len, NX_Error *outErr) return ret; } -NX_Error NX_VfsIoctl(int fd, NX_U32 cmd, void *arg) +NX_Error NX_FileIoctl(int fd, NX_U32 cmd, void *arg) { - NX_VfsNode * n; - NX_VfsFile * f; + NX_FileNode * n; + NX_FileDesc * f; NX_Error err; - NX_VfsFileTable *ft; + NX_FileTable *ft; - ft = VFS_GET_FILE_TABLE(); - f = VfsFileDescriptorToFile(ft, fd); + ft = GET_FILE_TABLE(); + f = FileDescriptorToFile(ft, fd); if(!f) { return NX_ENORES; @@ -1260,15 +1238,15 @@ NX_Error NX_VfsIoctl(int fd, NX_U32 cmd, void *arg) return err; } -NX_I64 NX_VfsFileSeek(int fd, NX_I64 off, int whence, NX_Error *outErr) +NX_Offset NX_FileSetPointer(int fd, NX_Offset off, int whence, NX_Error *outErr) { - NX_VfsNode * n; - NX_VfsFile * f; - NX_I64 ret; - NX_VfsFileTable *ft; + NX_FileNode * n; + NX_FileDesc * f; + NX_Offset ret; + NX_FileTable *ft; - ft = VFS_GET_FILE_TABLE(); - f = VfsFileDescriptorToFile(ft, fd); + ft = GET_FILE_TABLE(); + f = FileDescriptorToFile(ft, fd); if(!f) { NX_ErrorSet(outErr, NX_ENORES); @@ -1287,14 +1265,14 @@ NX_I64 NX_VfsFileSeek(int fd, NX_I64 off, int whence, NX_Error *outErr) NX_MutexLock(&n->lock); switch(whence) { - case NX_VFS_SEEK_SET: + case NX_FILE_SEEK_SET: if(off < 0) off = 0; else if(off > (NX_Offset64)n->size) off = n->size; break; - case NX_VFS_SEEK_CUR: + case NX_FILE_SEEK_CUR: if((f->offset + off) > (NX_Offset64)n->size) off = n->size; else if((f->offset + off) < 0) @@ -1303,7 +1281,7 @@ NX_I64 NX_VfsFileSeek(int fd, NX_I64 off, int whence, NX_Error *outErr) off = f->offset + off; break; - case NX_VFS_SEEK_END: + case NX_FILE_SEEK_END: if(off > 0) off = n->size; else if((n->size + off) < 0) @@ -1333,15 +1311,15 @@ NX_I64 NX_VfsFileSeek(int fd, NX_I64 off, int whence, NX_Error *outErr) return ret; } -NX_Error NX_VfsFileSync(int fd) +NX_Error NX_FileSync(int fd) { - NX_VfsNode * n; - NX_VfsFile * f; + NX_FileNode * n; + NX_FileDesc * f; NX_Error err; - NX_VfsFileTable *ft; + NX_FileTable *ft; - ft = VFS_GET_FILE_TABLE(); - f = VfsFileDescriptorToFile(ft, fd); + ft = GET_FILE_TABLE(); + f = FileDescriptorToFile(ft, fd); if(!f) { return NX_ENORES; @@ -1354,7 +1332,7 @@ NX_Error NX_VfsFileSync(int fd) NX_MutexUnlock(&f->lock); return NX_EFAULT; } - if(!(f->flags & NX_VFS_O_WRONLY)) + if(!(f->flags & NX_FILE_WRONLY)) { NX_MutexUnlock(&f->lock); return NX_EPERM; @@ -1367,15 +1345,15 @@ NX_Error NX_VfsFileSync(int fd) return err; } -NX_Error NX_VfsFileChmod(int fd, NX_U32 mode) +NX_Error NX_FileSetMode(int fd, NX_U32 mode) { - NX_VfsNode * n; - NX_VfsFile * f; + NX_FileNode * n; + NX_FileDesc * f; int err; - NX_VfsFileTable *ft; + NX_FileTable *ft; - ft = VFS_GET_FILE_TABLE(); - f = VfsFileDescriptorToFile(ft, fd); + ft = GET_FILE_TABLE(); + f = FileDescriptorToFile(ft, fd); if(!f) { return NX_ENORES; @@ -1388,29 +1366,29 @@ NX_Error NX_VfsFileChmod(int fd, NX_U32 mode) NX_MutexUnlock(&f->lock); return NX_EFAULT; } - mode &= (NX_VFS_S_IRWXU | NX_VFS_S_IRWXG | NX_VFS_S_IRWXO); + mode &= (NX_FILE_MODE_MASK); NX_MutexLock(&n->lock); - err = n->mount->fs->chmod(n, mode); + err = n->mount->fs->setMode(n, mode); NX_MutexUnlock(&n->lock); NX_MutexUnlock(&f->lock); return err; } -NX_Error NX_VfsFileStat(int fd, NX_VfsStatInfo * st) +NX_Error NX_FileGetStat(int fd, NX_FileStatInfo * st) { - NX_VfsNode * n; - NX_VfsFile * f; + NX_FileNode * n; + NX_FileDesc * f; NX_Error err; - NX_VfsFileTable *ft; + NX_FileTable *ft; if(!st) { return NX_EINVAL; } - ft = VFS_GET_FILE_TABLE(); - f = VfsFileDescriptorToFile(ft, fd); + ft = GET_FILE_TABLE(); + f = FileDescriptorToFile(ft, fd); if(!f) { return NX_ENORES; @@ -1423,18 +1401,18 @@ NX_Error NX_VfsFileStat(int fd, NX_VfsStatInfo * st) NX_MutexUnlock(&f->lock); return NX_EFAULT; } - err = VfsNodeStat(n, st); + err = NodeStat(n, st); NX_MutexUnlock(&f->lock); return err; } -int NX_VfsOpenDir(const char * name, NX_Error *outErr) +int NX_DirOpen(const char * name, NX_Error *outErr) { - NX_VfsNode * n; - NX_VfsFile * f; + NX_FileNode * n; + NX_FileDesc * f; int fd; - NX_VfsFileTable *ft; + NX_FileTable *ft; NX_Error err = NX_EOK; if(!name) @@ -1443,14 +1421,14 @@ int NX_VfsOpenDir(const char * name, NX_Error *outErr) return -1; } - if((fd = NX_VfsOpen(name, NX_VFS_O_RDONLY, 0, &err)) < 0) + if((fd = NX_FileOpen(name, NX_FILE_RDONLY, 0, &err)) < 0) { NX_ErrorSet(outErr, err); return fd; } - ft = VFS_GET_FILE_TABLE(); - f = VfsFileDescriptorToFile(ft, fd); + ft = GET_FILE_TABLE(); + f = FileDescriptorToFile(ft, fd); if(!f) { NX_ErrorSet(outErr, NX_ENORES); @@ -1466,10 +1444,10 @@ int NX_VfsOpenDir(const char * name, NX_Error *outErr) return -1; } - if(n->type != NX_VFS_NODE_TYPE_DIR) + if(n->type != NX_FILE_NODE_TYPE_DIR) { NX_MutexUnlock(&f->lock); - NX_VfsClose(fd); + NX_FileClose(fd); NX_ErrorSet(outErr, NX_ENORES); return -1; } @@ -1479,14 +1457,14 @@ int NX_VfsOpenDir(const char * name, NX_Error *outErr) return fd; } -NX_Error NX_VfsCloseDir(int fd) +NX_Error NX_DirClose(int fd) { - NX_VfsNode * n; - NX_VfsFile * f; - NX_VfsFileTable *ft; + NX_FileNode * n; + NX_FileDesc * f; + NX_FileTable *ft; - ft = VFS_GET_FILE_TABLE(); - f = VfsFileDescriptorToFile(ft, fd); + ft = GET_FILE_TABLE(); + f = FileDescriptorToFile(ft, fd); if(!f) { return NX_ENORES; @@ -1500,30 +1478,30 @@ NX_Error NX_VfsCloseDir(int fd) return NX_EFAULT; } - if(n->type != NX_VFS_NODE_TYPE_DIR) + if(n->type != NX_FILE_NODE_TYPE_DIR) { NX_MutexUnlock(&f->lock); return NX_ENORES; } NX_MutexUnlock(&f->lock); - return NX_VfsClose(fd); + return NX_FileClose(fd); } -NX_Error NX_VfsReadDir(int fd, NX_VfsDirent * dir) +NX_Error NX_DirRead(int fd, NX_Dirent * dir) { - NX_VfsNode * n; - NX_VfsFile * f; + NX_FileNode * n; + NX_FileDesc * f; NX_Error err; - NX_VfsFileTable *ft; + NX_FileTable *ft; if(!dir) { return NX_EINVAL; } - ft = VFS_GET_FILE_TABLE(); - f = VfsFileDescriptorToFile(ft, fd); + ft = GET_FILE_TABLE(); + f = FileDescriptorToFile(ft, fd); if(!f) { return NX_ENORES; @@ -1536,13 +1514,13 @@ NX_Error NX_VfsReadDir(int fd, NX_VfsDirent * dir) NX_MutexUnlock(&f->lock); return NX_EFAULT; } - if(n->type != NX_VFS_NODE_TYPE_DIR) + if(n->type != NX_FILE_NODE_TYPE_DIR) { NX_MutexUnlock(&f->lock); return NX_ENORES; } NX_MutexLock(&n->lock); - err = n->mount->fs->readdir(n, f->offset, dir); + err = n->mount->fs->readDir(n, f->offset, dir); NX_MutexUnlock(&n->lock); if(!err) { @@ -1553,14 +1531,14 @@ NX_Error NX_VfsReadDir(int fd, NX_VfsDirent * dir) return err; } -NX_Error NX_VfsRewindDir(int fd) +NX_Error NX_DirResetPointer(int fd) { - NX_VfsNode * n; - NX_VfsFile * f; - NX_VfsFileTable *ft; + NX_FileNode * n; + NX_FileDesc * f; + NX_FileTable *ft; - ft = VFS_GET_FILE_TABLE(); - f = VfsFileDescriptorToFile(ft, fd); + ft = GET_FILE_TABLE(); + f = FileDescriptorToFile(ft, fd); if(!f) { return NX_ENORES; @@ -1573,7 +1551,7 @@ NX_Error NX_VfsRewindDir(int fd) NX_MutexUnlock(&f->lock); return NX_EFAULT; } - if(n->type != NX_VFS_NODE_TYPE_DIR) + if(n->type != NX_FILE_NODE_TYPE_DIR) { NX_MutexUnlock(&f->lock); return NX_ENORES; @@ -1584,46 +1562,46 @@ NX_Error NX_VfsRewindDir(int fd) return 0; } -NX_Error NX_VfsMakeDir(const char * path, NX_U32 mode) +NX_Error NX_DirCreate(const char * path, NX_U32 mode) { - NX_VfsNode * n, * dn; + NX_FileNode * n, * dn; char * name; NX_Error err; - char absPath[NX_VFS_MAX_PATH + 1] = {0}; + char absPath[NX_FILE_MAX_PATH + 1] = {0}; if(!path) { return NX_EINVAL; } - if ((err = NX_VfsBuildAbsPath(path, absPath)) != NX_EOK) + if ((err = NX_PathBuildAbs(path, absPath)) != NX_EOK) { return err; } - if(!VfsNodeAcquire(absPath, &n)) + if(!NodeAcquire(absPath, &n)) { - VfsNodeRelease(n); + NodeRelease(n); return NX_EAGAIN; } - if((err = VfsLookupDir(absPath, &dn, &name))) + if((err = LookupDir(absPath, &dn, &name))) { return NX_ENOSRCH; } - if((err = VfsNodeAccess(dn, NX_VFS_W_OK))) + if((err = NodeAccess(dn, NX_FILE_WRITE_OK))) { - VfsNodeRelease(dn); + NodeRelease(dn); return NX_EPERM; } - mode &= ~NX_VFS_S_IFMT; - mode |= NX_VFS_S_IFDIR; + mode &= ~NX_FILE_TYPE_MASK; + mode |= NX_FILE_TYPE_DIR; NX_MutexLock(&dn->lock); - err = dn->mount->fs->mkdir(dn, name, mode); + err = dn->mount->fs->createDir(dn, name, mode); if(err) { goto fail; @@ -1632,18 +1610,18 @@ NX_Error NX_VfsMakeDir(const char * path, NX_U32 mode) fail: NX_MutexUnlock(&dn->lock); - VfsNodeRelease(dn); + NodeRelease(dn); return err; } -NX_PRIVATE NX_Error VfsCheckDirEmpty(const char * path) +NX_PRIVATE NX_Error CheckDirEmpty(const char * path) { - NX_VfsDirent dir; + NX_Dirent dir; NX_Error err; int fd, count; - if((fd = NX_VfsOpenDir(path, &err)) < 0) + if((fd = NX_DirOpen(path, &err)) < 0) { return err; } @@ -1651,7 +1629,7 @@ NX_PRIVATE NX_Error VfsCheckDirEmpty(const char * path) count = 0; do { - err = NX_VfsReadDir(fd, &dir); + err = NX_DirRead(fd, &dir); if(err != NX_EOK) { break; @@ -1666,7 +1644,7 @@ NX_PRIVATE NX_Error VfsCheckDirEmpty(const char * path) } } while(1); - NX_VfsCloseDir(fd); + NX_DirClose(fd); if(count) { return NX_EAGAIN; @@ -1675,55 +1653,55 @@ NX_PRIVATE NX_Error VfsCheckDirEmpty(const char * path) return NX_EOK; } -NX_Error NX_VfsRemoveDir(const char * path) +NX_Error NX_DirDelete(const char * path) { - NX_VfsNode * n, * dn; + NX_FileNode * n, * dn; char * name; NX_Error err; - char absPath[NX_VFS_MAX_PATH + 1] = {0}; + char absPath[NX_FILE_MAX_PATH + 1] = {0}; if(!path) { return NX_EINVAL; } - if ((err = NX_VfsBuildAbsPath(path, absPath)) != NX_EOK) + if ((err = NX_PathBuildAbs(path, absPath)) != NX_EOK) { return err; } - if((err = VfsCheckDirEmpty(absPath)) != NX_EOK) + if((err = CheckDirEmpty(absPath)) != NX_EOK) { return err; } - if(VfsNodeAcquire(absPath, &n)) + if(NodeAcquire(absPath, &n)) { return NX_ENORES; } - if((n->flags == NX_VFS_NODE_FLAG_ROOT) || (NX_AtomicGet(&n->refcnt) >= 2)) + if((n->flags == NX_FILE_NODE_FLAG_ROOT) || (NX_AtomicGet(&n->refcnt) >= 2)) { - VfsNodeRelease(n); + NodeRelease(n); return NX_EBUSY; } - if(VfsNodeAccess(n, NX_VFS_W_OK)) + if(NodeAccess(n, NX_FILE_WRITE_OK)) { - VfsNodeRelease(n); + NodeRelease(n); return NX_EPERM; } - if(VfsLookupDir(absPath, &dn, &name)) + if(LookupDir(absPath, &dn, &name)) { - VfsNodeRelease(n); + NodeRelease(n); return NX_ENOSRCH; } NX_MutexLock(&dn->lock); NX_MutexLock(&n->lock); - err = dn->mount->fs->rmdir(dn, n, name); + err = dn->mount->fs->deleteDir(dn, n, name); if(err != NX_EOK) { goto fail; @@ -1739,22 +1717,22 @@ NX_Error NX_VfsRemoveDir(const char * path) fail: NX_MutexUnlock(&n->lock); NX_MutexUnlock(&dn->lock); - VfsNodeRelease(n); - VfsNodeRelease(dn); + NodeRelease(n); + NodeRelease(dn); return err; } -NX_Error NX_VfsRename(const char * src, const char * dst) +NX_Error NX_FileRename(const char * src, const char * dst) { - NX_VfsNode * n1, * n2, * sn, * dn; + NX_FileNode * n1, * n2, * sn, * dn; char * sname, * dname; int len; NX_Error err; - char srcAbsPath[NX_VFS_MAX_PATH + 1] = {0}; - char dstAbsPath[NX_VFS_MAX_PATH + 1] = {0}; + char srcAbsPath[NX_FILE_MAX_PATH + 1] = {0}; + char dstAbsPath[NX_FILE_MAX_PATH + 1] = {0}; - if(!NX_StrCmpN(src, dst, NX_VFS_MAX_PATH)) + if(!NX_StrCmpN(src, dst, NX_FILE_MAX_PATH)) { return NX_EINVAL; } @@ -1770,22 +1748,22 @@ NX_Error NX_VfsRename(const char * src, const char * dst) return NX_EINVAL; } - if ((err = NX_VfsBuildAbsPath(src, srcAbsPath)) != NX_EOK) + if ((err = NX_PathBuildAbs(src, srcAbsPath)) != NX_EOK) { return err; } - if ((err = NX_VfsBuildAbsPath(dst, dstAbsPath)) != NX_EOK) + if ((err = NX_PathBuildAbs(dst, dstAbsPath)) != NX_EOK) { return err; } - if(VfsNodeAcquire(srcAbsPath, &n1)) + if(NodeAcquire(srcAbsPath, &n1)) { return NX_ENORES; } - if(VfsNodeAccess(n1, NX_VFS_W_OK)) + if(NodeAccess(n1, NX_FILE_WRITE_OK)) { err = NX_EPERM; goto fail1; @@ -1797,20 +1775,20 @@ NX_Error NX_VfsRename(const char * src, const char * dst) goto fail1; } - if(VfsLookupDir(srcAbsPath, &sn, &sname)) + if(LookupDir(srcAbsPath, &sn, &sname)) { err = NX_ENOSRCH; goto fail1; } - if(!VfsNodeAcquire(dstAbsPath, &n2)) + if(!NodeAcquire(dstAbsPath, &n2)) { - VfsNodeRelease(n2); + NodeRelease(n2); err = NX_EBUSY; goto fail2; } - if(VfsLookupDir(dstAbsPath, &dn, &dname)) + if(LookupDir(dstAbsPath, &dn, &dname)) { err = NX_ENOSRCH; goto fail2; @@ -1855,58 +1833,58 @@ fail4: NX_MutexUnlock(&sn->lock); NX_MutexUnlock(&n1->lock); fail3: - VfsNodeRelease(dn); + NodeRelease(dn); fail2: - VfsNodeRelease(sn); + NodeRelease(sn); fail1: - VfsNodeRelease(n1); + NodeRelease(n1); return err; } -NX_Error NX_VfsUnlink(const char * path) +NX_Error NX_FileDelete(const char * path) { - NX_VfsNode * n, * dn; + NX_FileNode * n, * dn; char * name; NX_Error err; - char absPath[NX_VFS_MAX_PATH + 1] = {0}; + char absPath[NX_FILE_MAX_PATH + 1] = {0}; if(!path) { return NX_EINVAL; } - if ((err = NX_VfsBuildAbsPath(path, absPath)) != NX_EOK) + if ((err = NX_PathBuildAbs(path, absPath)) != NX_EOK) { return err; } - if(VfsNodeAcquire(absPath, &n)) + if(NodeAcquire(absPath, &n)) { return NX_ENOSRCH; } - if(n->type == NX_VFS_NODE_TYPE_DIR) + if(n->type == NX_FILE_NODE_TYPE_DIR) { - VfsNodeRelease(n); + NodeRelease(n); return NX_ENORES; } - if((n->flags == NX_VFS_NODE_FLAG_ROOT) || (NX_AtomicGet(&n->refcnt) >= 2)) + if((n->flags == NX_FILE_NODE_FLAG_ROOT) || (NX_AtomicGet(&n->refcnt) >= 2)) { - VfsNodeRelease(n); + NodeRelease(n); return NX_EBUSY; } - if(VfsNodeAccess(n, NX_VFS_W_OK)) + if(NodeAccess(n, NX_FILE_WRITE_OK)) { - VfsNodeRelease(n); + NodeRelease(n); return NX_EPERM; } - if(VfsLookupDir(absPath, &dn, &name)) + if(LookupDir(absPath, &dn, &name)) { - VfsNodeRelease(n); + NodeRelease(n); return NX_ENOSRCH; } @@ -1924,7 +1902,7 @@ NX_Error NX_VfsUnlink(const char * path) } NX_MutexLock(&dn->lock); - err = dn->mount->fs->remove(dn, n, name); + err = dn->mount->fs->delete(dn, n, name); if(err) { goto fail2; @@ -1935,68 +1913,68 @@ fail2: NX_MutexUnlock(&dn->lock); fail1: NX_MutexUnlock(&n->lock); - VfsNodeRelease(dn); - VfsNodeRelease(n); + NodeRelease(dn); + NodeRelease(n); return err; } -NX_Error NX_VfsAccess(const char * path, NX_U32 mode) +NX_Error NX_FileAccess(const char * path, NX_U32 mode) { - NX_VfsNode * n; + NX_FileNode * n; NX_Error err = NX_EOK; - char absPath[NX_VFS_MAX_PATH + 1] = {0}; + char absPath[NX_FILE_MAX_PATH + 1] = {0}; if(!path) { return NX_EINVAL; } - if ((err = NX_VfsBuildAbsPath(path, absPath)) != NX_EOK) + if ((err = NX_PathBuildAbs(path, absPath)) != NX_EOK) { return err; } - if(VfsNodeAcquire(absPath, &n)) + if(NodeAcquire(absPath, &n)) { return NX_ENOSRCH; } - if (VfsNodeAccess(n, mode)) + if (NodeAccess(n, mode)) { err = NX_EPERM; } - VfsNodeRelease(n); + NodeRelease(n); return err; } -NX_Error NX_VfsChmod(const char * path, NX_U32 mode) +NX_Error NX_FileSetModeToPath(const char * path, NX_U32 mode) { - NX_VfsNode * n; + NX_FileNode * n; NX_Error err; - char absPath[NX_VFS_MAX_PATH + 1] = {0}; + char absPath[NX_FILE_MAX_PATH + 1] = {0}; if(!path) { return NX_EINVAL; } - if ((err = NX_VfsBuildAbsPath(path, absPath)) != NX_EOK) + if ((err = NX_PathBuildAbs(path, absPath)) != NX_EOK) { return err; } - if(VfsNodeAcquire(absPath, &n)) + if(NodeAcquire(absPath, &n)) { return NX_ENOSRCH; } - mode &= (NX_VFS_S_IRWXU | NX_VFS_S_IRWXG | NX_VFS_S_IRWXO); + mode &= (NX_FILE_MODE_MASK); NX_MutexLock(&n->lock); - err = n->mount->fs->chmod(n, mode); + err = n->mount->fs->setMode(n, mode); if(err) { goto fail; @@ -2005,51 +1983,51 @@ NX_Error NX_VfsChmod(const char * path, NX_U32 mode) fail: NX_MutexUnlock(&n->lock); - VfsNodeRelease(n); + NodeRelease(n); return err; } -NX_Error NX_VfsStat(const char * path, NX_VfsStatInfo * st) +NX_Error NX_FileGetStatFromPath(const char * path, NX_FileStatInfo * st) { - NX_VfsNode * n; + NX_FileNode * n; NX_Error err = NX_EOK; - char absPath[NX_VFS_MAX_PATH + 1] = {0}; + char absPath[NX_FILE_MAX_PATH + 1] = {0}; if(!path || !st) { return NX_EINVAL; } - if ((err = NX_VfsBuildAbsPath(path, absPath)) != NX_EOK) + if ((err = NX_PathBuildAbs(path, absPath)) != NX_EOK) { return err; } - if(VfsNodeAcquire(absPath, &n)) + if(NodeAcquire(absPath, &n)) { return NX_ENOSRCH; } - err = VfsNodeStat(n, st); - VfsNodeRelease(n); + err = NodeStat(n, st); + NodeRelease(n); return err; } -NX_PRIVATE void NX_VfsInit(void) +NX_PRIVATE void NX_FileSytemInit(void) { int i; NX_ListInit(&fileSystemMountList); NX_MutexInit(&fileSystemMountLock); - for(i = 0; i < NX_VFS_NODE_HASH_SIZE; i++) + for(i = 0; i < NX_FILE_NODE_HASH_SIZE; i++) { NX_ListInit(&fileSystemNodeList[i]); NX_MutexInit(&fileSystemNodeLock[i]); } - NX_VfsFileTableInit(&defaultFileTable); + NX_FileTableInit(&defaultFileTable); } -NX_MODS_INIT(NX_VfsInit); +NX_MODS_INIT(NX_FileSytemInit); diff --git a/src/include/base/exobj.h b/src/include/base/exobj.h index 907e0badb2f26deeedf103b32e7c42fd5c0be14c..68ac44bf760d3c41770128a873e654f9cf256848 100644 --- a/src/include/base/exobj.h +++ b/src/include/base/exobj.h @@ -37,6 +37,8 @@ typedef enum NX_ExposedObjectType NX_EXOBJ_HUB, NX_EXOBJ_SHM, NX_EXOBJ_SHMADDR, + NX_EXOBJ_FILE, + NX_EXOBJ_DIR, NX_EXOBJ_TYPE_NR, } NX_ExposedObjectType; diff --git a/src/include/base/fs.h b/src/include/base/fs.h new file mode 100644 index 0000000000000000000000000000000000000000..bb58e03a3af30238c9a53b7fe841e4fc04c66341 --- /dev/null +++ b/src/include/base/fs.h @@ -0,0 +1,235 @@ +/** + * Copyright (c) 2018-2022, NXOS Development Team + * SPDX-License-Identifier: Apache-2.0 + * + * Copyright(c) 2007-2022 Jianjun Jiang <8192542@qq.com> + * Official site: http://xboot.org + * Mobile phone: +86-18665388956 + * QQ: 8192542 + * + * Contains: nxos file system. + * + * Change Logs: + * Date Author Notes + * 2022-3-26 JasonHu Port from xboot + */ + +#ifndef __NXOS_FILE_SYSTEM__ +#define __NXOS_FILE_SYSTEM__ + +#include +#include +#include +#include + +#ifdef CONFIG_NX_FILE_MAX_PATH +#define NX_FILE_MAX_PATH CONFIG_NX_FILE_MAX_PATH +#else +#define NX_FILE_MAX_PATH (1024) +#endif + +#ifdef CONFIG_NX_FILE_MAX_NAME +#define NX_FILE_MAX_NAME CONFIG_NX_FILE_MAX_NAME +#else +#define NX_FILE_MAX_NAME (256) +#endif + +#ifdef CONFIG_NX_FILE_MAX_FD +#define NX_FILE_MAX_FD CONFIG_NX_FILE_MAX_FD +#else +#define NX_FILE_MAX_FD (256) +#endif + +#ifdef CONFIG_NX_FILE_NODE_HASH_SIZE +#define NX_FILE_NODE_HASH_SIZE CONFIG_NX_FILE_NODE_HASH_SIZE +#else +#define NX_FILE_NODE_HASH_SIZE (256) +#endif + +#define NX_FILE_RDONLY (1 << 0) +#define NX_FILE_WRONLY (1 << 1) +#define NX_FILE_RDWR (NX_FILE_RDONLY | NX_FILE_WRONLY) +#define NX_FILE_ACCMODE (NX_FILE_RDWR) + +#define NX_FILE_CREAT (1 << 8) +#define NX_FILE_EXCL (1 << 9) +#define NX_FILE_TRUNC (1 << 11) +#define NX_FILE_APPEND (1 << 12) + +#define NX_FILE_MODE_EXEC (1 << 6) +#define NX_FILE_MODE_WRITE (1 << 7) +#define NX_FILE_MODE_READ (1 << 8) +#define NX_FILE_MODE_MASK (NX_FILE_MODE_READ | NX_FILE_MODE_WRITE | NX_FILE_MODE_EXEC) + +#define NX_FILE_TYPE_DIR (1 << 16) +#define NX_FILE_TYPE_REG (1 << 19) +#define NX_FILE_TYPE_MASK (NX_FILE_TYPE_DIR | NX_FILE_TYPE_REG) + +#define NX_FILE_IS_DIR(m) ((m) & NX_FILE_TYPE_DIR ) +#define NX_FILE_IS_REG(m) ((m) & NX_FILE_TYPE_REG ) + +#define NX_FILE_READ_OK (1 << 2) +#define NX_FILE_WRITE_OK (1 << 1) +#define NX_FILE_EXEC_OK (1 << 0) + +#define NX_FILE_SEEK_SET (0) +#define NX_FILE_SEEK_CUR (1) +#define NX_FILE_SEEK_END (2) + +struct NX_FileStatInfo; +struct NX_Dirent; +struct NX_FileNode; +struct NX_MountDesc; +struct NX_FileSystem; + +typedef struct NX_FileStatInfo +{ + NX_Size size; + NX_U32 mode; + NX_U32 ctime; + NX_U32 atime; + NX_U32 mtime; +} NX_FileStatInfo; + +enum NX_DirentType +{ + NX_DIR_TYPE_UNK, + NX_DIR_TYPE_DIR, + NX_DIR_TYPE_REG, +}; + +typedef struct NX_Dirent +{ + NX_Offset off; + NX_U32 reclen; + enum NX_DirentType type; + char name[NX_FILE_MAX_NAME]; +} NX_Dirent; + +enum NX_FileNodeFlag +{ + NX_FILE_NODE_FLAG_NONE, + NX_FILE_NODE_FLAG_ROOT, +}; + +enum NX_FileNodeType +{ + NX_FILE_NODE_TYPE_UNK, + NX_FILE_NODE_TYPE_DIR, + NX_FILE_NODE_TYPE_REG, +}; + +typedef struct NX_FileNode +{ + NX_List link; + struct NX_MountDesc * mount; + NX_Atomic refcnt; + char path[NX_FILE_MAX_PATH]; + enum NX_FileNodeFlag flags; + enum NX_FileNodeType type; + NX_Mutex lock; + NX_U32 ctime; + NX_U32 atime; + NX_U32 mtime; + NX_U32 mode; + NX_Size size; + void * data; +} NX_FileNode; + +typedef struct NX_FileDesc +{ + NX_Mutex lock; + struct NX_FileNode * node; + NX_Offset offset; + NX_U32 flags; +} NX_FileDesc; + +typedef struct NX_FileTable +{ + struct NX_FileDesc file[NX_FILE_MAX_FD]; + NX_Mutex file_lock; +} NX_FileTable; + +void NX_FileTableInit(NX_FileTable *ft); +NX_FileTable *NX_FileTableGetDefault(void); + +enum +{ + NX_MOUNT_RW = (0x0 << 0), + NX_MOUNT_RO = (0x1 << 0), + NX_MOUNT_MASK = (0x1 << 0), +}; + +typedef struct NX_MountDesc +{ + NX_List link; + struct NX_FileSystem * fs; + void * dev; + char path[NX_FILE_MAX_PATH]; + NX_U32 flags; + NX_Atomic refcnt; + struct NX_FileNode * root; + struct NX_FileNode * covered; + NX_Mutex lock; + void * data; +} NX_MountDesc; + +typedef struct NX_FileSystem +{ + NX_List list; + const char * name; + + NX_Error (*mount)(NX_MountDesc *, const char *); + NX_Error (*unmount)(NX_MountDesc *); + NX_Error (*mountSync)(NX_MountDesc *); + NX_Error (*getNode)(NX_MountDesc *, NX_FileNode *); + NX_Error (*putNode)(NX_MountDesc *, NX_FileNode *); + + NX_U64 (*read)(NX_FileNode *, NX_I64, void *, NX_U64, NX_Error *outErr); + NX_U64 (*write)(NX_FileNode *, NX_I64, void *, NX_U64, NX_Error *outErr); + NX_Error (*ioctl)(NX_FileNode *, NX_U32, void *); + NX_Error (*truncate)(NX_FileNode *, NX_I64); + NX_Error (*sync)(NX_FileNode *); + NX_Error (*readDir)(NX_FileNode *, NX_I64, NX_Dirent *); + NX_Error (*lookup)(NX_FileNode *, const char *, NX_FileNode *); + NX_Error (*create)(NX_FileNode *, const char *, NX_U32); + NX_Error (*delete)(NX_FileNode *, NX_FileNode *, const char *); + NX_Error (*rename)(NX_FileNode *, const char *, NX_FileNode *, NX_FileNode *, const char *); + NX_Error (*createDir)(NX_FileNode *, const char *, NX_U32); + NX_Error (*deleteDir)(NX_FileNode *, NX_FileNode *, const char *); + NX_Error (*setMode)(NX_FileNode *, NX_U32); +} NX_FileSystem; + +NX_FileSystem * NX_FileSystemSearch(const char * name); +NX_Error NX_FileSystemRegister(NX_FileSystem * fs); +NX_Error NX_FileSystemUnregister(NX_FileSystem * fs); +NX_MountDesc * NX_MountGetByIndex(int index); +int NX_MountGetCount(void); +NX_Error NX_PathBuildAbs(const char * path, char * absPath); + +/* user interface */ +NX_Error NX_FileSystemMount(const char * dev, const char * path, const char * fsname, NX_U32 flags); +NX_Error NX_FileSystemUnmount(const char * path); +NX_Error NX_FileSystemSync(void); +int NX_FileOpen(const char * path, NX_U32 flags, NX_U32 mode, NX_Error *outErr); +NX_Error NX_FileClose(int fd); +NX_U64 NX_FileRead(int fd, void * buf, NX_U64 len, NX_Error *outErr); +NX_U64 NX_FileWrite(int fd, void * buf, NX_U64 len, NX_Error *outErr); +NX_Error NX_FileIoctl(int fd, NX_U32 cmd, void *arg); +NX_Offset NX_FileSetPointer(int fd, NX_Offset off, int whence, NX_Error *outErr); +NX_Error NX_FileSync(int fd); +NX_Error NX_FileSetMode(int fd, NX_U32 mode); +NX_Error NX_FileGetStat(int fd, NX_FileStatInfo * st); +int NX_DirOpen(const char * name, NX_Error *outErr); +NX_Error NX_DirClose(int fd); +NX_Error NX_DirRead(int fd, NX_Dirent * dir); +NX_Error NX_DirResetPointer(int fd); +NX_Error NX_DirCreate(const char * path, NX_U32 mode); +NX_Error NX_DirDelete(const char * path); +NX_Error NX_FileRename(const char * src, const char * dst); +NX_Error NX_FileDelete(const char * path); +NX_Error NX_FileAccess(const char * path, NX_U32 mode); +NX_Error NX_FileSetModeToPath(const char * path, NX_U32 mode); +NX_Error NX_FileGetStatFromPath(const char * path, NX_FileStatInfo * st); + +#endif /* __NXOS_FILE_SYSTEM__ */ diff --git a/src/include/base/process.h b/src/include/base/process.h index 24974b9a7df354dd2ced201b2e371b8ebc0f3725..9ed6ce704afeda78fe01b3392cba0ca3ae5810cf 100644 --- a/src/include/base/process.h +++ b/src/include/base/process.h @@ -16,7 +16,7 @@ #include #include #include -#include +#include #include #include #include @@ -44,7 +44,7 @@ struct NX_Process NX_U32 exitCode; /* exit code for process */ NX_U32 waitExitCode; /* exit code for this process wait another process */ - NX_VfsFileTable *fileTable; /* file table */ + NX_FileTable *fileTable; /* file table */ NX_Semaphore waiterSem; /* The semaphore of the process waiting for this process to exit */ @@ -52,8 +52,8 @@ struct NX_Process NX_I32 parentPid; /* parent process id */ void *args; /* process args */ - char cwd[NX_VFS_MAX_PATH]; /* current work diretory */ - char exePath[NX_VFS_MAX_PATH]; /* execute path */ + char cwd[NX_FILE_MAX_PATH]; /* current work diretory */ + char exePath[NX_FILE_MAX_PATH]; /* execute path */ NX_ExposedObjectTable exobjTable; }; typedef struct NX_Process NX_Process; diff --git a/src/include/base/snapshot.h b/src/include/base/snapshot.h index ff9c5441082ff37eeefd4b2dc662980ccf5f7f66..d5a6b93cae5a70a989e33653779510f7841c24a4 100644 --- a/src/include/base/snapshot.h +++ b/src/include/base/snapshot.h @@ -39,7 +39,7 @@ typedef struct NX_SnapshotProcess NX_U32 threadCount; NX_U32 parentProcessId; NX_U32 flags; - char exePath[NX_VFS_MAX_PATH]; /* execute path */ + char exePath[NX_FILE_MAX_PATH]; /* execute path */ } NX_SnapshotProcess; typedef struct NX_SnapshotHead diff --git a/src/include/base/thread.h b/src/include/base/thread.h index 5aad898a28f8f90640f51e65c357836d38452381..881fadb365d24d1e8c3c805a659536e134936edf 100644 --- a/src/include/base/thread.h +++ b/src/include/base/thread.h @@ -17,7 +17,7 @@ #include #include #include -#include +#include #include #ifdef CONFIG_NX_THREAD_NAME_LEN @@ -73,7 +73,7 @@ struct NX_ThreadResource { NX_Timer *sleepTimer; NX_Process *process; - NX_VfsFileTable *fileTable; + NX_FileTable *fileTable; struct NX_Hub *hub; /* hub for each thread */ struct NX_HubChannel *activeChannel; /* channel for this thread */ diff --git a/src/include/base/vfs.h b/src/include/base/vfs.h deleted file mode 100644 index 27afdf01375bee0c2013f00589df102481ca26b2..0000000000000000000000000000000000000000 --- a/src/include/base/vfs.h +++ /dev/null @@ -1,273 +0,0 @@ -/** - * Copyright (c) 2018-2022, NXOS Development Team - * SPDX-License-Identifier: Apache-2.0 - * - * Copyright(c) 2007-2022 Jianjun Jiang <8192542@qq.com> - * Official site: http://xboot.org - * Mobile phone: +86-18665388956 - * QQ: 8192542 - * - * Contains: virtual file system form xboot. - * - * Change Logs: - * Date Author Notes - * 2022-3-26 JasonHu Port from xboot - */ - -#ifndef __FS_VFS__ -#define __FS_VFS__ - -#include -#include -#include -#include - -#ifdef CONFIG_NX_VFS_MAX_PATH -#define NX_VFS_MAX_PATH CONFIG_NX_VFS_MAX_PATH -#else -#define NX_VFS_MAX_PATH (1024) -#endif - -#ifdef CONFIG_NX_VFS_MAX_NAME -#define NX_VFS_MAX_NAME CONFIG_NX_VFS_MAX_NAME -#else -#define NX_VFS_MAX_NAME (256) -#endif - -#ifdef CONFIG_NX_VFS_MAX_FD -#define NX_VFS_MAX_FD CONFIG_NX_VFS_MAX_FD -#else -#define NX_VFS_MAX_FD (256) -#endif - -#ifdef CONFIG_NX_VFS_NODE_HASH_SIZE -#define NX_VFS_NODE_HASH_SIZE CONFIG_NX_VFS_NODE_HASH_SIZE -#else -#define NX_VFS_NODE_HASH_SIZE (256) -#endif - -#define NX_VFS_O_RDONLY (1 << 0) -#define NX_VFS_O_WRONLY (1 << 1) -#define NX_VFS_O_RDWR (NX_VFS_O_RDONLY | NX_VFS_O_WRONLY) -#define NX_VFS_O_ACCMODE (NX_VFS_O_RDWR) - -#define NX_VFS_O_CREAT (1 << 8) -#define NX_VFS_O_EXCL (1 << 9) -#define NX_VFS_O_NOCTTY (1 << 10) -#define NX_VFS_O_TRUNC (1 << 11) -#define NX_VFS_O_APPEND (1 << 12) -#define NX_VFS_O_DSYNC (1 << 13) -#define NX_VFS_O_NONBLOCK (1 << 14) -#define NX_VFS_O_SYNC (1 << 15) - -#define NX_VFS_S_IXOTH (1 << 0) -#define NX_VFS_S_IWOTH (1 << 1) -#define NX_VFS_S_IROTH (1 << 2) -#define NX_VFS_S_IRWXO (NX_VFS_S_IROTH | NX_VFS_S_IWOTH | NX_VFS_S_IXOTH) - -#define NX_VFS_S_IXGRP (1 << 3) -#define NX_VFS_S_IWGRP (1 << 4) -#define NX_VFS_S_IRGRP (1 << 5) -#define NX_VFS_S_IRWXG (NX_VFS_S_IRGRP | NX_VFS_S_IWGRP | NX_VFS_S_IXGRP) - -#define NX_VFS_S_IXUSR (1 << 6) -#define NX_VFS_S_IWUSR (1 << 7) -#define NX_VFS_S_IRUSR (1 << 8) -#define NX_VFS_S_IRWXU (NX_VFS_S_IRUSR | NX_VFS_S_IWUSR | NX_VFS_S_IXUSR) - -#define NX_VFS_S_IFDIR (1 << 16) -#define NX_VFS_S_IFCHR (1 << 17) -#define NX_VFS_S_IFBLK (1 << 18) -#define NX_VFS_S_IFREG (1 << 19) -#define NX_VFS_S_IFLNK (1 << 20) -#define NX_VFS_S_IFIFO (1 << 21) -#define NX_VFS_S_IFSOCK (1 << 22) -#define NX_VFS_S_IFMT (NX_VFS_S_IFDIR | NX_VFS_S_IFCHR | NX_VFS_S_IFBLK | NX_VFS_S_IFREG | NX_VFS_S_IFLNK | NX_VFS_S_IFIFO | NX_VFS_S_IFSOCK) - -#define NX_VFS_S_ISDIR(m) ((m) & NX_VFS_S_IFDIR ) -#define NX_VFS_S_ISCHR(m) ((m) & NX_VFS_S_IFCHR ) -#define NX_VFS_S_ISBLK(m) ((m) & NX_VFS_S_IFBLK ) -#define NX_VFS_S_ISREG(m) ((m) & NX_VFS_S_IFREG ) -#define NX_VFS_S_ISLNK(m) ((m) & NX_VFS_S_IFLNK ) -#define NX_VFS_S_ISFIFO(m) ((m) & NX_VFS_S_IFIFO ) -#define NX_VFS_S_ISSOCK(m) ((m) & NX_VFS_S_IFSOCK ) - -#define NX_VFS_R_OK (1 << 2) -#define NX_VFS_W_OK (1 << 1) -#define NX_VFS_X_OK (1 << 0) - -#define NX_VFS_SEEK_SET (0) -#define NX_VFS_SEEK_CUR (1) -#define NX_VFS_SEEK_END (2) - -struct NX_VfsStatInfo; -struct NX_VfsDirent; -struct NX_VfsNode; -struct NX_VfsMount; -struct NX_VfsFileSystem; - -typedef struct NX_VfsStatInfo -{ - NX_U32 ino; - NX_Size size; - NX_U32 mode; - NX_U32 dev; - NX_U32 uid; - NX_U32 gid; - NX_U32 ctime; - NX_U32 atime; - NX_U32 mtime; -} NX_VfsStatInfo; - -enum NX_VfsDirentType -{ - NX_VFS_DIR_TYPE_UNK, - NX_VFS_DIR_TYPE_DIR, - NX_VFS_DIR_TYPE_CHR, - NX_VFS_DIR_TYPE_BLK, - NX_VFS_DIR_TYPE_REG, - NX_VFS_DIR_TYPE_LNK, - NX_VFS_DIR_TYPE_FIFO, - NX_VFS_DIR_TYPE_SOCK, -}; - -typedef struct NX_VfsDirent -{ - NX_Offset off; - NX_U32 reclen; - enum NX_VfsDirentType type; - char name[NX_VFS_MAX_NAME]; -} NX_VfsDirent; - -enum NX_VfsNodeFlag -{ - NX_VFS_NODE_FLAG_NONE, - NX_VFS_NODE_FLAG_ROOT, -}; - -enum NX_VfsNodeType -{ - NX_VFS_NODE_TYPE_UNK, - NX_VFS_NODE_TYPE_DIR, - NX_VFS_NODE_TYPE_CHR, - NX_VFS_NODE_TYPE_BLK, - NX_VFS_NODE_TYPE_REG, - NX_VFS_NODE_TYPE_LNK, - NX_VFS_NODE_TYPE_FIFO, - NX_VFS_NODE_TYPE_SOCK, -}; - -typedef struct NX_VfsNode -{ - NX_List link; - struct NX_VfsMount * mount; - NX_Atomic refcnt; - char path[NX_VFS_MAX_PATH]; - enum NX_VfsNodeFlag flags; - enum NX_VfsNodeType type; - NX_Mutex lock; - NX_U32 ctime; - NX_U32 atime; - NX_U32 mtime; - NX_U32 mode; - NX_Size size; - void * data; -} NX_VfsNode; - -typedef struct NX_VfsFile -{ - NX_Mutex lock; - struct NX_VfsNode * node; - NX_Offset offset; - NX_U32 flags; -} NX_VfsFile; - -typedef struct NX_VfsFileTable -{ - struct NX_VfsFile file[NX_VFS_MAX_FD]; - NX_Mutex file_lock; -} NX_VfsFileTable; - -void NX_VfsFileTableInit(NX_VfsFileTable *ft); -NX_VfsFileTable *NX_VfsGetDefaultFileTable(void); - -enum -{ - NX_VFS_MOUNT_RW = (0x0 << 0), - NX_VFS_MOUNT_RO = (0x1 << 0), - NX_VFS_MOUNT_MASK = (0x1 << 0), -}; - -typedef struct NX_VfsMount -{ - NX_List link; - struct NX_VfsFileSystem * fs; - void * dev; - char path[NX_VFS_MAX_PATH]; - NX_U32 flags; - NX_Atomic refcnt; - struct NX_VfsNode * root; - struct NX_VfsNode * covered; - NX_Mutex lock; - void * data; -} NX_VfsMount; - -typedef struct NX_VfsFileSystem -{ - NX_List list; - const char * name; - - NX_Error (*mount)(NX_VfsMount *, const char *); - NX_Error (*unmount)(NX_VfsMount *); - NX_Error (*msync)(NX_VfsMount *); - NX_Error (*vget)(NX_VfsMount *, NX_VfsNode *); - NX_Error (*vput)(NX_VfsMount *, NX_VfsNode *); - - NX_U64 (*read)(NX_VfsNode *, NX_I64, void *, NX_U64, NX_Error *outErr); - NX_U64 (*write)(NX_VfsNode *, NX_I64, void *, NX_U64, NX_Error *outErr); - NX_Error (*ioctl)(NX_VfsNode *, NX_U32, void *); - NX_Error (*truncate)(NX_VfsNode *, NX_I64); - NX_Error (*sync)(NX_VfsNode *); - NX_Error (*readdir)(NX_VfsNode *, NX_I64, NX_VfsDirent *); - NX_Error (*lookup)(NX_VfsNode *, const char *, NX_VfsNode *); - NX_Error (*create)(NX_VfsNode *, const char *, NX_U32); - NX_Error (*remove)(NX_VfsNode *, NX_VfsNode *, const char *); - NX_Error (*rename)(NX_VfsNode *, const char *, NX_VfsNode *, NX_VfsNode *, const char *); - NX_Error (*mkdir)(NX_VfsNode *, const char *, NX_U32); - NX_Error (*rmdir)(NX_VfsNode *, NX_VfsNode *, const char *); - NX_Error (*chmod)(NX_VfsNode *, NX_U32); -} NX_VfsFileSystem; - -NX_VfsFileSystem * NX_VfsSearchFileSystem(const char * name); -NX_Error NX_VfsRegisterFileSystem(NX_VfsFileSystem * fs); -NX_Error NX_VfsUnregisterFileSystem(NX_VfsFileSystem * fs); -NX_VfsMount * NX_VfsGetMount(int index); -int NX_VfsGetMountCount(void); -NX_Error NX_VfsBuildAbsPath(const char * path, char * absPath); - -/* user interface */ -NX_Error NX_VfsMountFileSystem(const char * dev, const char * path, const char * fsname, NX_U32 flags); -NX_Error NX_VfsUnmountFileSystem(const char * path); -NX_Error NX_VfsSync(void); -int NX_VfsOpen(const char * path, NX_U32 flags, NX_U32 mode, NX_Error *outErr); -NX_Error NX_VfsClose(int fd); -NX_U64 NX_VfsRead(int fd, void * buf, NX_U64 len, NX_Error *outErr); -NX_U64 NX_VfsWrite(int fd, void * buf, NX_U64 len, NX_Error *outErr); -NX_Error NX_VfsIoctl(int fd, NX_U32 cmd, void *arg); -NX_I64 NX_VfsFileSeek(int fd, NX_I64 off, int whence, NX_Error *outErr); -NX_Error NX_VfsFileSync(int fd); -NX_Error NX_VfsFileChmod(int fd, NX_U32 mode); -NX_Error NX_VfsFileStat(int fd, NX_VfsStatInfo * st); -int NX_VfsOpenDir(const char * name, NX_Error *outErr); -NX_Error NX_VfsCloseDir(int fd); -NX_Error NX_VfsReadDir(int fd, NX_VfsDirent * dir); -NX_Error NX_VfsRewindDir(int fd); -NX_Error NX_VfsMakeDir(const char * path, NX_U32 mode); -NX_Error NX_VfsRemoveDir(const char * path); -NX_Error NX_VfsRename(const char * src, const char * dst); -NX_Error NX_VfsUnlink(const char * path); -NX_Error NX_VfsAccess(const char * path, NX_U32 mode); -NX_Error NX_VfsChmod(const char * path, NX_U32 mode); -NX_Error NX_VfsStat(const char * path, NX_VfsStatInfo * st); - -#endif /* __FS_VFS__ */ diff --git a/src/init/init.c b/src/init/init.c index 0a8e5aa80bb23a4ae222199502e81a137c1e1159..75ee5d4e74406a2e368c5d9378edb7eec935f49a 100644 --- a/src/init/init.c +++ b/src/init/init.c @@ -46,7 +46,7 @@ NX_PRIVATE void CallsEntry(void *arg) #ifdef CONFIG_NX_ENABLE_MOUNT_TABLE { - NX_Error err = NX_VfsMountFileSystem(CONFIG_NX_MOUNT_DEVICE_DEFAULT, CONFIG_NX_MOUNT_PATH_DEFAULT, CONFIG_NX_MOUNT_FSNAME_DEFAULT, 0); + NX_Error err = NX_FileSystemMount(CONFIG_NX_MOUNT_DEVICE_DEFAULT, CONFIG_NX_MOUNT_PATH_DEFAULT, CONFIG_NX_MOUNT_FSNAME_DEFAULT, 0); NX_LOG_I("---------------- Mount file system begin ----------------"); if (err != NX_EOK) { @@ -60,7 +60,7 @@ NX_PRIVATE void CallsEntry(void *arg) } #ifdef CONFIG_NX_FS_DEVFS - err = NX_VfsMountFileSystem(NX_NULL, CONFIG_NX_DEVFS_PATH_DEFAULT, CONFIG_NX_DEVFS_FSNAME_DEFAULT, 0); + err = NX_FileSystemMount(NX_NULL, CONFIG_NX_DEVFS_PATH_DEFAULT, CONFIG_NX_DEVFS_FSNAME_DEFAULT, 0); if (err != NX_EOK) { NX_LOG_W("mount (null) dev on path:%s as fs:%s with state %d/%s", CONFIG_NX_DEVFS_PATH_DEFAULT, CONFIG_NX_DEVFS_FSNAME_DEFAULT, err, NX_ErrorToString(err)); diff --git a/src/platform/d1 b/src/platform/d1 index 3e7eed4e77036f7e014c1c7e6517f69fde64ac78..debbfef0dde94f29e15e4eb7fb57f8cc8d62e862 160000 --- a/src/platform/d1 +++ b/src/platform/d1 @@ -1 +1 @@ -Subproject commit 3e7eed4e77036f7e014c1c7e6517f69fde64ac78 +Subproject commit debbfef0dde94f29e15e4eb7fb57f8cc8d62e862 diff --git a/src/platform/hifive_unmached b/src/platform/hifive_unmached index 82285d5e0c38761a612d184dcde7db1aa197963a..8217e275f5825c0b36e631c4f6aaa0b33fcbcbfb 160000 --- a/src/platform/hifive_unmached +++ b/src/platform/hifive_unmached @@ -1 +1 @@ -Subproject commit 82285d5e0c38761a612d184dcde7db1aa197963a +Subproject commit 8217e275f5825c0b36e631c4f6aaa0b33fcbcbfb diff --git a/src/platform/i386 b/src/platform/i386 index d6259ac64f051ff1d3f80682b99a641ef7813d32..2849be41d9880cce200e986a20dac90951761a99 160000 --- a/src/platform/i386 +++ b/src/platform/i386 @@ -1 +1 @@ -Subproject commit d6259ac64f051ff1d3f80682b99a641ef7813d32 +Subproject commit 2849be41d9880cce200e986a20dac90951761a99 diff --git a/src/platform/k210 b/src/platform/k210 index 85c438409c92bca03206fc34239b1cc2a867b28b..a02b1237e93ff7de32c38e9f5ef78fb64b29359d 160000 --- a/src/platform/k210 +++ b/src/platform/k210 @@ -1 +1 @@ -Subproject commit 85c438409c92bca03206fc34239b1cc2a867b28b +Subproject commit a02b1237e93ff7de32c38e9f5ef78fb64b29359d diff --git a/src/platform/qemu_riscv64 b/src/platform/qemu_riscv64 index fbfae3dacd39186f2cb09136e7d6c02e60921861..5c63c2f212a425caeeeac7e73f645376cdb83cf4 160000 --- a/src/platform/qemu_riscv64 +++ b/src/platform/qemu_riscv64 @@ -1 +1 @@ -Subproject commit fbfae3dacd39186f2cb09136e7d6c02e60921861 +Subproject commit 5c63c2f212a425caeeeac7e73f645376cdb83cf4 diff --git a/src/process/process.c b/src/process/process.c index aa84264b2f8c602a353cf563753683889e9fd666..9a7a83cf79821db0861b7bf22ee70c2170548ba9 100644 --- a/src/process/process.c +++ b/src/process/process.c @@ -26,7 +26,7 @@ #include #include -#include +#include #include #include #include @@ -68,7 +68,7 @@ NX_PRIVATE NX_Process *NX_ProcessCreateObject(NX_U32 flags) return NX_NULL; } - NX_VfsFileTable *ft = NX_MemAlloc(sizeof(NX_VfsFileTable)); + NX_FileTable *ft = NX_MemAlloc(sizeof(NX_FileTable)); if (ft == NX_NULL) { NX_MemFree(process); @@ -107,7 +107,7 @@ NX_PRIVATE NX_Process *NX_ProcessCreateObject(NX_U32 flags) return NX_NULL; } - NX_VfsFileTableInit(ft); + NX_FileTableInit(ft); process->fileTable = ft; process->flags = flags; @@ -199,12 +199,12 @@ NX_PRIVATE NX_Error NX_LoadCheck(char *path, int fd, NX_Size len, NX_Vmspace *sp } /* check elf magic */ - if (NX_VfsFileSeek(fd, 0, NX_VFS_SEEK_SET, NX_NULL) != 0) + if (NX_FileSetPointer(fd, 0, NX_FILE_SEEK_SET, NX_NULL) != 0) { return NX_EFAULT; } - if (NX_VfsRead(fd, elfMagic, sizeof(elfMagic), NX_NULL) != sizeof(elfMagic)) + if (NX_FileRead(fd, elfMagic, sizeof(elfMagic), NX_NULL) != sizeof(elfMagic)) { return NX_EIO; } @@ -217,11 +217,11 @@ NX_PRIVATE NX_Error NX_LoadCheck(char *path, int fd, NX_Size len, NX_Vmspace *sp } /* load header */ - if (NX_VfsFileSeek(fd, 0, NX_VFS_SEEK_SET, NX_NULL) != 0) + if (NX_FileSetPointer(fd, 0, NX_FILE_SEEK_SET, NX_NULL) != 0) { return NX_EFAULT; } - if (NX_VfsRead(fd, elfHeader, sizeof(Elf_Ehdr), NX_NULL) != sizeof(Elf_Ehdr)) + if (NX_FileRead(fd, elfHeader, sizeof(Elf_Ehdr), NX_NULL) != sizeof(Elf_Ehdr)) { return NX_EIO; } @@ -282,11 +282,11 @@ NX_PRIVATE NX_Error NX_LoadMapUserSpace(int fd, NX_Size len, NX_Vmspace *space, return NX_EFAULT; } - if (NX_VfsFileSeek(fd, off, NX_VFS_SEEK_SET, NX_NULL) != off) + if (NX_FileSetPointer(fd, off, NX_FILE_SEEK_SET, NX_NULL) != off) { return NX_EFAULT; } - if (NX_VfsRead(fd, &progHeader, sizeof(progHeader), NX_NULL) != sizeof(progHeader)) + if (NX_FileRead(fd, &progHeader, sizeof(progHeader), NX_NULL) != sizeof(progHeader)) { return NX_EIO; } @@ -337,11 +337,11 @@ NX_PRIVATE NX_Error NX_LoadFileData(int fd, NX_Size len, NX_Vmspace *space, Elf_ } /* read program header */ - if (NX_VfsFileSeek(fd, progOff, NX_VFS_SEEK_SET, NX_NULL) != progOff) + if (NX_FileSetPointer(fd, progOff, NX_FILE_SEEK_SET, NX_NULL) != progOff) { return NX_EFAULT; } - if (NX_VfsRead(fd, &progHeader, sizeof(progHeader), NX_NULL) != sizeof(progHeader)) + if (NX_FileRead(fd, &progHeader, sizeof(progHeader), NX_NULL) != sizeof(progHeader)) { return NX_EIO; } @@ -360,7 +360,7 @@ NX_PRIVATE NX_Error NX_LoadFileData(int fd, NX_Size len, NX_Vmspace *space, Elf_ return NX_ERROR; } - if (NX_VfsFileSeek(fd, progHeader.p_offset, NX_VFS_SEEK_SET, NX_NULL) != progHeader.p_offset) + if (NX_FileSetPointer(fd, progHeader.p_offset, NX_FILE_SEEK_SET, NX_NULL) != progHeader.p_offset) { return NX_EIO; } @@ -377,7 +377,7 @@ NX_PRIVATE NX_Error NX_LoadFileData(int fd, NX_Size len, NX_Vmspace *space, Elf_ chunk = (size < NX_PAGE_SIZE) ? size : NX_PAGE_SIZE; - if (NX_VfsRead(fd, (void *)vaddrSelf, chunk, NX_NULL) != chunk) + if (NX_FileRead(fd, (void *)vaddrSelf, chunk, NX_NULL) != chunk) { return NX_EIO; } @@ -473,25 +473,25 @@ NX_PRIVATE NX_Error NX_ProcessLoadImage(NX_Process *process, char *path) NX_Size imageMaxSize; NX_Vmspace *space; - fd = NX_VfsOpen(path, NX_VFS_O_RDONLY, 0, &err); + fd = NX_FileOpen(path, NX_FILE_RDONLY, 0, &err); if (fd < NX_EOK) { NX_LOG_E("process open file %s failed ! with error %s", path, NX_ErrorToString(err)); return NX_ENOSRCH; } - len = NX_VfsFileSeek(fd, 0, NX_VFS_SEEK_END, &err); + len = NX_FileSetPointer(fd, 0, NX_FILE_SEEK_END, &err); if (!len || err != NX_EOK) { NX_LOG_E("file %s too small !", path); - NX_VfsClose(fd); + NX_FileClose(fd); return NX_ENOSRCH; } - if (NX_VfsFileSeek(fd, 0, NX_VFS_SEEK_SET, NX_NULL) != 0) + if (NX_FileSetPointer(fd, 0, NX_FILE_SEEK_SET, NX_NULL) != 0) { NX_LOG_E("seek file %s failed !", path); - NX_VfsClose(fd); + NX_FileClose(fd); return NX_ENOSRCH; } @@ -502,7 +502,7 @@ NX_PRIVATE NX_Error NX_ProcessLoadImage(NX_Process *process, char *path) if (len > imageMaxSize) { NX_LOG_E("image too large %p than %p !", len, imageMaxSize); - NX_VfsClose(fd); + NX_FileClose(fd); return NX_EFAULT; } @@ -510,12 +510,12 @@ NX_PRIVATE NX_Error NX_ProcessLoadImage(NX_Process *process, char *path) if (err != NX_EOK) { NX_LOG_E("load elf %s failed with err %d!", path, err); - NX_VfsClose(fd); + NX_FileClose(fd); return err; } /* close file */ - NX_ASSERT(NX_VfsClose(fd) == 0); + NX_ASSERT(NX_FileClose(fd) == 0); return NX_EOK; } @@ -701,7 +701,7 @@ NX_PRIVATE NX_Error SearchInEnv(char * path, char * absPath, char *env) } /* abs path = env + / + path */ - NX_MemZero(absPath, NX_VFS_MAX_PATH); + NX_MemZero(absPath, NX_FILE_MAX_PATH); NX_StrCat(absPath, p); if (absPath[NX_StrLen(absPath) - 1] != '/') @@ -710,7 +710,7 @@ NX_PRIVATE NX_Error SearchInEnv(char * path, char * absPath, char *env) } NX_StrCat(absPath, path); - if (NX_VfsAccess(absPath, NX_VFS_R_OK) == NX_EOK) + if (NX_FileAccess(absPath, NX_FILE_READ_OK) == NX_EOK) { NX_MemFree(tmpEnv); return NX_EOK; @@ -731,7 +731,7 @@ NX_Error NX_ProcessLaunch(char *path, NX_U32 flags, NX_U32 *exitCode, char *cmd, NX_Vmspace *space; char *name; NX_Solt threadSolt = NX_SOLT_INVALID_VALUE; - char absPath[NX_VFS_MAX_PATH] = {0,}; + char absPath[NX_FILE_MAX_PATH] = {0,}; if (path == NX_NULL) { @@ -741,7 +741,7 @@ NX_Error NX_ProcessLaunch(char *path, NX_U32 flags, NX_U32 *exitCode, char *cmd, NX_CopyFromUser(absPath, path, NX_StrLen(path)); /* check path exist */ - if (NX_VfsAccess(absPath, NX_VFS_R_OK) != NX_EOK) + if (NX_FileAccess(absPath, NX_FILE_READ_OK) != NX_EOK) { if (*absPath == '/') /* abs path means no res */ { @@ -1001,35 +1001,35 @@ char * NX_ProcessGetCwd(NX_Process * process) NX_Error NX_ProcessSetCwd(NX_Process * process, const char * path) { NX_Error err; - NX_VfsStatInfo st; - char absPath[NX_VFS_MAX_PATH + 1] = {0}; + NX_FileStatInfo st; + char absPath[NX_FILE_MAX_PATH + 1] = {0}; if (!process || !path) { return NX_EINVAL; } - if (NX_StrLen(path) >= NX_VFS_MAX_PATH) + if (NX_StrLen(path) >= NX_FILE_MAX_PATH) { return NX_EINVAL; } - if ((err = NX_VfsBuildAbsPath(path, absPath)) != NX_EOK) + if ((err = NX_PathBuildAbs(path, absPath)) != NX_EOK) { return err; } - if (NX_VfsStat(absPath, &st) != NX_EOK) + if (NX_FileGetStatFromPath(absPath, &st) != NX_EOK) { return NX_ENOSRCH; } - if (!NX_VFS_S_ISDIR(st.mode)) /* not dir */ + if (!NX_FILE_IS_DIR(st.mode)) /* not dir */ { return NX_EPERM; } - NX_StrCopyN(process->cwd, absPath, NX_VFS_MAX_PATH); + NX_StrCopyN(process->cwd, absPath, NX_FILE_MAX_PATH); return NX_EOK; } diff --git a/src/process/syscall.c b/src/process/syscall.c index 0aa42b21616fc7495b024574251bd2a51d2dcdcc..dac38e9472f09f0d45bcee9f52baf05833bed394 100644 --- a/src/process/syscall.c +++ b/src/process/syscall.c @@ -16,7 +16,7 @@ #include #include #include -#include +#include #include #include #include @@ -64,122 +64,340 @@ NX_PRIVATE NX_Error SysProcessLaunch(char *path, NX_U32 flags, NX_U32 *outExitCo return err; } -NX_PRIVATE NX_Error SysVfsMount(const char * dev, const char * dir, const char * fsname, NX_U32 flags) +NX_PRIVATE NX_Error SysFileSystemMount(const char * dev, const char * dir, const char * fsname, NX_U32 flags) { - return NX_VfsMountFileSystem(dev, dir, fsname, flags); + return NX_FileSystemMount(dev, dir, fsname, flags); } -NX_PRIVATE NX_Error SysVfsUnmount(const char * path) +NX_PRIVATE NX_Error SysFileSystemUnmount(const char * path) { - return NX_VfsUnmountFileSystem(path); + return NX_FileSystemUnmount(path); } -NX_PRIVATE NX_Error SysVfsSync(void) +NX_PRIVATE NX_Error SysFileSystemSync(void) { - return NX_VfsSync(); + return NX_FileSystemSync(); } -NX_PRIVATE int SysVfsOpen(const char * path, NX_U32 flags, NX_U32 mode, NX_Error *outErr) +NX_PRIVATE NX_Error SoltToFile(NX_Solt solt, int * fd) { - return NX_VfsOpen(path, flags, mode, outErr); + NX_Process * process; + NX_ExposedObject * exobj; + + if (solt == NX_SOLT_INVALID_VALUE) + { + return NX_EINVAL; + } + + process = NX_ProcessCurrent(); + if ((exobj = NX_ProcessGetSolt(process, solt)) == NX_NULL) + { + return NX_ENOSRCH; + } + + if (exobj->type != NX_EXOBJ_FILE) + { + return NX_ENORES; + } + + *fd = (int)exobj->object; + NX_ASSERT(*fd); + + return NX_EOK; } -NX_PRIVATE NX_Error SysVfsClose(int fd) +NX_PRIVATE NX_Error FileCloseSolt(void * object, NX_ExposedObjectType type) { - return NX_VfsClose(fd); + int fd; + + if (type != NX_EXOBJ_FILE) + { + return NX_ENORES; + } + + fd = (int) object; + NX_ASSERT(fd); + + return NX_FileClose(fd); } -/* NOTICE: To compate 32 bit cpu, syscall need use NX_Size not NX_U64 */ -NX_PRIVATE NX_Size SysVfsRead(int fd, void * buf, NX_Size len, NX_Error *outErr) +NX_PRIVATE NX_Error SysFileOpen(const char * path, NX_U32 flags, NX_U32 mode, NX_Solt * outSolt) { - return NX_VfsRead(fd, buf, len, outErr); + int fd; + NX_Error err = NX_EOK; + NX_Solt solt = NX_SOLT_INVALID_VALUE; + NX_Process * process; + + if (!path || !outSolt) + { + return NX_EINVAL; + } + + if ((fd = NX_FileOpen(path, flags, mode, &err)) < 0) + { + return err; + } + + process = NX_ProcessCurrent(); + if ((err = NX_ProcessInstallSolt(process, (void *)fd, NX_EXOBJ_FILE, FileCloseSolt, &solt)) != NX_EOK) + { + NX_FileClose(fd); + return err; + } + + NX_CopyToUser((char *)outSolt, (char *)&solt, sizeof(solt)); + + return NX_EOK; } -/* NOTICE: To compate 32 bit cpu, syscall need use NX_Size not NX_U64 */ -NX_PRIVATE NX_Size SysVfsWrite(int fd, void * buf, NX_Size len, NX_Error *outErr) +NX_PRIVATE NX_Error SysFileRead(NX_Solt solt, void * buf, NX_Size len, NX_Size *outLen) { - return NX_VfsWrite(fd, buf, len, outErr); + NX_Error err; + NX_Size size; + int fd = -1; + + err = SoltToFile(solt, &fd); + if (err != NX_EOK) + { + return err; + } + + size = NX_FileRead(fd, buf, len, &err); + if (err != NX_EOK) + { + return err; + } + + NX_CopyToUser((char *)outLen, (char *)&size, sizeof(size)); + + return NX_EOK; } -NX_Error SysVfsIoctl(int fd, NX_U32 cmd, void *arg) +NX_PRIVATE NX_Error SysFileWrite(NX_Solt solt, void * buf, NX_Size len, NX_Size *outLen) { - return NX_VfsIoctl(fd, cmd, arg); + NX_Error err; + NX_Size size; + int fd = -1; + + err = SoltToFile(solt, &fd); + if (err != NX_EOK) + { + return err; + } + + size = NX_FileWrite(fd, buf, len, &err); + if (err != NX_EOK) + { + return err; + } + + NX_CopyToUser((char *)outLen, (char *)&size, sizeof(size)); + + return NX_EOK; } -/* NOTICE: To compate 32 bit cpu, syscall need use NX_Offset not NX_I64 */ -NX_PRIVATE NX_Offset SysVfsFileSeek(int fd, NX_Offset off, int whence, NX_Error *outErr) +NX_Error SysFileIoctl(NX_Solt solt, NX_U32 cmd, void *arg) { - return NX_VfsFileSeek(fd, off, whence, outErr); + NX_Error err; + int fd = -1; + + err = SoltToFile(solt, &fd); + if (err != NX_EOK) + { + return err; + } + + return NX_FileIoctl(fd, cmd, arg); } -NX_PRIVATE NX_Error SysVfsFileSync(int fd) +NX_PRIVATE NX_Offset SysFileSetPointer(NX_Solt solt, NX_Offset off, int whence, NX_Error *outErr) { - return NX_VfsFileSync(fd); + NX_Error err; + int fd = -1; + + err = SoltToFile(solt, &fd); + if (err != NX_EOK) + { + return err; + } + + return NX_FileSetPointer(fd, off, whence, outErr); } -NX_PRIVATE NX_Error SysVfsFileChmod(int fd, NX_U32 mode) +NX_PRIVATE NX_Error SysFileSync(NX_Solt solt) { - return NX_VfsFileChmod(fd, mode); + NX_Error err; + int fd = -1; + + err = SoltToFile(solt, &fd); + if (err != NX_EOK) + { + return err; + } + + return NX_FileSync(fd); +} + +NX_PRIVATE NX_Error SysFileSetMode(NX_Solt solt, NX_U32 mode) +{ + NX_Error err; + int fd = -1; + + err = SoltToFile(solt, &fd); + if (err != NX_EOK) + { + return err; + } + + return NX_FileSetMode(fd, mode); } -NX_PRIVATE NX_Error SysVfsFileStat(int fd, NX_VfsStatInfo * st) +NX_PRIVATE NX_Error SysFileGetStat(NX_Solt solt, NX_FileStatInfo * st) { - return NX_VfsFileStat(fd, st); + NX_Error err; + int fd = -1; + + err = SoltToFile(solt, &fd); + if (err != NX_EOK) + { + return err; + } + + return NX_FileGetStat(fd, st); } -NX_PRIVATE int SysVfsOpenDir(const char * name, NX_Error *outErr) +NX_PRIVATE NX_Error SoltToDir(NX_Solt solt, int * fd) { - return NX_VfsOpenDir(name, outErr); + NX_Process * process; + NX_ExposedObject * exobj; + + if (solt == NX_SOLT_INVALID_VALUE) + { + return NX_EINVAL; + } + + process = NX_ProcessCurrent(); + if ((exobj = NX_ProcessGetSolt(process, solt)) == NX_NULL) + { + return NX_ENOSRCH; + } + + if (exobj->type != NX_EXOBJ_DIR) + { + return NX_ENORES; + } + + *fd = (int)exobj->object; + NX_ASSERT(*fd); + + return NX_EOK; } -NX_PRIVATE NX_Error SysVfsCloseDir(int fd) +NX_PRIVATE NX_Error DirCloseSolt(void * object, NX_ExposedObjectType type) { - return NX_VfsCloseDir(fd); + int fd; + + if (type != NX_EXOBJ_DIR) + { + return NX_ENORES; + } + + fd = (int) object; + NX_ASSERT(fd); + + return NX_DirClose(fd); } + +NX_PRIVATE NX_Error SysDirOpen(const char * path, NX_Solt * outSolt) +{ + int fd; + NX_Error err = NX_EOK; + NX_Solt solt = NX_SOLT_INVALID_VALUE; + NX_Process * process; + + if (!path || !outSolt) + { + return NX_EINVAL; + } -NX_PRIVATE NX_Error SysVfsReadDir(int fd, NX_VfsDirent * dir) + if ((fd = NX_DirOpen(path, &err)) < 0) + { + return err; + } + + process = NX_ProcessCurrent(); + if ((err = NX_ProcessInstallSolt(process, (void *)fd, NX_EXOBJ_DIR, DirCloseSolt, &solt)) != NX_EOK) + { + NX_DirClose(fd); + return err; + } + + NX_CopyToUser((char *)outSolt, (char *)&solt, sizeof(solt)); + + return NX_EOK; +} + +NX_PRIVATE NX_Error SysDirRead(NX_Solt solt, NX_Dirent * dir) { - return NX_VfsReadDir(fd, dir); + NX_Error err; + int fd = -1; + + err = SoltToDir(solt, &fd); + if (err != NX_EOK) + { + return err; + } + + return NX_DirRead(fd, dir); } -NX_PRIVATE NX_Error SysVfsRewindDir(int fd) +NX_PRIVATE NX_Error SysDirResetPointer(NX_Solt solt) { - return NX_VfsRewindDir(fd); + NX_Error err; + int fd = -1; + + err = SoltToDir(solt, &fd); + if (err != NX_EOK) + { + return err; + } + + return NX_DirResetPointer(fd); } -NX_PRIVATE NX_Error SysVfsMakeDir(const char * path, NX_U32 mode) +NX_PRIVATE NX_Error SysDirCreate(const char * path, NX_U32 mode) { - return NX_VfsMakeDir(path, mode); + return NX_DirCreate(path, mode); } -NX_PRIVATE NX_Error SysVfsRemoveDir(const char * path) +NX_PRIVATE NX_Error SysDirDelete(const char * path) { - return NX_VfsRemoveDir(path); + return NX_DirDelete(path); } -NX_PRIVATE NX_Error SysVfsRename(const char * src, const char * dst) +NX_PRIVATE NX_Error SysFileRename(const char * src, const char * dst) { - return NX_VfsRename(src, dst); + return NX_FileRename(src, dst); } -NX_PRIVATE NX_Error SysVfsUnlink(const char * path) +NX_PRIVATE NX_Error SysFileDelete(const char * path) { - return NX_VfsUnlink(path); + return NX_FileDelete(path); } -NX_PRIVATE NX_Error SysVfsAccess(const char * path, NX_U32 mode) +NX_PRIVATE NX_Error SysFileAccess(const char * path, NX_U32 mode) { - return NX_VfsAccess(path, mode); + return NX_FileAccess(path, mode); } -NX_PRIVATE NX_Error SysVfsChmod(const char * path, NX_U32 mode) +NX_PRIVATE NX_Error SysFileSetModeToPath(const char * path, NX_U32 mode) { - return NX_VfsChmod(path, mode); + return NX_FileSetModeToPath(path, mode); } -NX_PRIVATE NX_Error SysVfsStat(const char * path, NX_VfsStatInfo * st) +NX_PRIVATE NX_Error SysFileGetStatFromPath(const char * path, NX_FileStatInfo * st) { - return NX_VfsStat(path, st); + return NX_FileGetStatFromPath(path, st); } NX_PRIVATE NX_Error HubCloseSolt(void * object, NX_ExposedObjectType type) @@ -1884,28 +2102,28 @@ NX_PRIVATE const NX_SyscallHandler NX_SyscallTable[] = SysDebugLog, /* 1 */ SysProcessExit, SysProcessLaunch, - SysVfsMount, - SysVfsUnmount, /* 5 */ - SysVfsSync, - SysVfsOpen, - SysVfsClose, - SysVfsRead, - SysVfsWrite, /* 10 */ - SysVfsFileSeek, - SysVfsFileSync, - SysVfsFileChmod, - SysVfsFileStat, - SysVfsOpenDir, /* 15 */ - SysVfsCloseDir, - SysVfsReadDir, - SysVfsRewindDir, - SysVfsMakeDir, - SysVfsRemoveDir, /* 20 */ - SysVfsRename, - SysVfsUnlink, - SysVfsAccess, - SysVfsChmod, - SysVfsStat, /* 25 */ + SysFileSystemMount, + SysFileSystemUnmount, /* 5 */ + SysFileSystemSync, + SysFileOpen, + SysInvalidCall, /* !removed */ + SysFileRead, + SysFileWrite, /* 10 */ + SysFileSetPointer, + SysFileSync, + SysFileSetMode, + SysFileGetStat, + SysDirOpen, /* 15 */ + SysInvalidCall, /* !removed */ + SysDirRead, + SysDirResetPointer, + SysDirCreate, + SysDirDelete, /* 20 */ + SysFileRename, + SysFileDelete, + SysFileAccess, + SysFileSetModeToPath, + SysFileGetStatFromPath, /* 25 */ SysHubRegister, SysHubUnregister, SysInvalidCall, /* !removed */ @@ -1913,7 +2131,7 @@ NX_PRIVATE const NX_SyscallHandler NX_SyscallTable[] = SysHubReturn, /* 30 */ SysHubWait, SysHubTranslate, - SysVfsIoctl, + SysFileIoctl, SysMemMap, SysMemUnmap, /* 35 */ SysMemHeap, @@ -1965,7 +2183,7 @@ NX_PRIVATE const NX_SyscallHandler NX_SyscallTable[] = SysDriverRegister, SysThreadYield, SysPollWait, - SysShareMemOpen, /* 85 */ + SysShareMemOpen, /* 85 */ SysShareMemMap, }; diff --git a/src/sched/thread.c b/src/sched/thread.c index 6b424c9756b4cb9f51b75cd236ad20d0613ff575..fb37091cdd0daec733e9101496aef75b41e720c4 100644 --- a/src/sched/thread.c +++ b/src/sched/thread.c @@ -77,7 +77,7 @@ NX_PRIVATE NX_Error ThreadInit(NX_Thread *thread, thread->resource.sleepTimer = NX_NULL; thread->resource.process = NX_NULL; - thread->resource.fileTable = NX_VfsGetDefaultFileTable(); + thread->resource.fileTable = NX_FileTableGetDefault(); thread->resource.hub = NX_NULL; thread->resource.activeChannel = NX_NULL; thread->resource.exitCode = 0;