X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Fcompat%2Fstring.h;h=db3db80522f5fe039f3f5f716f567f6676dfa87f;hb=e6142f2e647e83238b1e399b1264e8adb05409f9;hp=91a1c09e2f1df86bff864da0235ba5a9989b5a1b;hpb=f5436bfcf6797b979b308a9af782750f9d079686;p=lttng-tools.git diff --git a/src/common/compat/string.h b/src/common/compat/string.h index 91a1c09e2..db3db8052 100644 --- a/src/common/compat/string.h +++ b/src/common/compat/string.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 Michael Jeanson + * 2015 Jérémie Galarneau * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -86,4 +87,40 @@ end: } #endif /* HAVE_STRNDUP */ +#ifdef HAVE_FLS +static inline int lttng_fls(int val) +{ + return fls(val); +} +#else +static inline int lttng_fls(int val) +{ + int r = 32; + unsigned int x = (unsigned int) val; + + if (!x) + return 0; + if (!(x & 0xFFFF0000U)) { + x <<= 16; + r -= 16; + } + if (!(x & 0xFF000000U)) { + x <<= 8; + r -= 8; + } + if (!(x & 0xF0000000U)) { + x <<= 4; + r -= 4; + } + if (!(x & 0xC0000000U)) { + x <<= 2; + r -= 2; + } + if (!(x & 0x80000000U)) { + r -= 1; + } + return r; +} +#endif /* HAVE_FLS */ + #endif /* _COMPAT_STRING_H */