Imported Upstream version 2.9.0
[debian/cc1111] / support / regression / tests / driverstruct.c
1 /** Tests a few features of a driver struct - a struct with
2     many function pointers.
3 */
4 #include <testfwk.h>
5
6 /* Set to one to show the bug */
7 #if 1
8 #define NAME(_a)        _a
9 #else
10 #define NAME(_a)
11 #endif
12
13 typedef unsigned char uchar;
14
15 /* Originally from UZIX - http://uzix.sourceforge.net/
16  */
17
18 typedef struct s_devsw {
19         uchar   minors;         /* # of minor device numbers */
20         int     (*dev_init)(uchar NAME(minor)) REENTRANT;
21         int     (*dev_open)(uchar NAME(minor)) REENTRANT;
22         int     (*dev_close)(uchar NAME(minor)) REENTRANT;
23         int     (*dev_read)(uchar NAME(minor), uchar NAME(w)) REENTRANT;
24         int     (*dev_write)(uchar NAME(minor), uchar NAME(w)) REENTRANT;
25         int     (*dev_ioctl)(uchar NAME(minor), int cmd, void *data) REENTRANT;
26 } devsw_t;
27
28 static int
29 _init(uchar minor) REENTRANT
30 {
31   return minor;
32 }
33
34 static devsw_t _sillyDriver = {
35   1,
36   _init,
37   NULL, NULL, NULL, NULL, NULL
38 };
39
40 int
41 initProxy(devsw_t *pdrv)
42 {
43   return (*pdrv->dev_init)(5);
44 }
45
46 void
47 testDriverStruct(void)
48 {
49   initProxy(&_sillyDriver);
50 }