diff --git a/Lib/fnmatch.py b/Lib/fnmatch.py
index 182a9ef..da0bb34 100644
--- a/Lib/fnmatch.py
+++ b/Lib/fnmatch.py
@@ -37,6 +37,26 @@
     pat = os.path.normcase(pat)
     return fnmatchcase(name, pat)
 
+def filter(names, pat):
+    """Return the subset of the list NAMES that match PAT"""
+    import os,posixpath
+    result=[]
+    pat=os.path.normcase(pat)
+    if not _cache.has_key(pat):
+        res = translate(pat)
+        _cache[pat] = re.compile(res)
+    match=_cache[pat].match
+    if os.path is posixpath:
+        # normcase on posix is NOP. Optimize it away from the loop.
+        for name in names:
+            if match(name):
+                result.append(name)
+    else:
+        for name in names:
+            if match(os.path.normcase(name)):
+                result.append(name)
+    return result
+
 def fnmatchcase(name, pat):
     """Test whether FILENAME matches PATTERN, including case.
 
diff --git a/Lib/glob.py b/Lib/glob.py
index eeb6bdd..d5e508a 100644
--- a/Lib/glob.py
+++ b/Lib/glob.py
@@ -18,7 +18,9 @@
         else:
             return []
     dirname, basename = os.path.split(pathname)
-    if has_magic(dirname):
+    if not dirname:
+        return glob1(os.curdir, basename)
+    elif has_magic(dirname):
         list = glob(dirname)
     else:
         list = [dirname]
@@ -43,12 +45,9 @@
         names = os.listdir(dirname)
     except os.error:
         return []
-    result = []
-    for name in names:
-        if name[0] != '.' or pattern[0] == '.':
-            if fnmatch.fnmatch(name, pattern):
-                result.append(name)
-    return result
+    if pattern[0]!='.':
+        names=filter(lambda x: x[0]!='.',names)
+    return fnmatch.filter(names,pattern)
 
 
 magic_check = re.compile('[*?[]')
