mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
fix stat for romfs directories
This commit is contained in:
parent
573e2f772c
commit
db795f42ad
@ -560,9 +560,6 @@ static int navigateToDir(romfs_mount *mount, romfs_dir** ppDir, const char** pPa
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!isDir && !**pPath)
|
||||
return EILSEQ;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -721,17 +718,35 @@ off_t romfs_seek(struct _reent *r, void *fd, off_t pos, int dir)
|
||||
return file->pos;
|
||||
}
|
||||
|
||||
int romfs_fstat(struct _reent *r, void *fd, struct stat *st)
|
||||
static void fillDir(struct stat *st, romfs_mount *mount, romfs_dir *dir)
|
||||
{
|
||||
romfs_fileobj* file = (romfs_fileobj*)fd;
|
||||
memset(st, 0, sizeof(struct stat));
|
||||
st->st_ino = file_inode(file->mount, file->file);
|
||||
st->st_mode = romFS_file_mode;
|
||||
st->st_nlink = 1;
|
||||
st->st_size = (off_t)file->file->dataSize;
|
||||
memset(st, 0, sizeof(*st));
|
||||
st->st_ino = dir_inode(mount, dir);
|
||||
st->st_mode = romFS_dir_mode;
|
||||
st->st_nlink = dir_nlink(mount, dir);
|
||||
st->st_size = dir_size(dir);
|
||||
st->st_blksize = 512;
|
||||
st->st_blocks = (st->st_blksize + 511) / 512;
|
||||
st->st_atime = st->st_mtime = st->st_ctime = file->mount->mtime;
|
||||
st->st_atime = st->st_mtime = st->st_ctime = mount->mtime;
|
||||
}
|
||||
|
||||
static void fillFile (struct stat *st, romfs_mount *mount, romfs_file *file)
|
||||
{
|
||||
memset(st, 0, sizeof(struct stat));
|
||||
st->st_ino = file_inode(mount, file);
|
||||
st->st_mode = romFS_file_mode;
|
||||
st->st_nlink = 1;
|
||||
st->st_size = (off_t)file->dataSize;
|
||||
st->st_blksize = 512;
|
||||
st->st_blocks = (st->st_blksize + 511) / 512;
|
||||
st->st_atime = st->st_mtime = st->st_ctime = mount->mtime;
|
||||
|
||||
}
|
||||
|
||||
int romfs_fstat(struct _reent *r, void *fd, struct stat *st)
|
||||
{
|
||||
romfs_fileobj* fileobj = (romfs_fileobj*)fd;
|
||||
fillFile(st, fileobj->mount, fileobj->file);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -744,6 +759,12 @@ int romfs_stat(struct _reent *r, const char *path, struct stat *st)
|
||||
if(r->_errno != 0)
|
||||
return -1;
|
||||
|
||||
if(!*path)
|
||||
{
|
||||
fillDir(st,mount,curDir);
|
||||
return 0;
|
||||
}
|
||||
|
||||
romfs_dir* dir = NULL;
|
||||
int ret=0;
|
||||
ret = searchForDir(mount, curDir, (uint8_t*)path, strlen(path), &dir);
|
||||
@ -754,14 +775,7 @@ int romfs_stat(struct _reent *r, const char *path, struct stat *st)
|
||||
}
|
||||
if(ret == 0)
|
||||
{
|
||||
memset(st, 0, sizeof(*st));
|
||||
st->st_ino = dir_inode(mount, dir);
|
||||
st->st_mode = romFS_dir_mode;
|
||||
st->st_nlink = dir_nlink(mount, dir);
|
||||
st->st_size = dir_size(dir);
|
||||
st->st_blksize = 512;
|
||||
st->st_blocks = (st->st_blksize + 511) / 512;
|
||||
st->st_atime = st->st_mtime = st->st_ctime = mount->mtime;
|
||||
fillDir(st,mount,dir);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -775,15 +789,7 @@ int romfs_stat(struct _reent *r, const char *path, struct stat *st)
|
||||
}
|
||||
if(ret == 0)
|
||||
{
|
||||
memset(st, 0, sizeof(*st));
|
||||
st->st_ino = file_inode(mount, file);
|
||||
st->st_mode = romFS_file_mode;
|
||||
st->st_nlink = 1;
|
||||
st->st_size = file->dataSize;
|
||||
st->st_blksize = 512;
|
||||
st->st_blocks = (st->st_blksize + 511) / 512;
|
||||
st->st_atime = st->st_mtime = st->st_ctime = mount->mtime;
|
||||
|
||||
fillFile(st,mount,file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user