]> Chaos Git - corbenik/ctrulib.git/commitdiff
check for directory in stat too and set st_mode appropriately
authorDave Murphy <davem@devkitpro.org>
Tue, 30 Dec 2014 20:39:49 +0000 (20:39 +0000)
committerDave Murphy <davem@devkitpro.org>
Tue, 30 Dec 2014 20:39:49 +0000 (20:39 +0000)
libctru/source/sdmc_dev.c

index 5ec6cd24c77f21cf789cb31ba5c02452a9c9ad4e..d02c96299f2338504c59ac5ee1c113f24ca4422a 100644 (file)
@@ -181,7 +181,7 @@ Result sdmcExit(void)
     RemoveDevice("sdmc");
 
   sdmcInitialised = false;
-  
+
   return rc;
 }
 
@@ -530,7 +530,6 @@ sdmc_stat(struct _reent *r,
   Handle fd;
   Result rc;
   const char  *pathptr = NULL;
-  u64 tmpsize = 0;
 
   pathptr = sdmc_fixpath(file);
 
@@ -540,11 +539,10 @@ sdmc_stat(struct _reent *r,
     return -1;
   }
 
-  rc = FSUSER_OpenFile(NULL, &fd, sdmcArchive, FS_makePath(PATH_CHAR, pathptr),
-                       FS_OPEN_READ, FS_ATTRIBUTE_NONE);
-
-  if(rc==0)
+  if( (rc = FSUSER_OpenFile(NULL, &fd, sdmcArchive, FS_makePath(PATH_CHAR, pathptr),
+                       FS_OPEN_READ, FS_ATTRIBUTE_NONE))==0)
   {
+    u64 tmpsize = 0;
     rc = FSFILE_GetSize(fd, &tmpsize);
 
     FSFILE_Close(fd);
@@ -553,12 +551,24 @@ sdmc_stat(struct _reent *r,
     {
       memset(st, 0, sizeof(struct stat));
       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 = rc;
+  r->_errno = EBADF;
   return -1;
 }