aboutsummaryrefslogtreecommitdiffstats
path: root/main.py
diff options
context:
space:
mode:
authorbloodstalker <thabogre@gmail.com>2018-07-31 20:27:13 +0000
committerbloodstalker <thabogre@gmail.com>2018-07-31 20:27:13 +0000
commit16dd4c6176f11b3abb3cdb037eb1d6da5442ff0a (patch)
tree4e10c77f164da524ccf35fe1612994a2df9018d7 /main.py
parentupdate (diff)
downloadfaultreiber-16dd4c6176f11b3abb3cdb037eb1d6da5442ff0a.tar.gz
faultreiber-16dd4c6176f11b3abb3cdb037eb1d6da5442ff0a.zip
update
Diffstat (limited to '')
-rwxr-xr-xmain.py29
1 files changed, 19 insertions, 10 deletions
diff --git a/main.py b/main.py
index e7c36b9..7ba7c31 100755
--- a/main.py
+++ b/main.py
@@ -140,6 +140,7 @@ def get_elem_count(elem, elems):
try:
if str(int(elem.attrib["count"])) == elem.attrib["count"]:
return int(elem.attrib["count"])
+ else: return -1
except ValueError:
return -1
else:
@@ -177,10 +178,10 @@ class Argparser(object):
parser.add_argument("--verbose", action="store_true", help="verbose", default=False)
# TODO
parser.add_argument("--forcenullterm", action="store_true", help="terminate all strings with null even if they are not null-terminated", default=False)
- # TODO
- parser.add_argument("--buffersize", type=int, help="the size of the buffer for special reads(e.g. strings)", default=100)
- # TODO
- parser.add_argument("--buffgrowfactor", type=float, help="main target name", default=1.6)
+ parser.add_argument("--strbuffersize", type=int, help="the size of the buffer for string reads", default=100)
+ parser.add_argument("--strbuffgrowfactor", type=float, help="the factor by which the strbuffer will grow", default=1.6)
+ parser.add_argument("--voidbuffersize", type=int, help="the size of the buffer for void* buffer", default=100)
+ parser.add_argument("--voidbuffgrowfactor", type=float, help="the factor by which the voidbuffer will grow", default=1.6)
self.args = parser.parse_args()
def dupemake(path, main_name):
@@ -321,23 +322,30 @@ class CodeGen(object):
count_int = int()
count_void = int()
read_count = len(self.read_elems)
+ # FIXME-count and size present together is not being handled at all
for elem in self.read_elems + self.def_elems:
if "isaggregate" in elem.attrib:
for child in elem:
+ ref_node_name = type_resolver(child, self.def_elems)
+ ref_node = get_def_node(ref_node_name, self.def_elems)
+ if ref_node: count_void+=1
count = get_elem_count(child, self.def_elems + self.read_elems)
size = get_elem_size(child, self.def_elems + self.read_elems)
type_width = get_type_width(child)
- #print(child.tag + ":" + str(type_width))
- if "count" in child.attrib: pass
- if "size" in child.attrib: pass
+ #print(elem.tag + " " + child.tag + " " + "count:" + str(count) + " " + "size:" + str(size) + " " + "typ_width:" + str(type_width))
if count > 0: count_int+=count*type_width
if count < 0: count_void+=1
if size > 0: count_int+=size
if size < 0: count_void+=1
- self.mem_size[elem.attrib["name"]] = (str(count_int)+"+" if count_int > 0 else "") + (str(count_void)+"*"+"sizeof(void*)") if count_void > 0 else ""
+ sizeof = (str(count_int) if count_int > 0 else ("")) + ("+" if count_void>0 and count_int>0 else "") + ((str(count_void)+"*"+"sizeof(void*)") if count_void > 0 else "")
+ self.mem_size[elem.attrib["name"]] = text.c_reserve_void_ptr.replace("XXX", sizeof)
+ void_source.write(elem.attrib["name"] + "* = " + text.c_reserve_void_ptr.replace("XXX", sizeof) + ";\n")
count_int = 0
count_void = 0
else:
+ ref_node_name = type_resolver(elem, self.def_elems)
+ ref_node = get_def_node(ref_node_name, self.def_elems)
+ if ref_node: count_void+=1
if "size" in elem.attrib:
count = get_elem_count(elem, self.def_elems + self.read_elems)
if count > 0: count_int+= count
@@ -346,8 +354,9 @@ class CodeGen(object):
size = get_elem_size(elem, self.def_elems + self.read_elems)
if size > 0: count_int+=size
else: count_void+=1
- #void_source.write("void* ptr = malloc(sizeof(void*));\n")
- self.mem_size[elem.attrib["name"]] = (str(count_int)+"+" if count_int > 0 else "") + (str(count_void)+"*"+"sizeof(void*)") if count_void > 0 else ""
+ sizeof = (str(count_int)+"+" if count_int > 0 else "") + (str(count_void)+"*"+"sizeof(void*)") if count_void > 0 else ""
+ self.mem_size[elem.attrib["name"]] = text.c_reserve_void_ptr.replace("XXX", sizeof)
+ void_source.write(elem.attrib["name"] + "* = " + text.c_reserve_void_ptr.replace("XXX", sizeof) + ";\n")
count_int = 0
count_void = 0
void_source.write("}")