--- glob.c.orig	Fri Nov  3 09:55:12 2000
+++ glob.c	Fri Nov  3 17:12:08 2000
@@ -72,6 +72,7 @@
 #include <sys/param.h>
 #include <sys/stat.h>
 
+#include <ctype.h>
 #include <dirent.h>
 #include <errno.h>
 #include <glob.h>
@@ -174,6 +175,8 @@
 #undef MAXPATHLEN
 #define MAXPATHLEN 16384
 
+extern int ignore_case_with_glob;
+
 int
 glob(pattern, flags, errfunc, pglob)
 	const char *pattern;
@@ -727,19 +730,44 @@
 				return(0);
 			if ((negate_range = ((*pat & M_MASK) == M_NOT)) != EOS)
 				++pat;
-			while (((c = *pat++) & M_MASK) != M_END)
-				if ((*pat & M_MASK) == M_RNG) {
-					if (c <= k && k <= pat[1])
-						ok = 1;
-					pat += 2;
-				} else if (c == k)
-					ok = 1;
-			if (ok == negate_range)
-				return(0);
+
+			if (ignore_case_with_glob)
+			  {
+			    while (((c = *pat++) & M_MASK) != M_END)
+			      if ((*pat & M_MASK) == M_RNG) {
+				if (tolower(c) <= tolower(k) && tolower(k) <= tolower(pat[1]))
+				  ok = 1;
+				pat += 2;
+			      } else if (tolower(c) == tolower(k))
+				ok = 1;
+			    if (ok == negate_range)
+			      return(0);
+			  }
+			else
+			  {
+			    while (((c = *pat++) & M_MASK) != M_END)
+			      if ((*pat & M_MASK) == M_RNG) {
+				if (c <= k && k <= pat[1])
+				  ok = 1;
+				pat += 2;
+			      } else if (c == k)
+				ok = 1;
+			    if (ok == negate_range)
+			      return(0);
+			  }
 			break;
 		default:
-			if (*name++ != c)
-				return(0);
+			if (ignore_case_with_glob)
+			  {
+			    if (tolower(*name) != tolower(c))
+			      return(0);
+			    ++name;
+			  }
+			else
+			  {
+			    if (*name++ != c)
+			      return(0);
+			  }
 			break;
 		}
 	}

