af_bluetooth.c (5f6cd79f477743cab98fd49feb03a39e0138b32f) af_bluetooth.c (d97636980f6ba7344c8aa6fa349b9059c60ee478)
1/*
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as

--- 207 unchanged lines hidden (view full) ---

216 size_t copied;
217 int err;
218
219 BT_DBG("sock %p sk %p len %zu", sock, sk, len);
220
221 if (flags & (MSG_OOB))
222 return -EOPNOTSUPP;
223
1/*
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as

--- 207 unchanged lines hidden (view full) ---

216 size_t copied;
217 int err;
218
219 BT_DBG("sock %p sk %p len %zu", sock, sk, len);
220
221 if (flags & (MSG_OOB))
222 return -EOPNOTSUPP;
223
224 msg->msg_namelen = 0;
225
226 skb = skb_recv_datagram(sk, flags, noblock, &err);
227 if (!skb) {
224 skb = skb_recv_datagram(sk, flags, noblock, &err);
225 if (!skb) {
228 if (sk->sk_shutdown & RCV_SHUTDOWN)
226 if (sk->sk_shutdown & RCV_SHUTDOWN) {
227 msg->msg_namelen = 0;
229 return 0;
228 return 0;
229 }
230 return err;
231 }
232
233 copied = skb->len;
234 if (len < copied) {
235 msg->msg_flags |= MSG_TRUNC;
236 copied = len;
237 }
238
239 skb_reset_transport_header(skb);
240 err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
230 return err;
231 }
232
233 copied = skb->len;
234 if (len < copied) {
235 msg->msg_flags |= MSG_TRUNC;
236 copied = len;
237 }
238
239 skb_reset_transport_header(skb);
240 err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
241 if (err == 0)
241 if (err == 0) {
242 sock_recv_ts_and_drops(msg, sk, skb);
243
242 sock_recv_ts_and_drops(msg, sk, skb);
243
244 if (bt_sk(sk)->skb_msg_name)
245 bt_sk(sk)->skb_msg_name(skb, msg->msg_name,
246 &msg->msg_namelen);
247 else
248 msg->msg_namelen = 0;
249 }
250
244 skb_free_datagram(sk, skb);
245
246 return err ? : copied;
247}
248EXPORT_SYMBOL(bt_sock_recvmsg);
249
250static long bt_sock_data_wait(struct sock *sk, long timeo)
251{

--- 518 unchanged lines hidden ---
251 skb_free_datagram(sk, skb);
252
253 return err ? : copied;
254}
255EXPORT_SYMBOL(bt_sock_recvmsg);
256
257static long bt_sock_data_wait(struct sock *sk, long timeo)
258{

--- 518 unchanged lines hidden ---