1 /* $NetBSD: unpack.h,v 1.3 2018/08/27 07:35:22 riastradh Exp $ */ 2 3 #ifndef __NVIF_UNPACK_H__ 4 #define __NVIF_UNPACK_H__ 5 6 #define nvif_unvers(d) ({ \ 7 ret = (size == sizeof(d)) ? 0 : -ENOSYS; \ 8 (ret == 0); \ 9 }) 10 11 #define nvif_unpack(d,vl,vh,m) ({ \ 12 if ((vl) == 0 || ret == -ENOSYS) { \ 13 int _size = sizeof(d); \ 14 if (_size <= size && \ 15 ((d).version == (vl) || (d).version > (vl)) && \ 16 (d).version <= (vh)) { \ 17 data = (u8 *)data + _size; \ 18 size = size - _size; \ 19 ret = ((m) || !size) ? 0 : -E2BIG; \ 20 } else { \ 21 ret = -ENOSYS; \ 22 } \ 23 } \ 24 (ret == 0); \ 25 }) 26 27 #endif 28