diff --git a/pkgtool.pm b/pkgtool.pm index 40f509d..b5faf34 100644 --- a/pkgtool.pm +++ b/pkgtool.pm @@ -754,6 +754,39 @@ sub read_os_patches ($$$) } print_log('global', DEBUG3, 'Found OS patch information for %s: kbnum=%s current=%s', $kb, $number, $$p{Current}); } + elsif ($installname =~ /^Package_for_([0-9a-zA-Z_]+)~/o) { + my $kb = $1; + if ($installname =~ /^[^~]*~[^~]*~[^~]*~[^~]*~(\d+(\.\d+)*)/o) { + my $version = $1; + if (defined $version && $version ne '') { + my @versionlist = split /\./, $version; + my $revnum = $versionlist[2]; + if (defined $revnum && $revnum =~ /^\d+$/o && $revnum > 1) { + $kb .= 'v'.$revnum; + } + } + } + my $p = $$patches{$kb}; + if (! defined $p) { + $p = $$patches{$kb} = { + Type => 'OS', + Packages => { OS => 1 }, + InstallName => $name, + InstallClient => $installclient, + Original => $original, + Update => $update, + KB => $kb, + Number => $kb, + Current => 0, + Flags => 0 + }; + } + if (defined $state) { + $$p{Flags} |= $state; + $$p{Current} = 1 if $state & 0x20; + } + print_log('global', DEBUG3, 'Found OS patch information for %s: kbnum=%s current=%s', $kb, $kb, $$p{Current}); + } if ($name =~ /^([^~]*)~([^~]*)~([^~]*)~([^~]*)~([^~]*)$/o) { my $pkg = $$pkgs{$name}; if (! defined $pkg) {