mirror of
https://github.com/ipxe/ipxe
synced 2025-12-22 04:50:25 +03:00
[tables] Redefine methods for accessing linker tables
Intel's C compiler (icc) chokes on the zero-length arrays that we currently use as part of the mechanism for accessing linker table entries. Abstract away the zero-length arrays, to make a port to icc easier. Introduce macros such as for_each_table_entry() to simplify the common case of iterating over all entries in a linker table. Represent table names as #defined string constants rather than unquoted literals; this avoids visual confusion between table names and C variable or type names, and also allows us to force a compilation error in the event of incorrect table names.
This commit is contained in:
@@ -150,12 +150,6 @@ struct resolver numeric_resolver __resolver ( RESOLV_NUMERIC ) = {
|
||||
***************************************************************************
|
||||
*/
|
||||
|
||||
/** Registered name resolvers */
|
||||
static struct resolver resolvers[0]
|
||||
__table_start ( struct resolver, resolvers );
|
||||
static struct resolver resolvers_end[0]
|
||||
__table_end ( struct resolver, resolvers );
|
||||
|
||||
/** A name resolution multiplexer */
|
||||
struct resolv_mux {
|
||||
/** Reference counter */
|
||||
@@ -223,7 +217,7 @@ static void resolv_mux_done ( struct resolv_interface *resolv,
|
||||
|
||||
/* Attempt next child resolver, if possible */
|
||||
mux->resolver++;
|
||||
if ( mux->resolver >= resolvers_end ) {
|
||||
if ( mux->resolver >= table_end ( struct resolver, RESOLVERS ) ) {
|
||||
DBGC ( mux, "RESOLV %p failed to resolve name\n", mux );
|
||||
goto finished;
|
||||
}
|
||||
@@ -262,7 +256,7 @@ int resolv ( struct resolv_interface *resolv, const char *name,
|
||||
return -ENOMEM;
|
||||
resolv_init ( &mux->parent, &null_resolv_ops, &mux->refcnt );
|
||||
resolv_init ( &mux->child, &resolv_mux_child_ops, &mux->refcnt );
|
||||
mux->resolver = resolvers;
|
||||
mux->resolver = table_start ( struct resolver, RESOLVERS );
|
||||
memcpy ( &mux->sa, sa, sizeof ( mux->sa ) );
|
||||
memcpy ( mux->name, name, name_len );
|
||||
|
||||
|
||||
Reference in New Issue
Block a user