svn commit: samba r11077 - in branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3: .

jelmer at samba.org jelmer at samba.org
Sat Oct 15 00:45:18 GMT 2005


Author: jelmer
Date: 2005-10-15 00:45:16 +0000 (Sat, 15 Oct 2005)
New Revision: 11077

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=11077

Log:
Fix [string] for Samba3

Modified:
   branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Parser.pm
   branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Types.pm


Changeset:
Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Parser.pm
===================================================================
--- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Parser.pm	2005-10-14 22:04:24 UTC (rev 11076)
+++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Parser.pm	2005-10-15 00:45:16 UTC (rev 11077)
@@ -27,7 +27,7 @@
 #TODO:
 # - Add some security checks (array sizes, memory alloc == NULL, etc)
 # - Don't add seperate _p and _d functions if there is no deferred data
-# - [string] with non-varying arrays
+# - [string] with non-varying arrays and "surrounding" strings 
 # - subcontext()
 # - DATA_BLOB
 
@@ -90,11 +90,13 @@
 	my ($e,$l,$nl,$env,$varname,$what,$align) = @_;
 
 	if ($l->{IS_ZERO_TERMINATED}) {
+		return if ($what == DEFERRED);
+		
 		my ($t,$f) = StringType($e,$l);
 
-		pidl "if (!prs_io_$t(\"$e->{VARNAME}\", ps, depth, $varname))";
+		Align($align, 4);
+		pidl "if (!smb_io_$t(\"$e->{NAME}\", &$varname, 1, ps, depth))";
 		pidl "\treturn False;";
-		pidl "";
 
 		$$align = 0;
 		return;
@@ -246,7 +248,7 @@
 		}
 	} elsif ($l->{TYPE} eq "ARRAY" and $l->{IS_ZERO_TERMINATED}) {
 		my ($t,$f) = StringType($e,$l);
-		pidl "init_$t(" . ParseExpr($e->{NAME}, $env) . ", $varname, $f);"; 
+		pidl "init_$t(&" . ParseExpr($e->{NAME}, $env) . ", ".substr($varname, 1) . ", $f);"; 
 	} elsif ($l->{TYPE} eq "ARRAY") {
 		pidl ParseExpr($e->{NAME}, $env) . " = $varname;";
 	} elsif ($l->{TYPE} eq "DATA") {

Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Types.pm
===================================================================
--- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Types.pm	2005-10-14 22:04:24 UTC (rev 11076)
+++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba3/Types.pm	2005-10-15 00:45:16 UTC (rev 11077)
@@ -11,7 +11,7 @@
 
 use strict;
 use Parse::Pidl::Util qw(has_property ParseExpr property_matches);
-use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel ContainsDeferred);
+use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel ContainsDeferred ContainsString);
 
 use vars qw($VERSION);
 $VERSION = '0.01';
@@ -110,7 +110,7 @@
 	my $nl = GetNextLevel($e,$l);
 
 	if ($l->{IS_VARYING} and $l->{IS_CONFORMANT} and $nl->{DATA_TYPE} eq "uint16") {
-		return ("unistr2", 0);
+		return ("unistr2", "UNI_FLAGS_NONE");
 	} elsif ($l->{IS_CONFORMANT} and $l->{IS_VARYING} and $nl->{DATA_TYPE} eq "uint8") {
 		return ("string2", 0);
 	} else {
@@ -282,7 +282,10 @@
 	my $suffixes = "";
 
 	foreach my $l (@{$e->{LEVELS}}) {
-		if ($l->{TYPE} eq "ARRAY" and not $l->{IS_FIXED}) {
+		if ($l->{TYPE} eq "ARRAY" and $l->{IS_ZERO_TERMINATED}) {
+			$p = "const char";
+			last;
+		} elsif ($l->{TYPE} eq "ARRAY" and not $l->{IS_FIXED}) {
 			$prefixes = "*$prefixes";
 		} elsif ($l->{TYPE} eq "ARRAY" and $l->{IS_FIXED}) {
 			$suffixes.="[$l->{SIZE_IS}]";



More information about the samba-cvs mailing list