X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fcompat%2Fstring.h;h=7c426ef3de3bd97e5056ef469f6db6cb528b1c61;hb=62a7b8edf965b89d3ca57da120dcedfcf36dfe02;hp=91a1c09e2f1df86bff864da0235ba5a9989b5a1b;hpb=f5436bfcf6797b979b308a9af782750f9d079686;p=lttng-tools.git diff --git a/src/common/compat/string.h b/src/common/compat/string.h index 91a1c09e2..7c426ef3d 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,41 @@ 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)) { + x <<= 1; + r -= 1; + } + return r; +} +#endif /* HAVE_FLS */ + #endif /* _COMPAT_STRING_H */