/* { dg-require-alias "" } */ typedef unsigned char __u8; typedef __u8 u8; typedef u8 u_int8_t; typedef unsigned int gfp_t; struct list_head { struct list_head *next, *prev; }; extern int strcmp (const char *, const char *); enum { NFPROTO_UNSPEC = 0, NFPROTO_INET = 1, NFPROTO_IPV4 = 2, NFPROTO_ARP = 3, NFPROTO_NETDEV = 5, NFPROTO_BRIDGE = 7, NFPROTO_IPV6 = 10, NFPROTO_DECNET = 12, NFPROTO_NUMPROTO, }; struct xt_target { struct list_head list; const char name[29]; u_int8_t revision; }; struct xt_af { struct list_head target; }; static struct xt_af *xt; struct xt_af * kcalloc (int, int, int); static int target_revfn (u8 af, const char *name, u8 revision, int *bestp) { const struct xt_target *t; int have_rev = 0; for (t = ( { void *__mptr = (void *)((&xt[af].target)->next); ((typeof (*t) *) (__mptr - __builtin_offsetof (typeof (*t), list)));} ); &t->list != (&xt[af].target); t = ( { void *__mptr = (void *)((t)->list.next); ((typeof (*(t)) *) (__mptr - __builtin_offsetof (typeof (*(t)), list)));} )) { if (strcmp (t->name, name) == 0) { if (t->revision > *bestp) *bestp = t->revision; if (t->revision == revision) have_rev = 1; } } if (af != NFPROTO_UNSPEC && !have_rev) return target_revfn (NFPROTO_UNSPEC, name, revision, bestp); return have_rev; } int xt_find_revision (u8 af, const char *name, u8 revision, int target, int *err) { int have_rev, best = -1; have_rev = target_revfn (af, name, revision, &best); if (best == -1) { *err = -2; return 0; } } static int __attribute__ ((__section__ (".init.text"))) __attribute__ ((__cold__)) xt_init (void) { xt = kcalloc (NFPROTO_NUMPROTO, sizeof (struct xt_af), (((gfp_t) (0x400u | 0x800u)) | ((gfp_t) 0x40u) | ((gfp_t) 0x80u))); } int init_module (void) __attribute__ ((__copy__ (xt_init))) __attribute__ ((alias ("xt_init")));;