/* SPDX-License-Identifier: BSD-3-Clause * Copyright(c) 2018 Gaƫtan Rivet */ #include "rte_ethdev.h" #include "ethdev_private.h" struct rte_eth_dev * eth_find_device(const struct rte_eth_dev *start, rte_eth_cmp_t cmp, const void *data) { struct rte_eth_dev *edev; ptrdiff_t idx; /* Avoid Undefined Behaviour */ if (start != NULL && (start < &rte_eth_devices[0] || start > &rte_eth_devices[RTE_MAX_ETHPORTS])) return NULL; if (start != NULL) idx = start - &rte_eth_devices[0] + 1; else idx = 0; for (; idx < RTE_MAX_ETHPORTS; idx++) { edev = &rte_eth_devices[idx]; if (cmp(edev, data) == 0) return edev; } return NULL; }