Function to guess which db package created a database.
diff --git a/Lib/whichdb.py b/Lib/whichdb.py
new file mode 100644
index 0000000..3722e41
--- /dev/null
+++ b/Lib/whichdb.py
@@ -0,0 +1,60 @@
+"""Guess which db package to use to open a db file."""
+
+import struct
+
+def whichdb(filename):
+    """Guess which db package to use to open a db file.
+
+    Return values:
+
+    - None if the database file can't be read;
+    - empty string if the file can be read but can't be recognized
+    - the module name (e.g. "dbm" or "gdbm") if recognized.
+
+    Importing the given module may still fail, and opening the
+    database using that module may still fail.
+    """
+
+    # Check for dbm first -- this has a .pag and a .dir file
+    try:
+	f = open(filename + ".pag", "rb")
+	f.close()
+	f = open(filename + ".dir", "rb")
+	f.close()
+	return "dbm"
+    except IOError:
+	pass
+
+    # See if the file exists, return None if not
+    try:
+	f = open(filename, "rb")
+    except IOError:
+	return None
+
+    # Read the first 4 bytes of the file -- the magic number
+    s = f.read(4)
+    f.close()
+
+    # Return "" if not at least 4 bytes
+    if len(s) != 4:
+	return ""
+
+    # Convert to 4-byte int in native byte order -- return "" if impossible
+    try:
+	(magic,) = struct.unpack("l", s)
+    except struct.error:
+	try:
+	    (magic,) = struct.unpack("i", s)
+	except struct.error:
+	    return ""
+
+    # Check for GNU dbm
+    if magic == 0x13579ace:
+	return "gdbm"
+
+    # Check for BSD hash
+    if magic == 0x061561:
+	return "dbhash"
+
+    # Unknown
+    return ""