summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2019-01-13 21:41:06 +0800
committerGitHub <[email protected]>2019-01-13 21:41:06 +0800
commit647852b04ab0698bccac84846aae93ea2f060b2f (patch)
treedb4864be009b6919f21210bbae60424307cb11ef
parent8f0d8658b737367e199aedb3c5fa9dce82330f5d (diff)
parentb998c4ed8dbf12e0744b7ffee95cb9c1ebcbc108 (diff)
Merge pull request #2203 from RT-Thread/fix_romfs
[DFS][romfs] fix the mkrom issue when file/dir size zero
-rw-r--r--components/dfs/filesystems/romfs/dfs_romfs.h11
-rw-r--r--tools/mkromfs.py (renamed from components/dfs/filesystems/romfs/mkromfs.py)18
2 files changed, 21 insertions, 8 deletions
diff --git a/components/dfs/filesystems/romfs/dfs_romfs.h b/components/dfs/filesystems/romfs/dfs_romfs.h
index 74b256c8a6..efb6d44caf 100644
--- a/components/dfs/filesystems/romfs/dfs_romfs.h
+++ b/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);
diff --git a/components/dfs/filesystems/romfs/mkromfs.py b/tools/mkromfs.py
index f3c12876d2..5371106987 100644
--- a/components/dfs/filesystems/romfs/mkromfs.py
+++ b/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