X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=support%2Fregression%2Ftests%2Fdriverstruct.c;fp=support%2Fregression%2Ftests%2Fdriverstruct.c;h=f6219e6149236e478574ee2903a63a37ebc595a2;hb=c2029a0ae596f1a45bf8f0db2c4dd6d2a43f8f47;hp=0000000000000000000000000000000000000000;hpb=b15590945ccfa79c40d0f0a13a5a254169cdc73d;p=fw%2Fsdcc diff --git a/support/regression/tests/driverstruct.c b/support/regression/tests/driverstruct.c new file mode 100644 index 00000000..f6219e61 --- /dev/null +++ b/support/regression/tests/driverstruct.c @@ -0,0 +1,45 @@ +/** Tests a few features of a driver struct - a struct with + many function pointers. +*/ +#include + +/* Set to one to show the bug */ +#if 0 +#define NAME(_a) _a +#else +#define NAME(_a) +#endif + +typedef unsigned char uchar; + +/* Originally from UZIX - http://uzix.sourceforge.net/ + */ + +typedef struct s_devsw { + uchar minors; /* # of minor device numbers */ + int (*dev_init)(uchar NAME(minor)); + int (*dev_open)(uchar NAME(minor)); + int (*dev_close)(uchar NAME(minor)); + int (*dev_read)(uchar NAME(minor), uchar NAME(w)); + int (*dev_write)(uchar NAME(minor), uchar NAME(w)); + int (*dev_ioctl)(uchar NAME(minor), int cmd, void *data); +} devsw_t; + +static int +_init(uchar minor) +{ + return minor; +} + +static devsw_t _sillyDriver = { + 1, + _init, + NULL, NULL, NULL, NULL, NULL +}; + +int +initProxy(void) +{ + return (*_sillyDriver.dev_init)(5); +} +