summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsource4/script/build_smb_interfaces.pl109
1 files changed, 65 insertions, 44 deletions
diff --git a/source4/script/build_smb_interfaces.pl b/source4/script/build_smb_interfaces.pl
index e06f05b25d..990151b2c8 100755
--- a/source4/script/build_smb_interfaces.pl
+++ b/source4/script/build_smb_interfaces.pl
@@ -57,6 +57,9 @@ sub flatten_structs($) {
# Generate implementation
#
+my $basename = basename($file, ".h");
+stat "libcli/gen_raw" || mkdir("libcli/gen_raw") || die("mkdir");
+
open(FILE, ">libcli/gen_raw/ejs_${basename}.c");
print FILE "/* EJS wrapper functions auto-generated by build_smb_interfaces.pl */\n\n";
@@ -74,9 +77,38 @@ foreach my $s (@newheader) {
# Top level struct
- print FILE "static NTSTATUS ejs_$s->{TYPE_DEFINED}(int eid, int argc, struct MprVar **argv)\n";
+ print FILE "static int ejs_$s->{TYPE_DEFINED}(int eid, int argc, struct MprVar **argv)\n";
print FILE "{\n";
- print FILE "\treturn NT_STATUS_OK;\n";
+ print FILE "\tstruct $s->{TYPE_DEFINED} params;\n";
+ print FILE "\tstruct smbcli_tree *tree;\n";
+ print FILE "\tNTSTATUS result;\n\n";
+
+ print FILE "\tif (argc != 1 || argv[0]->type != MPR_TYPE_OBJECT) {\n";
+ print FILE "\t\tejsSetErrorMsg(eid, \"invalid arguments\");\n";
+ print FILE "\t\treturn -1;\n";
+ print FILE "\t}\n\n";
+
+ foreach my $field (@{$s->{FIELDS}}) {
+ next if $field->{NAME} eq "out";
+ print FILE "\t// pull params.$field->{NAME}\n";
+ }
+
+ my $fn = $s->{TYPE_DEFINED};
+ $fn =~ s/^smb_/smb_raw_/;
+
+ print FILE "\n\tresult = $fn(tree, &params);\n\n";
+
+ foreach my $field (@{$s->{FIELDS}}) {
+ next if $field->{NAME} eq "in";
+ print FILE "\t// push params.$field->{NAME}\n";
+ }
+
+ print FILE "\n\tmpr_Return(eid, mprNTSTATUS(result));\n\n";
+ print FILE "\tif (NT_STATUS_EQUAL(status, NT_STATUS_INTERNAL_ERROR)) {\n";
+ print FILE "\t\treturn -1;\n";
+ print FILE "\t}\n\n";
+ print FILE "\treturn 0;\n";
+
print FILE "}\n\n";
} else {
@@ -85,9 +117,38 @@ foreach my $s (@newheader) {
foreach my $arm (@{$s->{FIELDS}}) {
- print FILE "static NTSTATUS ejs_$s->{TYPE_DEFINED}_$arm->{NAME}(int eid, int argc, struct MprVar **argv)\n";
+ print FILE "static int ejs_$s->{TYPE_DEFINED}_$arm->{NAME}(int eid, int argc, struct MprVar **argv)\n";
print FILE "{\n";
- print FILE "\treturn NT_STATUS_OK;\n";
+ print FILE "\tunion $s->{TYPE_DEFINED} params;\n";
+ print FILE "\tstruct smbcli_tree *tree;\n";
+ print FILE "\tNTSTATUS result;\n\n";
+
+ print FILE "\tif (argc != 1 || argv[0]->type != MPR_TYPE_OBJECT) {\n";
+ print FILE "\t\tejsSetErrorMsg(eid, \"invalid arguments\");\n";
+ print FILE "\t\treturn -1;\n";
+ print FILE "\t}\n\n";
+
+ foreach my $field (@{$arm->{FIELDS}}) {
+ next if $field->{NAME} eq "out";
+ print FILE "\t// pull params.$arm->{NAME}.$field->{NAME}\n";
+ }
+
+ my $fn = $s->{TYPE_DEFINED};
+ $fn =~ s/^smb_/smb_raw_/;
+
+ print FILE "\n\tresult = $fn(tree, &params);\n\n";
+
+ foreach my $field (@{$arm->{FIELDS}}) {
+ next if $field->{NAME} eq "in";
+ print FILE "\t// push params.$arm->{NAME}.$field->{NAME}\n";
+ }
+
+ print FILE "\n\tmpr_Return(eid, mprNTSTATUS(result));\n\n";
+ print FILE "\tif (NT_STATUS_EQUAL(status, NT_STATUS_INTERNAL_ERROR)) {\n";
+ print FILE "\t\treturn -1;\n";
+ print FILE "\t}\n\n";
+ print FILE "\treturn 0;\n";
+
print FILE "}\n\n";
}
}
@@ -119,43 +180,3 @@ print FILE "}\n";
close(FILE);
exit;
-
-foreach my $x (@{$header}) {
- next, if $x->{STRUCT_NAME} eq "";
-
- $raw_name = $x->{STRUCT_NAME};
- $raw_name =~ s/smb_/smb_raw_/;
-
- print FILE "static int ejs_$x->{STRUCT_NAME}(int eid, int argc, struct MprVar **argv)\n";
- print FILE "{\n";
- print FILE "\tstruct $x->{STRUCT_NAME} params;\n";
- print FILE "\tstruct smbcli_tree *tree;\n";
- print FILE "\tNTSTATUS result;\n\n";
-
- $output = << "__HERE__";
- if (argc != 1 || argv[0]->type != MPR_TYPE_OBJECT) {
- ejsSetErrorMsg(eid, "invalid arguments");
- return -1;
- }
-
- tree = mprGetThisPtr(eid, "tree");
-
- if (!tree) {
- ejsSetErrorMsg(eid, "invalid tree");
- return -1;
- }
-
-__HERE__
-
- print FILE $output;
- print FILE "\tresult = $raw_name(tree, &params);\n\n";
-
- print FILE "\tmpr_Return(eid, mprNTSTATUS(status));\n";
- print FILE "\tif (NT_STATUS_EQUAL(status, NT_STATUS_INTERNAL_ERROR)) {\n";
- print FILE "\t\treturn -1;\n";
- print FILE "\t}\n\n";
- print FILE "\treturn 0;\n";
-
- print FILE "}\n\n";
-}
-