diff --git a/cogl/cogl-util.c b/cogl/cogl-util.c index 29165872b..d38049a93 100644 --- a/cogl/cogl-util.c +++ b/cogl/cogl-util.c @@ -218,3 +218,24 @@ _cogl_util_one_at_a_time_mix (unsigned int hash) return hash; } +/* The 'ffs' function is part of C99 so it isn't always available */ +#ifndef HAVE_FFS + +int +_cogl_util_ffs (int num) +{ + int i = 1; + + if (num == 0) + return 0; + + while ((num & 1) == 0) + { + num >>= 1; + i++; + } + + return i; +} + +#endif /* HAVE_FFS */ diff --git a/cogl/cogl-util.h b/cogl/cogl-util.h index 0ac56c9d9..e32fcd68e 100644 --- a/cogl/cogl-util.h +++ b/cogl/cogl-util.h @@ -95,4 +95,12 @@ _cogl_util_one_at_a_time_hash (unsigned int hash, unsigned int _cogl_util_one_at_a_time_mix (unsigned int hash); +/* The 'ffs' function is part of C99 so it isn't always available */ +#ifdef HAVE_FFS +#define _cogl_util_ffs ffs +#else +int +_cogl_util_ffs (int num); +#endif + #endif /* __COGL_UTIL_H */