summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLuotao Fu <l.fu@pengutronix.de>2009-11-26 16:09:54 +0100
committerLuotao Fu <l.fu@pengutronix.de>2009-11-26 16:09:57 +0100
commit32c72a4868ab77d6e33359eee221ac9b502b25e1 (patch)
tree1a3244e22282a5f604b0016e1eca09b509f91beb /src
parent338a640d6f392d88a91fad6cc83c0b831914105c (diff)
downloadlibsocketcan-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.c88
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);
}