svn commit: samba r9191 - in branches/SAMBA_4_0/source/script: .
tpot at samba.org
tpot at samba.org
Sun Aug 7 19:22:20 GMT 2005
Author: tpot
Date: 2005-08-07 19:22:20 +0000 (Sun, 07 Aug 2005)
New Revision: 9191
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9191
Log:
Generate headers for nested structures that need pushing or pulling.
Modified:
branches/SAMBA_4_0/source/script/build_smb_interfaces.pl
Changeset:
Modified: branches/SAMBA_4_0/source/script/build_smb_interfaces.pl
===================================================================
--- branches/SAMBA_4_0/source/script/build_smb_interfaces.pl 2005-08-07 19:11:24 UTC (rev 9190)
+++ branches/SAMBA_4_0/source/script/build_smb_interfaces.pl 2005-08-07 19:22:20 UTC (rev 9191)
@@ -46,7 +46,8 @@
foreach my $elt (@{$obj->{DATA}}) {
foreach my $name (@{$elt->{NAME}}) {
$obj->{FIELDS}{$name} = $elt;
- delete $obj->{FIELDS}{$name}{NAME};
+ $obj->{FIELDS}{$name}{NAME} = $name;
+ $obj->{FIELDS}{$name}{PARENT} = $obj;
}
}
@@ -63,49 +64,50 @@
flatten_names($s);
}
-print Dumper($header);
+#
+# Generate header
+#
-exit;
+my $basename = basename($file, ".h");
+stat "libcli/gen_raw" || mkdir("libcli/gen_raw") || die("mkdir");
-foreach my $s (@{$header}) { # For each parsed structure
- print Dumper($s);
- my $newdata;
- foreach my $e (@{$s->{DATA}}) { # For each element in structure
- foreach my $n (@{$e->{NAME}}) { # For each field in element
+open(FILE, ">libcli/gen_raw/ejs_${basename}.h");
- my $newdata2;
- foreach my $e2 (@{$e->{DATA}}) {
- foreach my $n2 (@{$e2->{NAME}}) {
- my $d = $e2;
- $d->{NAME} = $n2;
- push(@{$newdata2}, $d);
- }
- }
+print FILE "/* header auto-generated by build_smb_interfaces.pl */\n\n";
- push(@{$newdata}, {"NAME" => $n, "DATA" => $newdata2});
- }
- }
- my $newstruct = $s;
- $newstruct->{DATA} = $newdata;
- push(@{$newheader}, $newstruct);
-}
+print FILE "#ifndef _ejs_${basename}_h\n";
+print FILE "#define _ejs_${basename}_h\n\n";
-print Dumper($newheader);
-exit 0;
+# Generate a push/pull prototype for every top level structure, as
+# well as every non-anonymous nested structure (i.e TYPE_NAME element
+# is undefined.
-my $basename = basename($file, ".h");
-stat "libcli/gen_raw" || mkdir("libcli/gen_raw") || die("mkdir");
+foreach my $s (@{$header}) {
-# Create header
+ # Top level
-open(FILE, ">libcli/gen_raw/ejs_${basename}.h");
+ print FILE "NTSTATUS ejs_push_$s->{TYPE_NAME}(struct ejs_rpc *, struct MprVar *, const char *, const uint32_t *);\n";
+ print FILE "NTSTATUS ejs_pull_$s->{TYPE_NAME}(struct ejs_rpc *, struct MprVar *, const char *, const uint32_t *);\n";
-print FILE "/* header auto-generated by build_smb_interfaces.pl */\n\n";
+ sub header_for($$) {
+ my $prefix = shift;
+ my $obj = shift;
-print FILE "#ifndef _ejs_${basename}_h\n";
-print FILE "#define _ejs_${basename}_h\n\n";
+ return if !($obj->{TYPE} eq "struct" or $obj->{TYPE} eq "union");
+ return if ($obj->{NAME} eq "in" or $obj->{NAME} eq "out");
+ print FILE "NTSTATUS ejs_push_${prefix}_$obj->{NAME}(struct ejs_rpc *, struct MprVar *, const char *, const uint32_t *);\n";
+ print FILE "NTSTATUS ejs_pull_${prefix}_$obj->{NAME}(struct ejs_rpc *, struct MprVar *, const char *, const uint32_t *);\n";
+
+ foreach my $key (%{$obj->{FIELDS}}) {
+ header_for("${prefix}.$obj->{TYPE_NAME}", $obj->{FIELDS}{$key});
+ }
+ }
+}
+
+exit;
+
sub struct_name($)
{
my $obj = shift;
@@ -161,7 +163,9 @@
close(FILE);
-# Create file
+#
+# Generate implementation
+#
open(FILE, ">libcli/gen_raw/ejs_${basename}.c");
More information about the samba-cvs
mailing list