summaryrefslogtreecommitdiff
path: root/tools/HPMHookGen
diff options
context:
space:
mode:
authorHaru <haru@dotalux.com>2014-11-15 04:00:54 +0100
committerAndrei Karas <akaras@inbox.ru>2014-11-15 11:47:30 +0300
commit61fc83fd7dd51e9a88ac7e6264692fcf561a37f7 (patch)
treeddaca2f239f7f96c6f96ec70f6af9fbe87e5c033 /tools/HPMHookGen
parent7456ee13ea06a28e1b9bf9d53ff7138fe40bf0aa (diff)
downloadhercules-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.pl11
-rwxr-xr-xtools/HPMHookGen/HPMHookGen.pl26
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.