File Coverage

blib/lib/Devel/Platform/Info/Win32.pm
Criterion Covered Total %
statement 47 64 73.4
branch 28 32 87.5
condition 52 60 86.6
subroutine 7 9 77.7
pod 2 2 100.0
total 136 167 81.4


line stmt bran cond sub pod time code
1             package Devel::Platform::Info::Win32;
2              
3 6     6   146337 use strict;
  6         35  
  6         195  
4 6     6   32 use warnings;
  6         11  
  6         151  
5 6     6   3242 use POSIX;
  6         39519  
  6         31  
6              
7 6     6   19017 use vars qw($VERSION);
  6         14  
  6         4471  
8             $VERSION = '1.00';
9              
10             #----------------------------------------------------------------------------
11              
12             sub new {
13 1     1 1 99 my ($class) = @_;
14 1         3 my $self = {};
15 1         3 bless $self, $class;
16              
17 1         3 return $self;
18             }
19              
20             sub get_info {
21 0     0 1 0 my $self = shift;
22              
23 0         0 $self->{info}{osflag} = $^O;
24 0         0 my $inf = $self->_GetArchName();
25 0         0 $self->{info}{oslabel} = $inf->{osLabel};
26 0         0 $self->{info}{osvers} = $inf->{version};
27 0         0 $self->{info}{archname} = $inf->{archname};
28 0 0       0 $self->{info}{is32bit} = $self->{info}{archname} !~ /64/ ? 1 : 0;
29 0 0       0 $self->{info}{is64bit} = $self->{info}{archname} =~ /64/ ? 1 : 0;
30 0         0 $self->{info}{source} = $inf->{source};
31 0         0 $self->{info}{wow64} = $inf->{wow64};
32              
33 0         0 return $self->{info};
34             }
35              
36             sub _GetArchName
37             {
38 0     0   0 my $self = shift;
39 0         0 my @uname = POSIX::uname();
40 0         0 my @versions = Win32::GetOSVersion();
41 0         0 my $info = $self->_InterpretWin32Info(@versions);
42 0         0 $self->_AddPOSIXInfo($info, \@uname);
43 0         0 return $info;
44             }
45              
46             sub _AddPOSIXInfo
47             {
48 3     3   4082 my $self = shift;
49 3         6 my $info = shift;
50 3         5 my $uname = shift;
51 3         6 my $arch = $uname->[4];
52 3         6 $info->{archname} = $arch;
53             $info->{source} = {
54             uname => $uname,
55             GetOSVersion => $info->{source},
56 3         10 };
57             # used the tip from David Wang's blog,
58             # http://blogs.msdn.com/b/david.wang/archive/2006/03/26/howto-detect-process-bitness.aspx
59 3 100       20 if($ENV{'PROCESSOR_ARCHITEW6432'})
60             {
61 1         4 $info->{wow64} = 1;
62             }
63             else
64             {
65 2         6 $info->{wow64} = 0;
66             }
67             }
68              
69             sub _InterpretWin32Info
70             {
71 16     16   8752 my $self = shift;
72 16         44 my @versionInfo = @_;
73 16         46 my ($string, $major, $minor, $build, $id, $spmajor, $spminor, $suitemask, $producttype, @extra) = @versionInfo;
74 16         21 my ($osname);
75 16         25 my $NTWORKSTATION = 1;
76 16 100 100     238 if($major == 5 && $minor == 2 && $producttype == $NTWORKSTATION)
    100 100        
    100 100        
    100 66        
    100 100        
    100 66        
    100 100        
    100 100        
    100 100        
    100 66        
    100 66        
    100 100        
    100 66        
      66        
      100        
      100        
      100        
      100        
      66        
      66        
77             {
78 1         2 $osname = 'Windows XP Pro 64';
79             } elsif($major == 5 && $minor == 2 && $producttype != $NTWORKSTATION)
80             {
81             # server 2003, win home server
82             # server 2003 R2
83             # I need more info from GetSystemMetrics
84             # be sure about the exact details.
85 3         6 $osname = 'Windows Server 2003';
86             } elsif($major == 5 && $minor == 1)
87             {
88 1         2 $osname = 'Windows XP';
89             } elsif($major == 5 && $minor == 0)
90             {
91 1         3 $osname = 'Windows 2000';
92             } elsif($major == 6 && $minor == 1 && $producttype == $NTWORKSTATION)
93             {
94 1         3 $osname = 'Windows 7';
95             } elsif($major == 6 && $minor == 1 && $producttype != $NTWORKSTATION)
96             {
97 1         3 $osname = 'Windows Server 2008 R2';
98             } elsif($major == 6 && $minor == 0 && $producttype == $NTWORKSTATION)
99             {
100 1         3 $osname = 'Windows Vista';
101             } elsif($major == 6 && $minor == 0 && $producttype != $NTWORKSTATION)
102             {
103 1         3 $osname = 'Windows Server 2008';
104             } elsif($major == 4 && $minor == 0 && $id == 1)
105             {
106 1         3 $osname = "Windows 95";
107             } elsif($major == 4 && $minor == 10)
108             {
109 1         10 $osname = "Windows 98";
110             } elsif($major == 4 && $minor == 90)
111             {
112 1         2 $osname = "Windows Me";
113             } elsif($major == 4 && $minor == 0)
114             {
115 1         11 $osname = 'Windows NT 4';
116             } elsif($major == 3 && $minor == 51)
117             {
118 1         3 $osname = "Windows NT 3.51";
119             } else
120             {
121 1         2 $osname = 'Unrecognised - please file an RT case';
122             }
123 16         81 my $info =
124             {
125             osName => 'Windows',
126             osLabel => $osname,
127             version => "$major.$minor.$build.$id",
128             source => \@versionInfo,
129             };
130 16         64 return $info;
131             }
132              
133              
134             1;
135              
136             __END__