From 56b7cadaeb51a60afa5666e190906d332840d5a1 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 3 Apr 2011 19:05:48 +0200 Subject: move immediate protocol state transitions to a wrapper function --- proto.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) (limited to 'proto.c') diff --git a/proto.c b/proto.c index 287eae5..b16600c 100644 --- a/proto.c +++ b/proto.c @@ -15,8 +15,31 @@ default_proto_free(struct interface_proto_state *proto) static int default_proto_handler(struct interface_proto_state *proto, enum interface_proto_cmd cmd, bool force) +{ + return 0; +} + +struct interface_proto_state *get_default_proto(void) +{ + struct interface_proto_state *proto; + + proto = calloc(1, sizeof(*proto)); + proto->handler = default_proto_handler; + proto->free = default_proto_free; + proto->flags = PROTO_FLAG_IMMEDIATE; + + return proto; +} + +int interface_proto_event(struct interface_proto_state *proto, + enum interface_proto_cmd cmd, bool force) { enum interface_event ev; + int ret; + + ret = proto->handler(proto, cmd, force); + if (ret || !(proto->flags & PROTO_FLAG_IMMEDIATE)) + goto out; switch(cmd) { case PROTO_CMD_SETUP: @@ -29,15 +52,7 @@ default_proto_handler(struct interface_proto_state *proto, return -EINVAL; } proto->proto_event(proto, ev); - return 0; -} -struct interface_proto_state *get_default_proto(void) -{ - struct interface_proto_state *proto; - - proto = calloc(1, sizeof(*proto)); - proto->handler = default_proto_handler; - proto->free = default_proto_free; - return proto; +out: + return ret; } -- cgit v1.2.3