Messages in this thread | | | Date | Wed, 13 Jan 2010 03:53:56 -0500 | From | William Allen Simpson <> | Subject | Re: [PATCH 1/2] net: tcp_header_len_th and tcp_option_len_th |
| |
Eric Dumazet wrote: > I type my Changelog text, add my signature, then copy/paste patch from external editor > (this editor must preserve tabulations of course) > That doesn't work properly on a Mac, copying from BBEdit to Thunderbird.
BBEdit preserves tabs and even understands and preserves Unix LF (and I've been using it for a Unix editor since it was included with Xinu in early '90s), but the MacOS copy and paste seems to mangle it.
I'll try again someday with Thunderbird 3, when it's had time to mature.
> About cast games, maybe following way is the cleanest one. > > int tcp_options_len_th(struct tcphdr *th) > { > return tcp_header_len_th(th) - sizeof(*th); > } > If you'd have been one of my C students, you'd have failed the exam question. That's unsigned int tcp_header_len_th() -- subtracting an untyped constant could be a negative number (stored in an unsigned). Then demotion to int (which many compilers truncate to a very large positive number).
It's one of the reasons that folks used to do all this with macros, so that the types and truncation were handled well by the compiler.
Of course, this is an inline function, which is more like macros. I've not studied how gcc works internally since egcs.
Let's keep (int)(th->doff * 4) - sizeof(*th) -- self documenting, and should work with a wide variety of compilers.
| |