1 1.1 riastrad /* $NetBSD: unpack.h,v 1.4 2021/12/18 23:45:33 riastradh Exp $ */ 2 1.1 riastrad 3 1.4 riastrad /* SPDX-License-Identifier: MIT */ 4 1.1 riastrad #ifndef __NVIF_UNPACK_H__ 5 1.1 riastrad #define __NVIF_UNPACK_H__ 6 1.1 riastrad 7 1.4 riastrad #define nvif_unvers(r,d,s,m) ({ \ 8 1.4 riastrad void **_data = (d); __u32 *_size = (s); int _ret = (r); \ 9 1.4 riastrad if (_ret == -ENOSYS && *_size == sizeof(m)) { \ 10 1.4 riastrad *_data = NULL; \ 11 1.4 riastrad *_size = _ret = 0; \ 12 1.4 riastrad } \ 13 1.4 riastrad _ret; \ 14 1.1 riastrad }) 15 1.1 riastrad 16 1.4 riastrad #define nvif_unpack(r,d,s,m,vl,vh,x) ({ \ 17 1.4 riastrad void **_data = (d); __u32 *_size = (s); \ 18 1.4 riastrad int _ret = (r), _vl = (vl), _vh = (vh); \ 19 1.4 riastrad if (_ret == -ENOSYS && *_size >= sizeof(m) && \ 20 1.4 riastrad (m).version >= _vl && (m).version <= _vh) { \ 21 1.4 riastrad *_data = (__u8 *)*_data + sizeof(m); \ 22 1.4 riastrad *_size = *_size - sizeof(m); \ 23 1.4 riastrad if (_ret = 0, !(x)) { \ 24 1.4 riastrad _ret = *_size ? -E2BIG : 0; \ 25 1.4 riastrad *_data = NULL; \ 26 1.4 riastrad *_size = 0; \ 27 1.1 riastrad } \ 28 1.1 riastrad } \ 29 1.4 riastrad _ret; \ 30 1.1 riastrad }) 31 1.1 riastrad #endif 32