1*219b2ee8SDavid du Colombier /* Find the first set bit 2*219b2ee8SDavid du Colombier * i.e. least signifigant 1 bit: 3*219b2ee8SDavid du Colombier * 0 => 0 4*219b2ee8SDavid du Colombier * 1 => 1 5*219b2ee8SDavid du Colombier * 2 => 2 6*219b2ee8SDavid du Colombier * 3 => 1 7*219b2ee8SDavid du Colombier * 4 => 3 8*219b2ee8SDavid du Colombier */ 9*219b2ee8SDavid du Colombier 10*219b2ee8SDavid du Colombier int ffs(unsigned int mask)11*219b2ee8SDavid du Colombierffs(unsigned int mask) 12*219b2ee8SDavid du Colombier { 13*219b2ee8SDavid du Colombier int i; 14*219b2ee8SDavid du Colombier 15*219b2ee8SDavid du Colombier if (!mask) 16*219b2ee8SDavid du Colombier return 0; 17*219b2ee8SDavid du Colombier i = 1; 18*219b2ee8SDavid du Colombier while (!(mask & 1)){ 19*219b2ee8SDavid du Colombier i++; 20*219b2ee8SDavid du Colombier mask = mask >> 1; 21*219b2ee8SDavid du Colombier } 22*219b2ee8SDavid du Colombier return i; 23*219b2ee8SDavid du Colombier } 24