Messages in this thread Patch in this message |  | | Date | Tue, 08 May 2001 01:04:57 +0200 | From | Jesper Juhl <> | Subject | Patch to improve readability of sock_rcvlowat() - comments wanted... |
| |
Hi all,
Some time ago I posted about a question about some cleanup of what I thought looked like some strange code in the kernel - specifically about the sock_rcvlowat() function in linux/include/net/sock.h
static inline int sock_rcvlowat(struct sock *sk, int waitall, int len) { return (waitall ? len : min(sk->rcvlowat, len)) ? : 1; }
The empty second expression puzzled me. Mark Hahn (amongst many other people) pointed out to me that it was a valid gcc extention (thank you), but I still found it hard to read and exchanged several emails with Mark about how to improve the function. Mark came up with a much more readable version that achieves the exact same result and generates just as good (if not better) code than the original one-line function - the function below:
static inline int sock_rcvlowat(struct sock *sk, int waitall, int len) { int r = len; if (!waitall) r = min(sk->rcvlowat, len); return max(1,r); }
I have included a patch below (against 2.4.5pre1) that makes the change to the more readable version and would like people on the list to consider it as a replacement. Credit for the code should go 100% to Mark as he wrote it, I'm just submitting it to the list since I found it so nice :-)
--- linux-2.4.5pre1/include/net/sock.h Tue May 8 00:12:14 2001 +++ linux/include/net/sock.h Tue May 8 00:46:43 2001 @@ -1265,7 +1265,10 @@
static inline int sock_rcvlowat(struct sock *sk, int waitall, int len) { - return (waitall ? len : min(sk->rcvlowat, len)) ? : 1; + int r = len; + if (!waitall) + r = min(sk->rcvlowat, len); + return max(1,r); }
/* Alas, with timeout socket operations are not restartable.
Best regards, Jesper Juhl - juhl@eisenstein.dk - struggeling to understand this magnificent kernel beast ;) -
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |