diff --git a/redis.c b/redis.c index eb44138f..e26e676f 100644 --- a/redis.c +++ b/redis.c @@ -58,6 +58,9 @@ #include #include #include +#if defined(__sun) && defined(__GNUC__) +#include "solarisfixes.h" +#endif #include "redis.h" #include "ae.h" /* Event driven programming library */ diff --git a/solarisfixes.h b/solarisfixes.h new file mode 100644 index 00000000..36f19201 --- /dev/null +++ b/solarisfixes.h @@ -0,0 +1,16 @@ +/* Solaris specific fixes */ + +#undef isnan +#define isnan(x) \ + __extension__({ __typeof (x) __x_a = (x); \ + __builtin_expect(__x_a != __x_a, 0); }) + +#undef isfinite +#define isfinite(x) \ + __extension__ ({ __typeof (x) __x_f = (x); \ + __builtin_expect(!isnan(__x_f - __x_f), 1); }) + +#undef isinf +#define isinf(x) \ + __extension__ ({ __typeof (x) __x_i = (x); \ + __builtin_expect(!isnan(__x_i) && !isfinite(__x_i), 0); })