1 """Guess which db package to use to open a db file."""
6 """Guess which db package to use to open a db file.
10 - None if the database file can't be read;
11 - empty string if the file can be read but can't be recognized
12 - the module name (e.g. "dbm" or "gdbm") if recognized.
14 Importing the given module may still fail, and opening the
15 database using that module may still fail.
20 # Check for dbm first -- this has a .pag and a .dir file
22 f
= open(filename
+ os
.extsep
+ "pag", "rb")
24 f
= open(filename
+ os
.extsep
+ "dir", "rb")
30 # Check for dumbdbm next -- this has a .dir and and a .dat file
32 f
= open(filename
+ os
.extsep
+ "dat", "rb")
34 f
= open(filename
+ os
.extsep
+ "dir", "rb")
36 if f
.read(1) in ["'", '"']:
43 # See if the file exists, return None if not
45 f
= open(filename
, "rb")
49 # Read the start of the file -- the magic number
54 # Return "" if not at least 4 bytes
58 # Convert to 4-byte int in native byte order -- return "" if impossible
60 (magic
,) = struct
.unpack("=l", s
)
65 if magic
== 0x13579ace:
69 if magic
in (0x00061561, 0x61150600):
72 # BSD hash v2 has a 12-byte NULL pad in front of the file type
74 (magic
,) = struct
.unpack("=l", s16
[-4:])
79 if magic
in (0x00061561, 0x61150600):