check for directory in stat too and set st_mode appropriately
This commit is contained in:
parent
c1d8df8b68
commit
c68afb5f31
@ -181,7 +181,7 @@ Result sdmcExit(void)
|
|||||||
RemoveDevice("sdmc");
|
RemoveDevice("sdmc");
|
||||||
|
|
||||||
sdmcInitialised = false;
|
sdmcInitialised = false;
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -530,7 +530,6 @@ sdmc_stat(struct _reent *r,
|
|||||||
Handle fd;
|
Handle fd;
|
||||||
Result rc;
|
Result rc;
|
||||||
const char *pathptr = NULL;
|
const char *pathptr = NULL;
|
||||||
u64 tmpsize = 0;
|
|
||||||
|
|
||||||
pathptr = sdmc_fixpath(file);
|
pathptr = sdmc_fixpath(file);
|
||||||
|
|
||||||
@ -540,11 +539,10 @@ sdmc_stat(struct _reent *r,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = FSUSER_OpenFile(NULL, &fd, sdmcArchive, FS_makePath(PATH_CHAR, pathptr),
|
if( (rc = FSUSER_OpenFile(NULL, &fd, sdmcArchive, FS_makePath(PATH_CHAR, pathptr),
|
||||||
FS_OPEN_READ, FS_ATTRIBUTE_NONE);
|
FS_OPEN_READ, FS_ATTRIBUTE_NONE))==0)
|
||||||
|
|
||||||
if(rc==0)
|
|
||||||
{
|
{
|
||||||
|
u64 tmpsize = 0;
|
||||||
rc = FSFILE_GetSize(fd, &tmpsize);
|
rc = FSFILE_GetSize(fd, &tmpsize);
|
||||||
|
|
||||||
FSFILE_Close(fd);
|
FSFILE_Close(fd);
|
||||||
@ -553,12 +551,24 @@ sdmc_stat(struct _reent *r,
|
|||||||
{
|
{
|
||||||
memset(st, 0, sizeof(struct stat));
|
memset(st, 0, sizeof(struct stat));
|
||||||
st->st_size = (off_t)tmpsize;
|
st->st_size = (off_t)tmpsize;
|
||||||
|
st->st_nlink = 1;
|
||||||
|
st->st_uid = 1;
|
||||||
|
st->st_gid = 2;
|
||||||
|
st->st_mode = S_IFREG | S_IWUSR | S_IWGRP | S_IWOTH | S_IRUSR | S_IRGRP | S_IROTH;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if( (rc = FSUSER_OpenDirectory(NULL, &fd, sdmcArchive, FS_makePath(PATH_CHAR, pathptr))) == 0 )
|
||||||
|
{
|
||||||
|
memset(st, 0, sizeof(struct stat));
|
||||||
|
st->st_nlink = 1;
|
||||||
|
st->st_uid = 1;
|
||||||
|
st->st_gid = 2;
|
||||||
|
st->st_mode = S_IFDIR | S_IWUSR | S_IWGRP | S_IWOTH | S_IRUSR | S_IRGRP | S_IROTH;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(rc==0)return 0;
|
r->_errno = EBADF;
|
||||||
|
|
||||||
r->_errno = rc;
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user