Browse Source

Merge pull request #2203 from RT-Thread/fix_romfs

[DFS][romfs] fix the mkrom issue when file/dir size zero
Bernard Xiong 6 years ago
parent
commit
647852b04a
2 changed files with 21 additions and 8 deletions
  1. 6 5
      components/dfs/filesystems/romfs/dfs_romfs.h
  2. 15 3
      tools/mkromfs.py

+ 6 - 5
components/dfs/filesystems/romfs/dfs_romfs.h

@@ -1,10 +1,11 @@
 /*
- * Copyright (c) 2006-2018, RT-Thread Development Team
+ * Copyright (c) 2006-2019, RT-Thread Development Team
  *
  * SPDX-License-Identifier: Apache-2.0
  *
  * Change Logs:
  * Date           Author       Notes
+ * 2019/01/13     Bernard      code cleanup
  */
 
 #ifndef __DFS_ROMFS_H__
@@ -17,11 +18,11 @@
 
 struct romfs_dirent
 {
-	rt_uint32_t		 type;	/* dirent type */
+    rt_uint32_t      type;  /* dirent type */
 
-	const char		 *name;	/* dirent name */
-	const rt_uint8_t *data;	/* file date ptr */
-	rt_size_t		 size;	/* file size */
+    const char       *name; /* dirent name */
+    const rt_uint8_t *data; /* file date ptr */
+    rt_size_t        size;  /* file size */
 };
 
 int dfs_romfs_init(void);

+ 15 - 3
components/dfs/filesystems/romfs/mkromfs.py → tools/mkromfs.py

@@ -40,6 +40,10 @@ class File(object):
         head = 'static const rt_uint8_t %s[] = {\n' % \
                 (prefix + self.c_name)
         tail = '\n};'
+
+        if self.entry_size == 0:
+            return ''
+
         return head + ','.join(('0x%02x' % ord(i) for i in self._data)) + tail
 
     @property
@@ -118,23 +122,31 @@ class Folder(object):
            It is recursive.'''
         # make the current dirent
         # static is good. Only root dirent is global visible.
+        if self.entry_size == 0:
+            return ''
+
         dhead = 'static const struct romfs_dirent %s[] = {\n' % (prefix + self.c_name)
         dtail = '\n};'
         body_fmt = '    {{{type}, "{name}", (rt_uint8_t *){data}, sizeof({data})/sizeof({data}[0])}}'
+        body_fmt0= '    {{{type}, "{name}", RT_NULL, 0}}'
         # prefix of children
         cpf = prefix+self.c_name
         body_li = []
         payload_li = []
         for c in self._children:
+            entry_size = c.entry_size
             if isinstance(c, File):
                 tp = 'ROMFS_DIRENT_FILE'
             elif isinstance(c, Folder):
                 tp = 'ROMFS_DIRENT_DIR'
             else:
                 assert False, 'Unkown instance:%s' % str(c)
-            body_li.append(body_fmt.format(type=tp,
-                                           name=c.name,
-                                           data=cpf+c.c_name))
+            if entry_size == 0:
+                body_li.append(body_fmt0.format(type=tp, name = c.name))
+            else:
+                body_li.append(body_fmt.format(type=tp,
+                                            name=c.name,
+                                            data=cpf+c.c_name))
             payload_li.append(c.c_data(prefix=cpf))
 
         # All the data we need is defined in payload so we should append the