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