[Python-checkins] CVS: python/dist/src/Python import.c,2.158,2.159

Barry Warsaw bwarsaw@users.sourceforge.net
Fri, 02 Feb 2001 11:12:19 -0800


Update of /cvsroot/python/python/dist/src/Python
In directory usw-pr-cvs1:/tmp/cvs-serv4770

Modified Files:
	import.c 
Log Message:
Steve Majewski's patch #103495, MatchFilename() and find_module()
patch for case-preserving HFS+ suport.  Untested except to verify that
it builds and doesn't break anything on Linux RH6.1.


Index: import.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/import.c,v
retrieving revision 2.158
retrieving revision 2.159
diff -C2 -r2.158 -r2.159
*** import.c	2001/01/28 00:27:39	2.158
--- import.c	2001/02/02 19:12:16	2.159
***************
*** 837,840 ****
--- 837,874 ----
  static int find_init_module(char *); /* Forward */
  
+ #ifdef HAVE_DIRENT_H
+ 
+ static int MatchFilename(char *pathname, char *filename);
+ 
+ #include <sys/types.h>
+ #include <dirent.h>
+ 
+ static int MatchFilename(char *pathname, char *filename)
+ {
+ 	DIR *dirp;
+ 	struct dirent *dp;
+ 	int len = strlen(filename);
+ 
+ 	if ((pathname == NULL) || (strlen(pathname) == 0))
+ 		pathname = ".";
+ 	dirp = opendir(pathname);
+ 	if (dirp) {
+ 		while ((dp = readdir(dirp)) != NULL) {
+ #ifdef _DIRENT_HAVE_D_NAMELINE
+ 			int namelen = dp->d_namlen;
+ #else  /* !_DIRENT_HAVE_D_NAMELINE */
+ 			int namelen = strlen(dp->d_name);
+ #endif /* _DIRENT_HAVE_D_NAMELINE */
+ 			if (namelen == len && !strcmp(dp->d_name, filename)) {
+ 				(void)closedir(dirp);
+ 				return 1; /* Found */
+ 			}
+ 		}
+ 	}
+ 	(void)closedir(dirp);
+ 	return 0 ; /* Not found */
+ }
+ #endif /* HAVE_DIRENT_H */
+ 
  static struct filedescr *
  find_module(char *realname, PyObject *path, char *buf, size_t buflen,
***************
*** 967,972 ****
--- 1001,1025 ----
  				PySys_WriteStderr("# trying %s\n", buf);
  			fp = fopen(buf, fdp->mode);
+ #ifdef HAVE_DIRENT_H
+ 
+ 		        if (fp != NULL) {  /* check case */
+ 				char *curpath = PyString_AsString(v);
+ 				char *nstart = buf + strlen(curpath);
+ 				if (*nstart == SEP)
+ 					nstart++; 
+ 				if (MatchFilename(curpath, nstart)) {
+ 					break;      /* Found */
+ 				}
+ 				fclose(fp); /* No. Close & continue search */
+ 				fp = NULL;
+ 				if (Py_VerboseFlag > 1)
+ 					PySys_WriteStderr(
+ 					      "# case mismatch for %s:  %s\n", 
+ 					      name, buf);
+ 			}
+ #else  /* !HAVE_DIRENT_H */
  			if (fp != NULL)
  				break;
+ #endif /* HAVE_DIRENT_H */
  		}
  #endif /* !macintosh */