From: Miguel F. <mig...@us...> - 2004-07-29 14:45:14
|
Update of /cvsroot/xine/xine-lib/src/libw32dll/wine In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18606/wine Modified Files: win32.c Log Message: fix from Casper Boemann to reuse the stubs for unresolved symbols Index: win32.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/libw32dll/wine/win32.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- win32.c 24 Dec 2003 16:55:36 -0000 1.26 +++ win32.c 29 Jul 2004 14:45:03 -0000 1.27 @@ -5065,6 +5065,15 @@ { // generated code in runtime! char* answ = (char*)extcode+pos*0x30; + int i; + + /* xine: check if stub for this export was created before */ + for(i = 0; i < pos; i++) + { + if(strcmp(export_names[pos], export_names[i])==0) + return extcode+i*0x30; /* return existing stub */ + } + #if 0 memcpy(answ, &unk_exp1, 0x64); *(int*)(answ+9)=pos; @@ -5079,7 +5088,15 @@ *((long*) (answ + 18)) = (long)export_names; //answ[23] = 0x68; // pushl $0 (0x68 0x00000000) *((long*) (answ + 24)) = (long)called_unk; - pos++; + + /* xine: don't overflow the stub tables */ + if( (pos+1) < sizeof(extcode) / 0x30 && + (pos+1) < sizeof(export_names) / sizeof(export_names[0]) ) { + pos++; + } else { + strcpy(export_names[pos], "too many unresolved exports"); + } + return (void*)answ; } @@ -5139,7 +5156,9 @@ no_dll: #endif +/* xine: pos is now tested inside add_stub() if(pos>150)return 0; +*/ sprintf(export_names[pos], "%s:%d", library, ordinal); return add_stub(); } @@ -5172,7 +5191,9 @@ return libraries[i].exps[j].func; } } +/* xine: pos is now tested inside add_stub() if(pos>150)return 0;// to many symbols +*/ strcpy(export_names[pos], name); return add_stub(); } |