summaryrefslogtreecommitdiff
path: root/source3/aparser/header.awk
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2000-05-15 13:41:05 +0000
committerAndrew Tridgell <tridge@samba.org>2000-05-15 13:41:05 +0000
commit32a7cf9188672b0c4766056eb762972f8488aa8e (patch)
tree04d27186b802525e7449c03a908827a67f67200a /source3/aparser/header.awk
parente2e33eb3207e1a6f85ca36cafc564aa9427fd7af (diff)
downloadsamba-32a7cf9188672b0c4766056eb762972f8488aa8e.tar.gz
samba-32a7cf9188672b0c4766056eb762972f8488aa8e.tar.bz2
samba-32a7cf9188672b0c4766056eb762972f8488aa8e.zip
started update to handle arbitrary arrays
note: this code is currently broken. (This used to be commit 15646ebd84ee4e63a251c87800677f3dd2ae6971)
Diffstat (limited to 'source3/aparser/header.awk')
-rw-r--r--source3/aparser/header.awk49
1 files changed, 25 insertions, 24 deletions
diff --git a/source3/aparser/header.awk b/source3/aparser/header.awk
index e7e5b2cff4..406335c930 100644
--- a/source3/aparser/header.awk
+++ b/source3/aparser/header.awk
@@ -1,37 +1,38 @@
# produce a header file for a parsed struct file
-function header_union(f, struct_num, union,
- LOCAL, i)
+function header_elstring(elnum,
+ LOCAL, elem)
{
- xprintf(f,"\tunion {\n");
- for (i=0;i<structs[struct_num, "unions", union, "num_elems"];i++) {
- xprintf(f,"\t\t%s %s;\n",
- structs[struct_num, "unions", union, i, "type"],
- structs[struct_num, "unions", union, i, "elem"]);
- }
- xprintf(f,"\t} %s;\n", union);
+ elem=elements[elnum, "elem"];
+ if (elements[elnum, "ptr"]=="1") elem="*"elem;
+ if (elements[elnum, "array_len"]!="") elem="*"elem;
+ return elem;
}
-function header_array(f, struct_num, elem_num)
+function header_element(f, elnum,
+ LOCAL, type)
{
- xprintf(f,"\t%s *%s; /* array of length %s */ \n",
- structs[struct_num, elem_num, "type"],
- structs[struct_num, elem_num, "elem"],
- structs[struct_num, elem_num, "array_len"]);
+ type=elements[elnum, "type"];
+ xprintf(f,"\t%s %s;\n", type, header_elstring(elnum));
}
-function header_elem(f, struct_num, elem_num)
+function header_union(f, elnum,
+ LOCAL, i)
{
- if (structs[struct_num, elem_num, "type"] == ".align") return;
+ xprintf(f,"\tunion {\n");
+ for (i=0;i<unions[elnum, "num_elems"];i++) {
+ header_element(f, unions[elnum, i]);
+ }
+ xprintf(f,"\t} %s;\n", header_elstring(elnum));
+}
- if (structs[struct_num, elem_num, "type"] == "union") {
- header_union(f, struct_num, structs[struct_num, elem_num, "elem"]);
- } else if (structs[struct_num, elem_num, "array_len"]) {
- header_array(f, struct_num, elem_num);
+function header_elem(f, elnum)
+{
+
+ if (elements[elnum, "type"] == "union") {
+ header_union(f, elnum);
} else {
- xprintf(f,"\t%s %s;\n",
- structs[struct_num, elem_num, "type"],
- structs[struct_num, elem_num, "elem"]);
+ header_element(f, elnum);
}
}
@@ -42,7 +43,7 @@ function header_struct(f, struct_num,
structs[struct_num, "name"]);
xprintf(f,"typedef struct {\n");
for (i=0;i < structs[struct_num, "num_elems"];i++) {
- header_elem(f, struct_num, i);
+ header_elem(f, structs[struct_num, i]);
}
xprintf(f,"} %s;\n\n\n", structs[struct_num, "name"]);
}