Added 'grok_environment_error()' function to deal with the various
forms that IOError and OSError can take (taken from core.py).
diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py
index 5754638..279f246 100644
--- a/Lib/distutils/util.py
+++ b/Lib/distutils/util.py
@@ -154,3 +154,23 @@
 # subst_vars ()
 
 
+def grok_environment_error (exc, prefix="error: "):
+    """Generate a useful error message from an EnvironmentError (IOError or
+    OSError) exception object.  Handles Python 1.5.1 and 1.5.2 styles, and
+    does what it can to deal with exception objects that don't have a
+    filename (which happens when the error is due to a two-file operation,
+    such as 'rename()' or 'link()'.  Returns the error message as a string
+    prefixed with 'prefix'.
+    """
+    # check for Python 1.5.2-style {IO,OS}Error exception objects
+    if hasattr (exc, 'filename') and hasattr (exc, 'strerror'):
+        if exc.filename:
+            error = prefix + "%s: %s" % (exc.filename, exc.strerror)
+        else:
+            # two-argument functions in posix module don't
+            # include the filename in the exception object!
+            error = prefix + "%s" % exc.strerror
+    else:
+        error = prefix + str(exc[-1])
+
+    return error