#include <stdarg.h>
/* Some definitions and declaration to make the code work */
#define IO 01
#define USART 02
#define LCD 03
#define set_portB 1
struct __port__ { int set; };
struct __io__ {
struct __port__ portB;
struct __port__ portC;
struct __port__ portD;
};
typedef struct __io__ io;
typedef struct __io__ lcd;
typedef struct __io__ usart;
void init_peripheral(int ID, ...) {
va_list device;
io* temp;
(*temp).portB.set = set_portB; // NOTE: dereferencing uninitialized pointer!
if (ID == IO) {
io* config_io;
config_io
= va_arg(device
, io
*); // ...
} else if (ID == LCD) {
lcd *config_lcd;
config_lcd
= va_arg(device
, lcd
*); // ...
} else if (ID == USART) {
usart *config_usart;
config_usart
= va_arg(device
, usart
*); // ...
}
}
int main() { return 0; }
I2luY2x1ZGUgPHN0ZGFyZy5oPgoKLyogU29tZSBkZWZpbml0aW9ucyBhbmQgZGVjbGFyYXRpb24gdG8gbWFrZSB0aGUgY29kZSB3b3JrICovCiNkZWZpbmUgSU8gCSAgICAJMDEKI2RlZmluZSBVU0FSVAkJMDIKI2RlZmluZSBMQ0QJCTAzCiNkZWZpbmUgc2V0X3BvcnRCICAgCTEKCnN0cnVjdCBfX3BvcnRfXyB7IGludCBzZXQ7IH07CnN0cnVjdCBfX2lvX18gewogICAgc3RydWN0IF9fcG9ydF9fIHBvcnRCOwogICAgc3RydWN0IF9fcG9ydF9fIHBvcnRDOwogICAgc3RydWN0IF9fcG9ydF9fIHBvcnREOwp9Owp0eXBlZGVmIHN0cnVjdCBfX2lvX18gaW87CnR5cGVkZWYgc3RydWN0IF9faW9fXyBsY2Q7CnR5cGVkZWYgc3RydWN0IF9faW9fXyB1c2FydDsKCnZvaWQgaW5pdF9wZXJpcGhlcmFsKGludCBJRCwgLi4uKSB7CiAgICB2YV9saXN0IGRldmljZTsKICAgIHZhX3N0YXJ0KGRldmljZSwgSUQpOwogICAgaW8qIHRlbXA7CiAgICAoKnRlbXApLnBvcnRCLnNldCA9IHNldF9wb3J0QjsgIAkvLyBOT1RFOiBkZXJlZmVyZW5jaW5nIHVuaW5pdGlhbGl6ZWQgcG9pbnRlciEKICAgIAogICAgaWYgKElEID09IElPKSB7CiAgICAgICAgaW8qIGNvbmZpZ19pbzsKICAgICAgICBjb25maWdfaW8gPSB2YV9hcmcoZGV2aWNlLCBpbyopOwogICAgICAgIC8vIC4uLgogICAgfSBlbHNlIGlmIChJRCA9PSBMQ0QpIHsKICAgICAgICBsY2QgKmNvbmZpZ19sY2Q7CiAgICAgICAgY29uZmlnX2xjZCA9IHZhX2FyZyhkZXZpY2UsIGxjZCopOwogICAgICAgIC8vIC4uLgogICAgfSBlbHNlIGlmIChJRCA9PSBVU0FSVCkgewogICAgICAgIHVzYXJ0ICpjb25maWdfdXNhcnQ7CiAgICAgICAgY29uZmlnX3VzYXJ0ID0gdmFfYXJnKGRldmljZSwgdXNhcnQqKTsKICAgICAgICAvLyAuLi4gCiAgICB9CiAgICB2YV9lbmQoZGV2aWNlKTsKfQoKaW50IG1haW4oKSB7IHJldHVybiAwOyB9