From 32c72a4868ab77d6e33359eee221ac9b502b25e1 Mon Sep 17 00:00:00 2001 From: Luotao Fu Date: Thu, 26 Nov 2009 16:09:54 +0100 Subject: removed duplicated code in get_ callbacks added a get_link internal callback to eliminate the duplicated code in _get functions. Signed-off-by: Luotao Fu --- src/socketcan_netlink.c | 88 ++++++++++++++----------------------------------- 1 file changed, 25 insertions(+), 63 deletions(-) (limited to 'src') diff --git a/src/socketcan_netlink.c b/src/socketcan_netlink.c index b2a7a33..f784fce 100644 --- a/src/socketcan_netlink.c +++ b/src/socketcan_netlink.c @@ -393,6 +393,26 @@ static int do_get_nl_link(int fd, __u8 acquire, const char *name, void *res) return ret; } +static int get_link(const char *name, __u8 acquire, void *res) +{ + int fd; + int err = -1; + + fd = open_nl_sock(); + if (fd < 0) + goto err_out; + + err = do_get_nl_link(fd, acquire, name, res); + if (err < 0) + goto close_out; + +close_out: + close(fd); +err_out: + return err; + +} + static int do_set_nl_link(int fd, __u8 if_state, const char *name, struct req_info *req_info) { @@ -597,83 +617,25 @@ int scan_set_bitrate(const char *name, __u32 bitrate, __u32 sample_point) int scan_get_state(const char *name, int *state) { - int fd; - int err; - - fd = open_nl_sock(); - if (fd < 0) - return -1; - - err = do_get_nl_link(fd, GET_STATE, name, state); - - close(fd); - - return err; + return get_link(name, GET_STATE, state); } int scan_get_restart_ms(const char *name, __u32 *restart_ms) { - int fd; - int err; - - fd = open_nl_sock(); - if (fd < 0) - return -1; - - err = do_get_nl_link(fd, GET_RESTART_MS, name, restart_ms); - - close(fd); - return err; - + return get_link(name, GET_RESTART_MS, restart_ms); } int scan_get_bittiming(const char *name, struct can_bittiming *bt) { - int fd; - int err; - - fd = open_nl_sock(); - if (fd < 0) - return -1; - - err = do_get_nl_link(fd, GET_BITTIMING, name, bt); - if (err < 0) - return -1; - - close(fd); - return 0; + return get_link(name, GET_BITTIMING, bt); } int scan_get_ctrlmode(const char *name, struct can_ctrlmode *cm) { - int fd; - int err; - - fd = open_nl_sock(); - if (fd < 0) - return -1; - - err = do_get_nl_link(fd, GET_CTRLMODE, name, cm); - if (err < 0) - return -1; - - close(fd); - return 0; + return get_link(name, GET_CTRLMODE, cm); } int scan_get_clock(const char *name, struct can_clock *clock) { - int fd; - int err; - - fd = open_nl_sock(); - if (fd < 0) - return -1; - - err = do_get_nl_link(fd, GET_CLOCK, name, clock); - if (err < 0) - return -1; - - close(fd); - return 0; + return get_link(name, GET_CLOCK, clock); } -- cgit v1.2.3