diff options
author | Luotao Fu <l.fu@pengutronix.de> | 2009-11-26 16:09:54 +0100 |
---|---|---|
committer | Luotao Fu <l.fu@pengutronix.de> | 2009-11-26 16:09:57 +0100 |
commit | 32c72a4868ab77d6e33359eee221ac9b502b25e1 (patch) | |
tree | 1a3244e22282a5f604b0016e1eca09b509f91beb /src | |
parent | 338a640d6f392d88a91fad6cc83c0b831914105c (diff) | |
download | libsocketcan-32c72a4868ab77d6e33359eee221ac9b502b25e1.tar.gz libsocketcan-32c72a4868ab77d6e33359eee221ac9b502b25e1.tar.xz |
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 <l.fu@pengutronix.de>
Diffstat (limited to 'src')
-rw-r--r-- | src/socketcan_netlink.c | 88 |
1 files changed, 25 insertions, 63 deletions
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); } |