Home | History | Annotate | Line # | Download | only in nvif
unpack.h revision 1.1.1.1
      1 /*	$NetBSD: unpack.h,v 1.1.1.1 2018/08/27 01:34:55 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 && (d).version >= (vl) &&                    \
     15 				     (d).version <= (vh)) {                    \
     16 			data = (u8 *)data + _size;                             \
     17 			size = size - _size;                                   \
     18 			ret = ((m) || !size) ? 0 : -E2BIG;                     \
     19 		} else {                                                       \
     20 			ret = -ENOSYS;                                         \
     21 		}                                                              \
     22 	}                                                                      \
     23 	(ret == 0);                                                            \
     24 })
     25 
     26 #endif
     27