Take into account -noname functions when checking for duplicate export

names. Fixed a couple of issues found by the stricter check.
This commit is contained in:
Alexandre Julliard 2005-09-19 14:44:28 +00:00
parent 83f3b370b1
commit 7a52190c03
3 changed files with 39 additions and 20 deletions

View File

@ -65,7 +65,7 @@
185 stub -noname FireEvent_Quit 185 stub -noname FireEvent_Quit
187 stub -noname SHDGetPageLocation 187 stub -noname SHDGetPageLocation
188 stub -noname SHIEErrorMsgBox 188 stub -noname SHIEErrorMsgBox
189 stub -noname IEGetDisplayName 189 stub @ # FIXME: same as ordinal 148
190 stub -noname SHRunIndirectRegClientCommandForward 190 stub -noname SHRunIndirectRegClientCommandForward
191 stub -noname SHIsRegisteredClient 191 stub -noname SHIsRegisteredClient
192 stub -noname SHGetHistoryPIDL 192 stub -noname SHGetHistoryPIDL

View File

@ -493,8 +493,8 @@
493 stub -noname SHPropertyBag_ReadType 493 stub -noname SHPropertyBag_ReadType
494 stub -noname SHPropertyBag_ReadStr 494 stub -noname SHPropertyBag_ReadStr
495 stub -noname SHPropertyBag_WriteStr 495 stub -noname SHPropertyBag_WriteStr
496 stub -noname SHPropertyBag_ReadInt 496 stub -noname SHPropertyBag_ReadLONG
497 stub -noname SHPropertyBag_WriteInt 497 stub -noname SHPropertyBag_WriteLONG
498 stub -noname SHPropertyBag_ReadBOOLOld 498 stub -noname SHPropertyBag_ReadBOOLOld
499 stub -noname SHPropertyBag_WriteBOOL 499 stub -noname SHPropertyBag_WriteBOOL
@ -531,7 +531,7 @@
535 stub -noname SHPropertyBag_Delete 535 stub -noname SHPropertyBag_Delete
536 stub -noname IUnknown_QueryServicePropertyBag 536 stub -noname IUnknown_QueryServicePropertyBag
537 stub -noname SHBoolSystemParametersInfo 537 stub -noname SHBoolSystemParametersInfo
538 stub -noname IUnknown_QueryServicePropertyBag 538 stub -noname IUnknown_QueryServiceForWebBrowserApp
539 stub -noname IUnknown_ShowBrowserBar 539 stub -noname IUnknown_ShowBrowserBar
540 stub -noname SHInvokeCommandOnContextMenu 540 stub -noname SHInvokeCommandOnContextMenu
541 stub -noname SHInvokeCommandsOnContextMen 541 stub -noname SHInvokeCommandsOnContextMen

View File

@ -559,11 +559,13 @@ error:
} }
static int name_compare( const void *name1, const void *name2 ) static int name_compare( const void *ptr1, const void *ptr2 )
{ {
const ORDDEF *odp1 = *(const ORDDEF * const *)name1; const ORDDEF *odp1 = *(const ORDDEF * const *)ptr1;
const ORDDEF *odp2 = *(const ORDDEF * const *)name2; const ORDDEF *odp2 = *(const ORDDEF * const *)ptr2;
return strcmp( odp1->name, odp2->name ); const char *name1 = odp1->name ? odp1->name : odp1->export_name;
const char *name2 = odp2->name ? odp2->name : odp2->export_name;
return strcmp( name1, name2 );
} }
/******************************************************************* /*******************************************************************
@ -573,31 +575,48 @@ static int name_compare( const void *name1, const void *name2 )
*/ */
static void assign_names( DLLSPEC *spec ) static void assign_names( DLLSPEC *spec )
{ {
int i, j; int i, j, nb_exp_names = 0;
ORDDEF **all_names;
spec->nb_names = 0; spec->nb_names = 0;
for (i = 0; i < spec->nb_entry_points; i++) for (i = 0; i < spec->nb_entry_points; i++)
if (spec->entry_points[i].name) spec->nb_names++; if (spec->entry_points[i].name) spec->nb_names++;
if (!spec->nb_names) return; else if (spec->entry_points[i].export_name) nb_exp_names++;
spec->names = xmalloc( spec->nb_names * sizeof(spec->names[0]) ); if (!spec->nb_names && !nb_exp_names) return;
/* check for duplicates */
all_names = xmalloc( (spec->nb_names + nb_exp_names) * sizeof(all_names[0]) );
for (i = j = 0; i < spec->nb_entry_points; i++) for (i = j = 0; i < spec->nb_entry_points; i++)
if (spec->entry_points[i].name) spec->names[j++] = &spec->entry_points[i]; if (spec->entry_points[i].name || spec->entry_points[i].export_name)
all_names[j++] = &spec->entry_points[i];
/* sort the list of names */ qsort( all_names, j, sizeof(all_names[0]), name_compare );
qsort( spec->names, spec->nb_names, sizeof(spec->names[0]), name_compare );
/* check for duplicate names */ for (i = 0; i < j - 1; i++)
for (i = 0; i < spec->nb_names - 1; i++)
{ {
if (!strcmp( spec->names[i]->name, spec->names[i+1]->name )) const char *name1 = all_names[i]->name ? all_names[i]->name : all_names[i]->export_name;
const char *name2 = all_names[i+1]->name ? all_names[i+1]->name : all_names[i+1]->export_name;
if (!strcmp( name1, name2 ))
{ {
current_line = max( spec->names[i]->lineno, spec->names[i+1]->lineno ); current_line = max( all_names[i]->lineno, all_names[i+1]->lineno );
error( "'%s' redefined\n%s:%d: First defined here\n", error( "'%s' redefined\n%s:%d: First defined here\n",
spec->names[i]->name, input_file_name, name1, input_file_name,
min( spec->names[i]->lineno, spec->names[i+1]->lineno ) ); min( all_names[i]->lineno, all_names[i+1]->lineno ) );
} }
} }
free( all_names );
if (spec->nb_names)
{
spec->names = xmalloc( spec->nb_names * sizeof(spec->names[0]) );
for (i = j = 0; i < spec->nb_entry_points; i++)
if (spec->entry_points[i].name) spec->names[j++] = &spec->entry_points[i];
/* sort the list of names */
qsort( spec->names, spec->nb_names, sizeof(spec->names[0]), name_compare );
}
} }
/******************************************************************* /*******************************************************************