diff --git a/can-calc-bit-timing.c b/can-calc-bit-timing.c index 0293b45..96f35f3 100644 --- a/can-calc-bit-timing.c +++ b/can-calc-bit-timing.c @@ -28,70 +28,38 @@ #include #include -/* imported from kernel */ +/* seems not to be defined in errno.h */ +#ifndef ENOTSUPP +#define ENOTSUPP 524 /* Operation is not supported */ +#endif -/** - * abs - return absolute value of an argument - * @x: the value. If it is unsigned type, it is converted to signed type first. - * char is treated as if it was signed (regardless of whether it really is) - * but the macro's return type is preserved as char. - * - * Return: an absolute value of x. - */ -#define abs(x) __abs_choose_expr(x, long long, \ - __abs_choose_expr(x, long, \ - __abs_choose_expr(x, int, \ - __abs_choose_expr(x, short, \ - __abs_choose_expr(x, char, \ - __builtin_choose_expr( \ - __builtin_types_compatible_p(typeof(x), char), \ - (char)({ signed char __x = (x); __x<0?-__x:__x; }), \ - ((void)0))))))) +/* useful defines */ +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) -#define __abs_choose_expr(x, type, other) __builtin_choose_expr( \ - __builtin_types_compatible_p(typeof(x), signed type) || \ - __builtin_types_compatible_p(typeof(x), unsigned type), \ - ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other) +#define do_div(a,b) a = (a) / (b) -/* - * min()/max()/clamp() macros that also do - * strict type-checking.. See the - * "unnecessary" pointer comparison. - */ -#define min(x, y) ({ \ - typeof(x) _min1 = (x); \ - typeof(y) _min2 = (y); \ - (void) (&_min1 == &_min2); \ - _min1 < _min2 ? _min1 : _min2; }) - -#define max(x, y) ({ \ - typeof(x) _max1 = (x); \ - typeof(y) _max2 = (y); \ - (void) (&_max1 == &_max2); \ - _max1 > _max2 ? _max1 : _max2; }) +#define abs(x) ({ \ + long __x = (x); \ + (__x < 0) ? -__x : __x; \ + }) /** * clamp - return a value clamped to a given range with strict typechecking * @val: current value - * @lo: lowest allowable value - * @hi: highest allowable value + * @min: minimum allowable value + * @max: maximum allowable value * - * This macro does strict typechecking of lo/hi to make sure they are of the + * This macro does strict typechecking of min/max to make sure they are of the * same type as val. See the unnecessary pointer comparisons. */ -#define clamp(val, lo, hi) min((typeof(val))max(val, lo), hi) - -# define do_div(n,base) ({ \ - uint32_t __base = (base); \ - uint32_t __rem; \ - __rem = ((uint64_t)(n)) % __base; \ - (n) = ((uint64_t)(n)) / __base; \ - __rem; \ - }) - -/* */ - -#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) +#define clamp(val, min, max) ({ \ + typeof(val) __val = (val); \ + typeof(min) __min = (min); \ + typeof(max) __max = (max); \ + (void) (&__val == &__min); \ + (void) (&__val == &__max); \ + __val = __val < __min ? __min: __val; \ + __val > __max ? __max: __val; }) /* we don't want to see these prints */ #define netdev_err(dev, format, arg...) do { } while (0)