/** * driver_find_last: * @label : string of driver type to be found. * @s : identifier of driver to be found. * @len : size of @s. * * Find last driver in driver array. **/ static bool driver_find_last(const char *label, char *s, size_t len) { unsigned i; for (i = 0; find_driver_nonempty(label, i, s, len) != NULL; i++) {} if (i) find_driver_nonempty(label, i-1, s, len); else driver_find_first(label, s, len); return true; }
/** * find_next_driver: * @label : string of driver type to be found. * @str : identifier of driver to be found. * @sizeof_str : size of @str. * * Find next driver in driver array. **/ bool find_next_driver(const char *label, char *str, size_t sizeof_str) { int i = find_driver_index(label, str); if (i >= 0 && (strcmp(str, "null") != 0)) find_driver_nonempty(label, i + 1, str, sizeof_str); else { RARCH_WARN("Couldn't find any next driver (current one: \"%s\").\n", str); return false; } return true; }
/** * find_prev_driver: * @label : string of driver type to be found. * @str : identifier of driver to be found. * @sizeof_str : size of @str. * * Find previous driver in driver array. **/ bool find_prev_driver(const char *label, char *str, size_t sizeof_str) { int i = find_driver_index(label, str); if (i > 0) find_driver_nonempty(label, i - 1, str, sizeof_str); else { RARCH_WARN( "Couldn't find any previous driver (current one: \"%s\").\n", str); return false; } return true; }
/** * driver_find_prev: * @label : string of driver type to be found. * @s : identifier of driver to be found. * @len : size of @s. * * Find previous driver in driver array. **/ static bool driver_find_prev(const char *label, char *s, size_t len) { int i = driver_find_index(label, s); if (i > 0) find_driver_nonempty(label, i - 1, s, len); else { RARCH_WARN( "Couldn't find any previous driver (current one: \"%s\").\n", s); return false; } return true; }
/** * driver_find_next: * @label : string of driver type to be found. * @s : identifier of driver to be found. * @len : size of @s. * * Find next driver in driver array. **/ bool driver_find_next(const char *label, char *s, size_t len) { int i = driver_find_index(label, s); if (i >= 0 && !string_is_equal(s, "null")) find_driver_nonempty(label, i + 1, s, len); else { RARCH_WARN("%s (current one: \"%s\").\n", msg_hash_to_str(MSG_COULD_NOT_FIND_ANY_NEXT_DRIVER), s); return false; } return true; }
/** * driver_find_index: * @label : string of driver type to be found. * @drv : identifier of driver to be found. * * Find index of the driver, based on @label. * * Returns: -1 if no driver based on @label and @drv found, otherwise * index number of the driver found in the array. **/ static int driver_find_index(const char * label, const char *drv) { unsigned i; char str[256] = {0}; for (i = 0; find_driver_nonempty(label, i, str, sizeof(str)) != NULL; i++) { if (string_is_empty(str)) break; if (string_is_equal_noncase(drv, str)) return i; } return -1; }
/** * find_driver_index: * @label : string of driver type to be found. * @drv : identifier of driver to be found. * * Find index of the driver, based on @label. * * Returns: -1 if no driver based on @label and @drv found, otherwise * index number of the driver found in the array. **/ int find_driver_index(const char * label, const char *drv) { unsigned i; char str[PATH_MAX_LENGTH]; const void *obj = NULL; for (i = 0; (obj = (const void*) find_driver_nonempty(label, i, str, sizeof(str))) != NULL; i++) { if (!obj) return -1; if (str[0] == '\0') break; if (!strcasecmp(drv, str)) return i; } return -1; }
bool find_first_driver(const char *label, char *str, size_t sizeof_str) { find_driver_nonempty(label, 0, str, sizeof_str); return true; }
static bool driver_find_first(const char *label, char *s, size_t len) { find_driver_nonempty(label, 0, s, len); return true; }