[Python-checkins] CVS: python/dist/src/Python import.c,2.126,2.127

Guido van Rossum guido@cnri.reston.va.us
Mon, 20 Dec 1999 16:23:44 -0500 (EST)


Update of /projects/cvsroot/python/dist/src/Python
In directory eric:/projects/python/develop/guido/src/Python

Modified Files:
	import.c 
Log Message:
In _PyImport_Init(), dynamically construct the table of legal suffixes
from two static tables (one standard, one provided by the platform's
dynload_*.c variant).

This is part of a set of patches by Greg Stein.


Index: import.c
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Python/import.c,v
retrieving revision 2.126
retrieving revision 2.127
diff -C2 -r2.126 -r2.127
*** import.c	1999/04/07 16:07:20	2.126
--- import.c	1999/12/20 21:23:41	2.127
***************
*** 95,98 ****
--- 95,106 ----
  struct _inittab *PyImport_Inittab = _PyImport_Inittab;
  
+ /* these tables define the module suffixes that Python recognizes */
+ struct filedescr * _PyImport_Filetab = NULL;
+ static const struct filedescr _PyImport_StandardFiletab[] = {
+ 	{".py", "r", PY_SOURCE},
+ 	{".pyc", "rb", PY_COMPILED},
+ 	{0, 0}
+ };
+ 
  /* Initialize things */
  
***************
*** 100,109 ****
  _PyImport_Init()
  {
  	if (Py_OptimizeFlag) {
! 		/* Replace ".pyc" with ".pyo" in import_filetab */
! 		struct filedescr *p;
! 		for (p = _PyImport_Filetab; p->suffix != NULL; p++) {
! 			if (strcmp(p->suffix, ".pyc") == 0)
! 				p->suffix = ".pyo";
  		}
  	}
--- 108,137 ----
  _PyImport_Init()
  {
+ 	const struct filedescr *scan;
+ 	struct filedescr *filetab;
+ 	int countD = 0;
+ 	int countS = 0;
+ 
+ 	/* prepare _PyImport_Filetab: copy entries from
+ 	   _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
+ 	 */
+ 	for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
+ 		++countD;
+ 	for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
+ 		++countS;
+ 	filetab = malloc((countD + countS + 1) * sizeof(struct filedescr));
+ 	memcpy(filetab, _PyImport_DynLoadFiletab,
+ 	       countD * sizeof(struct filedescr));
+ 	memcpy(filetab + countD, _PyImport_StandardFiletab,
+ 	       countS * sizeof(struct filedescr));
+ 	filetab[countD + countS].suffix = NULL;
+ 
+ 	_PyImport_Filetab = filetab;
+ 
  	if (Py_OptimizeFlag) {
! 		/* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
! 		for (; filetab->suffix != NULL; filetab++) {
! 			if (strcmp(filetab->suffix, ".pyc") == 0)
! 				filetab->suffix = ".pyo";
  		}
  	}