Port: Add Solaris fls compat
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Mon, 19 Oct 2015 03:44:30 +0000 (23:44 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Mon, 19 Oct 2015 04:14:08 +0000 (00:14 -0400)
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
configure.ac
src/common/compat/string.h
src/lib/lttng-ctl/filter/filter-visitor-generate-bytecode.c

index 87eabe8157f1d8ea10e1204fd414ebb9eba81092..dda8f27ca94bb8a1698d85bb333069cb06d784c1 100644 (file)
@@ -66,7 +66,7 @@ AC_CHECK_HEADERS([ \
 
 # Basic functions check
 AC_CHECK_FUNCS([ \
-       atexit bzero clock_gettime dup2 fdatasync ftruncate \
+       atexit bzero clock_gettime dup2 fdatasync fls ftruncate \
        gethostbyname gethostname getpagesize localtime_r memchr memset \
        mkdir munmap putenv realpath rmdir socket strchr strcspn strdup \
        strncasecmp strndup strnlen strpbrk strrchr strstr strtol strtoul \
index 91a1c09e2f1df86bff864da0235ba5a9989b5a1b..7c426ef3de3bd97e5056ef469f6db6cb528b1c61 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 Michael Jeanson <mjeanson@efficios.com>
+ *               2015 Jérémie Galarneau <jeremie.galarneau@efficios.com>
  *
  * 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 */
index 00c9adc16addaeb0a45d50f65551ec60ff745cd5..e28abd57271ecec91936d19e2918c8c1b1aa986c 100644 (file)
@@ -23,6 +23,7 @@
 #include <string.h>
 #include <errno.h>
 #include <common/align.h>
+#include <common/compat/string.h>
 
 #include "filter-bytecode.h"
 #include "filter-ir.h"
@@ -40,40 +41,11 @@ static
 int recursive_visit_gen_bytecode(struct filter_parser_ctx *ctx,
                struct ir_op *node);
 
-static inline int fls(unsigned int x)
-{
-       int r = 32;
-
-       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;
-}
-
 static inline int get_count_order(unsigned int count)
 {
        int order;
 
-       order = fls(count) - 1;
+       order = lttng_fls(count) - 1;
        if (count & (count - 1))
                order++;
        return order;
This page took 0.027677 seconds and 4 git commands to generate.