Largefiles for Solaris
[p5sagit/p5-mst-13.2.git] / ext / DB_File / dbinfo
CommitLineData
a9fd575d 1#!/usr/local/bin/perl
2
3# Name: dbinfo -- identify berkeley DB version used to create
4# a database file
5#
6ca2e664 6# Author: Paul Marquess <Paul.Marquess@btinternet.com>
a9fd575d 7# Version: 1.01
8# Date 16th April 1998
9#
10# Copyright (c) 1998 Paul Marquess. All rights reserved.
11# This program is free software; you can redistribute it and/or
12# modify it under the same terms as Perl itself.
13
14# Todo: Print more stats on a db file, e.g. no of records
15# add log/txn/lock files
16
17use strict ;
18
19my %Data =
20 (
21 0x053162 => {
22 Type => "Btree",
23 Versions =>
24 {
25 1 => "Unknown (older than 1.71)",
26 2 => "Unknown (older than 1.71)",
27 3 => "1.71 -> 1.85, 1.86",
28 4 => "Unknown",
29 5 => "2.0.0 -> 2.3.0",
30 6 => "2.3.1 or greater",
31 }
32 },
33 0x061561 => {
34 Type => "Hash",
35 Versions =>
36 {
37 1 => "Unknown (older than 1.71)",
38 2 => "1.71 -> 1.85",
39 3 => "1.86",
40 4 => "2.0.0 -> 2.1.0",
41 5 => "2.2.6 or greater",
42 }
43 },
44 ) ;
45
46die "Usage: dbinfo file\n" unless @ARGV == 1 ;
47
48print "testing file $ARGV[0]...\n\n" ;
49open (F, "<$ARGV[0]") or die "Cannot open file $ARGV[0]: $!\n" ;
50
51my $buff ;
52read F, $buff, 20 ;
53
54my (@info) = unpack("NNNNN", $buff) ;
55my (@info1) = unpack("VVVVV", $buff) ;
56my ($magic, $version, $endian) ;
57
58if ($Data{$info[0]}) # first try DB 1.x format
59{
60 $magic = $info[0] ;
61 $version = $info[1] ;
62 $endian = "Unknown" ;
63}
64elsif ($Data{$info[3]}) # next DB 2.x big endian
65{
66 $magic = $info[3] ;
67 $version = $info[4] ;
68 $endian = "Big Endian" ;
69}
70elsif ($Data{$info1[3]}) # next DB 2.x little endian
71{
72 $magic = $info1[3] ;
73 $version = $info1[4] ;
74 $endian = "Little Endian" ;
75}
76else
77 { die "not a Berkeley DB database file.\n" }
78
79my $type = $Data{$magic} ;
80my $magic = sprintf "%06X", $magic ;
81
82my $ver_string = "Unknown" ;
83$ver_string = $type->{Versions}{$version}
84 if defined $type->{Versions}{$version} ;
85
86print <<EOM ;
87File Type: Berkeley DB $type->{Type} file.
88File Version ID: $version
89Built with Berkeley DB: $ver_string
90Byte Order: $endian
91Magic: $magic
92EOM
93
94close F ;
95
96exit ;