Re: [U-Boot] [PATCH v2 5/8] fs/fat: implement opendir/readdir/closedir

2017-09-05 Thread Simon Glass
On 3 September 2017 at 00:38, Rob Clark  wrote:
> Implement the readdir interface using the directory iterators.
>
> Signed-off-by: Rob Clark 
> ---
>  fs/fat/fat.c | 56 
>  1 file changed, 56 insertions(+)
>
> diff --git a/fs/fat/fat.c b/fs/fat/fat.c
> index 3193290434..d30ef3903b 100644
> --- a/fs/fat/fat.c
> +++ b/fs/fat/fat.c
> @@ -14,6 +14,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  #include 
>  #include 
>  #include 
> @@ -1119,6 +1120,61 @@ int fat_read_file(const char *filename, void *buf, 
> loff_t offset, loff_t len,
> return ret;
>  }
>
> +typedef struct {
> +   FS_DIR parent;
> +   fsdata fsdata;
> +   fat_itr itr;
> +} fat_dir;
> +

Please drop the typedef.

This is a really nice implementation now.
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


Re: [U-Boot] [PATCH v2 5/8] fs/fat: implement opendir/readdir/closedir

2017-09-03 Thread Łukasz Majewski

On 09/02/2017 06:38 PM, Rob Clark wrote:

Implement the readdir interface using the directory iterators.



Reviewed-by: Łukasz Majewski 


Signed-off-by: Rob Clark 
---
  fs/fat/fat.c | 56 
  1 file changed, 56 insertions(+)

diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index 3193290434..d30ef3903b 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -14,6 +14,7 @@
  #include 
  #include 
  #include 
+#include 
  #include 
  #include 
  #include 
@@ -1119,6 +1120,61 @@ int fat_read_file(const char *filename, void *buf, 
loff_t offset, loff_t len,
return ret;
  }
  
+typedef struct {

+   FS_DIR parent;
+   fsdata fsdata;
+   fat_itr itr;
+} fat_dir;
+
+int fat_opendir(const char *filename, FS_DIR **dirp)
+{
+   fat_dir *dir = malloc(sizeof(*dir));
+   int ret;
+
+   if (!dir)
+   return -ENOMEM;
+
+   ret = fat_itr_root(>itr, >fsdata);
+   if (ret)
+   goto fail;
+
+   ret = fat_itr_resolve(>itr, filename, TYPE_DIR);
+   if (ret)
+   goto fail;
+
+   *dirp = (FS_DIR *)dir;
+   return 0;
+
+fail:
+   free(dir);
+   return ret;
+}
+
+int fat_readdir(FS_DIR *dirp)
+{
+   fat_dir *dir = (fat_dir *)dirp;
+   struct fs_dirent *dent = >dirent;
+
+   if (!fat_itr_next(>itr))
+   return -ENOENT;
+
+   strcpy(dent->name, dir->itr.name);
+   if (fat_itr_isdir(>itr)) {
+   dent->type = FS_DT_DIR;
+   } else {
+   dent->type = FS_DT_REG;
+   dent->size = FAT2CPU32(dir->itr.dent->size);
+   }
+
+   return 0;
+}
+
+void fat_closedir(FS_DIR *dirp)
+{
+   fat_dir *dir = (fat_dir *)dirp;
+   free(dir);
+}
+
  void fat_close(void)
  {
  }




--
Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,  Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


[U-Boot] [PATCH v2 5/8] fs/fat: implement opendir/readdir/closedir

2017-09-02 Thread Rob Clark
Implement the readdir interface using the directory iterators.

Signed-off-by: Rob Clark 
---
 fs/fat/fat.c | 56 
 1 file changed, 56 insertions(+)

diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index 3193290434..d30ef3903b 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -14,6 +14,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -1119,6 +1120,61 @@ int fat_read_file(const char *filename, void *buf, 
loff_t offset, loff_t len,
return ret;
 }
 
+typedef struct {
+   FS_DIR parent;
+   fsdata fsdata;
+   fat_itr itr;
+} fat_dir;
+
+int fat_opendir(const char *filename, FS_DIR **dirp)
+{
+   fat_dir *dir = malloc(sizeof(*dir));
+   int ret;
+
+   if (!dir)
+   return -ENOMEM;
+
+   ret = fat_itr_root(>itr, >fsdata);
+   if (ret)
+   goto fail;
+
+   ret = fat_itr_resolve(>itr, filename, TYPE_DIR);
+   if (ret)
+   goto fail;
+
+   *dirp = (FS_DIR *)dir;
+   return 0;
+
+fail:
+   free(dir);
+   return ret;
+}
+
+int fat_readdir(FS_DIR *dirp)
+{
+   fat_dir *dir = (fat_dir *)dirp;
+   struct fs_dirent *dent = >dirent;
+
+   if (!fat_itr_next(>itr))
+   return -ENOENT;
+
+   strcpy(dent->name, dir->itr.name);
+   if (fat_itr_isdir(>itr)) {
+   dent->type = FS_DT_DIR;
+   } else {
+   dent->type = FS_DT_REG;
+   dent->size = FAT2CPU32(dir->itr.dent->size);
+   }
+
+   return 0;
+}
+
+void fat_closedir(FS_DIR *dirp)
+{
+   fat_dir *dir = (fat_dir *)dirp;
+   free(dir);
+}
+
 void fat_close(void)
 {
 }
-- 
2.13.5

___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


[U-Boot] [PATCH v2 5/8] fs/fat: implement opendir/readdir/closedir

2017-08-14 Thread Rob Clark
Implement the readdir interface using the directory iterators.

Signed-off-by: Rob Clark 
---
 fs/fat/fat.c | 56 
 1 file changed, 56 insertions(+)

diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index a50a10ba47..fe5819315b 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -14,6 +14,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -1119,6 +1120,61 @@ int fat_read_file(const char *filename, void *buf, 
loff_t offset, loff_t len,
return ret;
 }
 
+typedef struct {
+   FS_DIR parent;
+   fsdata fsdata;
+   fat_itr itr;
+} fat_dir;
+
+int fat_opendir(const char *filename, FS_DIR **dirp)
+{
+   fat_dir *dir = malloc(sizeof(*dir));
+   int ret;
+
+   if (!dir)
+   return -ENOMEM;
+
+   ret = fat_itr_root(>itr, >fsdata);
+   if (ret)
+   goto fail;
+
+   ret = fat_itr_resolve(>itr, filename, TYPE_DIR);
+   if (ret)
+   goto fail;
+
+   *dirp = (FS_DIR *)dir;
+   return 0;
+
+fail:
+   free(dir);
+   return ret;
+}
+
+int fat_readdir(FS_DIR *dirp)
+{
+   fat_dir *dir = (fat_dir *)dirp;
+   struct fs_dirent *dent = >dirent;
+
+   if (!fat_itr_next(>itr))
+   return -ENOENT;
+
+   strcpy(dent->name, dir->itr.name);
+   if (fat_itr_isdir(>itr)) {
+   dent->type = FS_DT_DIR;
+   } else {
+   dent->type = FS_DT_REG;
+   dent->size = FAT2CPU32(dir->itr.dent->size);
+   }
+
+   return 0;
+}
+
+void fat_closedir(FS_DIR *dirp)
+{
+   fat_dir *dir = (fat_dir *)dirp;
+   free(dir);
+}
+
 void fat_close(void)
 {
 }
-- 
2.13.0

___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot