diff options
author | Haru <haru@dotalux.com> | 2014-11-15 04:00:54 +0100 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-11-15 11:47:30 +0300 |
commit | 61fc83fd7dd51e9a88ac7e6264692fcf561a37f7 (patch) | |
tree | ddaca2f239f7f96c6f96ec70f6af9fbe87e5c033 /tools/HPMHookGen | |
parent | 7456ee13ea06a28e1b9bf9d53ff7138fe40bf0aa (diff) | |
download | hercules-61fc83fd7dd51e9a88ac7e6264692fcf561a37f7.tar.gz hercules-61fc83fd7dd51e9a88ac7e6264692fcf561a37f7.tar.bz2 hercules-61fc83fd7dd51e9a88ac7e6264692fcf561a37f7.tar.xz hercules-61fc83fd7dd51e9a88ac7e6264692fcf561a37f7.zip |
Corrected an issue in the HPMHookGen when interfaces only have one member
- Fixed hooks/symbols generation for the inter_quest interface
- Re-enabled strict mode
Signed-off-by: Haru <haru@dotalux.com>
Diffstat (limited to 'tools/HPMHookGen')
-rw-r--r-- | tools/HPMHookGen/HPMDataCheckGen.pl | 11 | ||||
-rwxr-xr-x | tools/HPMHookGen/HPMHookGen.pl | 26 |
2 files changed, 18 insertions, 19 deletions
diff --git a/tools/HPMHookGen/HPMDataCheckGen.pl b/tools/HPMHookGen/HPMDataCheckGen.pl index f950152d1..01728341d 100644 --- a/tools/HPMHookGen/HPMDataCheckGen.pl +++ b/tools/HPMHookGen/HPMDataCheckGen.pl @@ -20,17 +20,18 @@ my %out; foreach my $file (@files) { my $xml = new XML::Simple; - my $data = $xml->XMLin($file); - next unless $data->{compounddef}->{includes}; # means its a struct from a .c file, plugins cant access those so we don't care. - next if $data->{compounddef}->{compoundname} =~ /::/; # its a duplicate with a :: name e.g. struct script_state {<...>} ay; - my @filepath = split(/[\/\\]/, $data->{compounddef}->{location}->{file}); + my $data = $xml->XMLin($file, ForceArray => 1); + my $filekey = (keys $data->{compounddef})[0]; + next unless $data->{compounddef}->{$filekey}->{includes}; # means its a struct from a .c file, plugins cant access those so we don't care. + next if $data->{compounddef}->{$filekey}->{compoundname}->[0] =~ /::/; # its a duplicate with a :: name e.g. struct script_state {<...>} ay; + my @filepath = split(/[\/\\]/, $data->{compounddef}->{$filekey}->{location}->[0]->{file}); my $foldername = uc($filepath[-2]); my $filename = uc($filepath[-1]); $filename =~ s/-/_/g; $filename =~ s/\.[^.]*$//; my $plugintypes = 'SERVER_TYPE_UNKNOWN'; $plugintypes = 'SERVER_TYPE_ALL' if $foldername eq 'COMMON'; $plugintypes = "SERVER_TYPE_${foldername}" if $foldername =~ /^(LOGIN|CHAR|MAP)/; my $symboldata = { - name => $data->{compounddef}->{compoundname}, + name => $data->{compounddef}->{$filekey}->{compoundname}->[0], type => $plugintypes, }; my $name = "${foldername}_${filename}_H"; diff --git a/tools/HPMHookGen/HPMHookGen.pl b/tools/HPMHookGen/HPMHookGen.pl index 57e50e0b6..3daf742bc 100755 --- a/tools/HPMHookGen/HPMHookGen.pl +++ b/tools/HPMHookGen/HPMHookGen.pl @@ -3,8 +3,7 @@ # Copyright (c) Hercules Dev Team, licensed under GNU GPL. # See the LICENSE file -# disabled strict because it show warning and failing -#use strict; +use strict; use warnings; use XML::Simple; @@ -259,13 +258,14 @@ my %keys = ( foreach my $file (@files) { # Loop through the xml files my $xml = new XML::Simple; - my $data = $xml->XMLin($file); + my $data = $xml->XMLin($file, ForceArray => 1); - my $loc = $data->{compounddef}->{location}; + my $filekey = (keys $data->{compounddef})[0]; + my $loc = $data->{compounddef}->{$filekey}->{location}->[0]; next unless $loc->{file} =~ /src\/(map|char|login)\//; my $servertype = $1; - my $key = $data->{compounddef}->{compoundname}; + my $key = $data->{compounddef}->{$filekey}->{compoundname}->[0]; my $original = $key; # Some known interfaces with different names @@ -289,19 +289,17 @@ foreach my $file (@files) { # Loop through the xml files $key =~ s/_interface//; } - foreach my $v ($data->{compounddef}->{sectiondef}) { # Loop through the sections + foreach my $v ($data->{compounddef}->{$filekey}->{sectiondef}->[0]) { # Loop through the sections my $memberdef = $v->{memberdef}; - foreach my $fk (sort { # Sort the members in declaration order according to what the xml says - my $astart = $memberdef->{$a}->{location}->{bodystart} || $memberdef->{$a}->{location}->{line}; - my $bstart = $memberdef->{$b}->{location}->{bodystart} || $memberdef->{$b}->{location}->{line}; + foreach my $f (sort { # Sort the members in declaration order according to what the xml says + my $astart = $a->{location}->[0]->{bodystart} || $a->{location}->[0]->{line}; + my $bstart = $b->{location}->[0]->{bodystart} || $b->{location}->[0]->{line}; $astart <=> $bstart - } keys %$memberdef) { # Loop through the members - my $f = $memberdef->{$fk}; - - my $t = $f->{argsstring}; + } @$memberdef) { # Loop through the members + my $t = $f->{argsstring}->[0]; next unless ref $t ne 'HASH' and $t =~ /^[^\[]/; # If it's not a string, or if it starts with an array subscript, we can skip it - my $if = parse($t, $f->{definition}); + my $if = parse($t, $f->{definition}->[0]); next unless scalar keys %$if; # If it returns an empty hash reference, an error must've occurred # Skip variadic functions, we only allow hooks on their arglist equivalents. |