diff --git a/python/fdt/__init__.py b/python/fdt/__init__.py index 8aa7588..8b5019a 100644 --- a/python/fdt/__init__.py +++ b/python/fdt/__init__.py @@ -509,11 +509,29 @@ def parse_dts(text: str, root_dir: str = '') -> FDT: raise NotImplementedError("Not implemented property value: /bits/") else: prop_obj = PropStrings(prop_name) - for prop in prop_value.split('",'): - prop = prop.replace('"', "") - prop = prop.strip() - if len(prop) > 0: + expect_open = True + in_prop = False + prop = '' + for c in prop_value: + if c == '"' and not in_prop and expect_open: + prop = '' + in_prop = True + elif c == '"' and in_prop: + if not len(prop) > 0: + raise ValueError('Empty string') prop_obj.append(prop) + in_prop = False + expect_open = False + elif in_prop: + prop += c + elif c == ',' and not expect_open: + expect_open = True + elif c == ' ': + continue + else: + raise ValueError(f'Invalid char: {c}') + if expect_open: + raise ValueError('Expected string after ,') if curnode is not None: curnode.append(prop_obj) diff --git a/python/fdt/items.py b/python/fdt/items.py index 7a6b03c..277b152 100644 --- a/python/fdt/items.py +++ b/python/fdt/items.py @@ -80,7 +80,7 @@ class BaseItem: node = node.parent return path if path else '/' - def __init__(self, name: str): + def __init__(self, name: str, label=None): """ BaseItem constructor @@ -89,7 +89,7 @@ class BaseItem: assert isinstance(name, str) assert all(c in printable for c in name), "The value must contain just printable chars !" self._name = name - self._label = None + self._label = label self._parent = None def __str__(self): @@ -522,14 +522,14 @@ class Node(BaseItem): def empty(self): return False if self.nodes or self.props else True - def __init__(self, name, *args): + def __init__(self, name, *args, label=None): """ Node constructor :param name: Node name :param args: List of properties and subnodes """ - super().__init__(name) + super().__init__(name, label=label) self._props = [] self._nodes = [] for item in args: @@ -557,7 +557,7 @@ class Node(BaseItem): def copy(self): """ Create a copy of Node object """ - node = Node(self.name) + node = Node(self.name, label=self.label) for p in self.props: node.append(p.copy()) for n in self.nodes: