]> rtime.felk.cvut.cz Git - socketcan-devel.git/commitdiff
Introduced return value to raw_[add|remove]_filters() to communicate
authorhartkopp <hartkopp@030b6a49-0b11-0410-94ab-b0dab22257f2>
Mon, 11 Jun 2007 16:51:54 +0000 (16:51 +0000)
committerhartkopp <hartkopp@030b6a49-0b11-0410-94ab-b0dab22257f2>
Mon, 11 Jun 2007 16:51:54 +0000 (16:51 +0000)
can_rx_(un)register() problems.

git-svn-id: svn://svn.berlios.de//socketcan/trunk@336 030b6a49-0b11-0410-94ab-b0dab22257f2

kernel/2.6/net/can/raw.c

index aa36f57839272b5763b2bd193712d1e8e1654549..d9b5b42e4411d35f1cee62a6fd555994ffdddd74 100644 (file)
@@ -152,34 +152,41 @@ static void raw_rcv(struct sk_buff *skb, void *data)
        }
 }
 
-static void raw_add_filters(int ifindex, struct sock *sk)
+static int raw_add_filters(int ifindex, struct sock *sk)
 {
        struct raw_opt *ro = raw_sk(sk);
        struct can_filter *filter = ro->filter;
+       int ret = 0;
        int i;
 
-       for (i = 0; i < ro->count; i++) {
-               can_rx_register(ifindex, filter[i].can_id, filter[i].can_mask,
-                               raw_rcv, sk, IDENT);
+       for (i = 0; i < ro->count && !ret; i++) {
+               ret = can_rx_register(ifindex, filter[i].can_id,
+                                     filter[i].can_mask,
+                                     raw_rcv, sk, IDENT);
                DBG("filter can_id %08X, can_mask %08X%s, sk %p\n",
                    filter[i].can_id, filter[i].can_mask,
                    filter[i].can_id & CAN_INV_FILTER ? " (inv)" : "", sk);
        }
+
+       return ret;
 }
 
-static void raw_remove_filters(int ifindex, struct sock *sk)
+static int raw_remove_filters(int ifindex, struct sock *sk)
 {
        struct raw_opt *ro = raw_sk(sk);
        struct can_filter *filter = ro->filter;
+       int ret = 0;
        int i;
 
-       for (i = 0; i < ro->count; i++) {
-               can_rx_unregister(ifindex, filter[i].can_id,
-                                 filter[i].can_mask, raw_rcv, sk);
+       for (i = 0; i < ro->count && !ret; i++) {
+               ret = can_rx_unregister(ifindex, filter[i].can_id,
+                                       filter[i].can_mask, raw_rcv, sk);
                DBG("filter can_id %08X, can_mask %08X%s, sk %p\n",
                    filter[i].can_id, filter[i].can_mask,
                    filter[i].can_id & CAN_INV_FILTER ? " (inv)" : "", sk);
        }
+
+       return ret;
 }
 
 static int raw_init(struct sock *sk)