find_next_zero_bit() 이함 수 해석줌요..제발 고수님들아~

iimec2의 이미지

extern __inline__ int find_next_zero_bit (void * addr, int size, int offset)
{
          unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
          unsigned long result = offset & ~31UL;
          unsigned long tmp;
  
          if (offset >= size)
                  return size;
          size -= result;
          offset &= 31UL;
          if (offset) {
                  tmp = *(p++);
                  tmp |= ~0UL >> (32-offset);
                  if (size < 32)
                          goto found_first;
                  if (~tmp)
                          goto found_middle;
                 size -= 32;
                  result += 32;
         }
         while (size & ~31UL) {
                  if (~(tmp = *(p++)))
                          goto found_middle;
                  result += 32;
                  size -= 32;
          }
         if (!size)
                  return result;
          tmp = *p;
  
   found_first:
          tmp |= ~0UL >> size;
   found_middle:
         return result + ffz(tmp);
  }
  

^^;