mirror of
https://github.com/samba-team/samba.git
synced 2024-12-27 03:21:53 +03:00
added code to the IDL validator to check for common errors with
pointers are arrays
(This used to be commit e67cbfff6c
)
This commit is contained in:
parent
8369293090
commit
f46072d223
@ -133,14 +133,23 @@ sub ChangeExtension($$)
|
||||
return "$fname$ext";
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
# a dumper wrapper to prevent dependence on the Data::Dumper module
|
||||
# unless we actually need it
|
||||
sub MyDumper($)
|
||||
{
|
||||
require Data::Dumper;
|
||||
my $s = shift;
|
||||
return Data::Dumper::Dumper($s);
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
# save a data structure into a file
|
||||
sub SaveStructure($$)
|
||||
{
|
||||
require Data::Dumper;
|
||||
my($filename) = shift;
|
||||
my($v) = shift;
|
||||
FileSave($filename, Data::Dumper::Dumper($v));
|
||||
FileSave($filename, MyDumper($v));
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
|
@ -16,6 +16,38 @@ sub fatal($)
|
||||
die "IDL is not valid\n";
|
||||
}
|
||||
|
||||
sub el_name($)
|
||||
{
|
||||
my $e = shift;
|
||||
|
||||
if ($e->{PARENT} && $e->{PARENT}->{NAME}) {
|
||||
return "$e->{PARENT}->{NAME}.$e->{NAME}";
|
||||
}
|
||||
|
||||
if ($e->{PARENT} && $e->{PARENT}->{PARENT}->{NAME}) {
|
||||
return "$e->{PARENT}->{PARENT}->{NAME}.$e->{NAME}";
|
||||
}
|
||||
|
||||
if ($e->{PARENT}) {
|
||||
return "$e->{PARENT}->{NAME}.$e->{NAME}";
|
||||
}
|
||||
return $e->{NAME};
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
# parse a struct
|
||||
sub ValidElement($)
|
||||
{
|
||||
my $e = shift;
|
||||
if ($e->{POINTERS} && $e->{POINTERS} > 1) {
|
||||
fatal(el_name($e) . " : pidl cannot handle multiple pointer levels. Use a sub-structure containing a pointer instead\n");
|
||||
}
|
||||
|
||||
if ($e->{POINTERS} && $e->{ARRAY_LEN}) {
|
||||
fatal(el_name($e) . " : pidl cannot handle pointers to arrays. Use a substructure instead\n");
|
||||
}
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
# parse a struct
|
||||
sub ValidStruct($)
|
||||
@ -23,7 +55,8 @@ sub ValidStruct($)
|
||||
my($struct) = shift;
|
||||
|
||||
foreach my $e (@{$struct->{ELEMENTS}}) {
|
||||
|
||||
$e->{PARENT} = $struct;
|
||||
ValidElement($e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -34,6 +67,8 @@ sub ValidUnion($)
|
||||
{
|
||||
my($union) = shift;
|
||||
foreach my $e (@{$union->{DATA}}) {
|
||||
$e->{PARENT} = $union;
|
||||
ValidElement($e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -44,6 +79,8 @@ sub ValidTypedef($)
|
||||
my($typedef) = shift;
|
||||
my $data = $typedef->{DATA};
|
||||
|
||||
$data->{PARENT} = $typedef;
|
||||
|
||||
if (ref($data) eq "HASH") {
|
||||
if ($data->{TYPE} eq "STRUCT") {
|
||||
ValidStruct($data);
|
||||
@ -62,9 +99,11 @@ sub ValidFunction($)
|
||||
my($fn) = shift;
|
||||
|
||||
foreach my $e (@{$fn->{DATA}}) {
|
||||
$e->{PARENT} = $fn;
|
||||
if (util::has_property($e, "ref") && !$e->{POINTERS}) {
|
||||
fatal "[ref] variables must be pointers ($fn->{NAME}/$e->{NAME})\n";
|
||||
}
|
||||
ValidElement($e);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user