mirror of
https://github.com/ipxe/ipxe
synced 2025-12-19 02: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:
@@ -36,12 +36,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
/** Registered ARP protocols */
|
||||
static struct arp_net_protocol arp_net_protocols[0]
|
||||
__table_start ( struct arp_net_protocol, arp_net_protocols );
|
||||
static struct arp_net_protocol arp_net_protocols_end[0]
|
||||
__table_end ( struct arp_net_protocol, arp_net_protocols );
|
||||
|
||||
/** An ARP cache entry */
|
||||
struct arp_entry {
|
||||
/** Network-layer protocol */
|
||||
@@ -176,8 +170,7 @@ int arp_resolve ( struct net_device *netdev, struct net_protocol *net_protocol,
|
||||
static struct arp_net_protocol * arp_find_protocol ( uint16_t net_proto ) {
|
||||
struct arp_net_protocol *arp_net_protocol;
|
||||
|
||||
for ( arp_net_protocol = arp_net_protocols ;
|
||||
arp_net_protocol < arp_net_protocols_end ; arp_net_protocol++ ) {
|
||||
for_each_table_entry ( arp_net_protocol, ARP_NET_PROTOCOLS ) {
|
||||
if ( arp_net_protocol->net_protocol->net_proto == net_proto ) {
|
||||
return arp_net_protocol;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user