From 02bea51b3ead05c84d39e409663efbb5ec6e501b Mon Sep 17 00:00:00 2001 From: Reini Urban Date: Mon, 17 May 2010 20:59:06 +0200 Subject: [PATCH] workaround for Convert::Binary::C bug in 0.74 wrong declarations: 'char'(type) '*baz'(declarator) => 'char*' 'baz' fixes 02struct.t tests 4,5 --- lib/C/DynaLib/Struct.pm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/C/DynaLib/Struct.pm b/lib/C/DynaLib/Struct.pm index 27f51be..ee1fadc 100644 --- a/lib/C/DynaLib/Struct.pm +++ b/lib/C/DynaLib/Struct.pm @@ -227,9 +227,19 @@ sub Parse { # all structs and unions for my $s ($c->compound) { my $record = $s->{identifier}; - if (defined (${"${record}::template"})) { + if (defined (${"${record}::template"})) { # already parsed carp "Redefinition of ".$s->{type}." $record\n"; } + # Convert::Binary::C bug in 0.74 + # fixup wrong declarations: 'char'(type) '*baz'(declarator) => 'char*' 'baz' + for (0..@{$s->{declarations}}) { + my $d = $s->{declarations}->[$_]; + if (substr($d->{declarators}[0]->{declarator},0,1) eq '*') { + $s->{declarations}->[$_]->{declarators}[0]->{declarator} = + substr($d->{declarators}[0]->{declarator},1); + $s->{declarations}->[$_]->{type} .= "*"; + } + } my @members = _members(@{$s->{declarations}}); Define C::DynaLib::Struct($record, _pack_names(@{$s->{declarations}}),