enum search_status BUS_first_alarm(struct device_search *ds, const struct parsedname *pn) { LEVEL_DEBUG("Start of directory path=%s device=" SNformat, SAFESTRING(pn->path), SNvar(pn->sn)); // reset the search state BUS_first_both(ds); ds->search = _1W_CONDITIONAL_SEARCH_ROM; return BUS_next(ds, pn); }
static GOOD_OR_BAD PresenceFromDirblob( struct parsedname * pn ) { struct dirblob db; // cached dirblob if ( GOOD( Cache_Get_Dir( &db , pn ) ) ) { // Use the dirblob from the cache GOOD_OR_BAD ret = ( DirblobSearch(pn->sn, &db ) >= 0 ) ? gbGOOD : gbBAD ; DirblobClear( &db ) ; return ret ; } else { // look through actual directory struct device_search ds ; enum search_status nextboth = BUS_first( &ds, pn ) ; while ( nextboth == search_good ) { if ( memcmp( ds.sn, pn->sn, SERIAL_NUMBER_SIZE ) == 0 ) { // found it. Early exit. BUS_next_cleanup( &ds ); return gbGOOD ; } // Not found. Clean up done by BUS_next in this case nextboth = BUS_next( &ds, pn ) ; } return gbBAD ; } }