File: Name.pm

package info (click to toggle)
libwin32-exe-perl 0.17-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 472 kB
  • sloc: perl: 3,679; xml: 38; makefile: 11
file content (41 lines) | stat: -rw-r--r-- 855 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Copyright 2004 by Audrey Tang <cpan@audreyt.org>

package Win32::Exe::ResourceEntry::Name;

use strict;
use base 'Win32::Exe::ResourceEntry';
use constant SUBFORMAT => (
    N_RVA	    => 'V',
);

sub NameAddress {
    my ($self) = @_;
    $self->N_RVA & ~($self->high_bit);
}

sub SetNameAddress {
    my ($self, $data) = @_;
    $self->SetN_RVA($data | $self->IsDirectory);
}

sub IsEscaped {
    my ($self) = @_;
    $self->N_RVA & ($self->high_bit);
}

sub Name {
    my ($self) = @_;
    my $section = $self->first_parent('Resources');
    my $addr = $self->NameAddress;
    my $size = unpack('v', $section->substr($addr, 2));
    my $ustr = $section->substr($addr + 2, $size * 2);
    my $name = $self->decode_ucs2($ustr);
    $name =~ s{([%#/])}{sprintf('%%%02X', ord($1))}eg;
    return $name;
}

sub SetName {
    die "XXX unimplemented";
}

1;