diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-10 16:39:22 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-10-10 16:39:22 -0400 |
commit | 1a7809e3499921a016d203b9ee51a77d3cc1dc98 (patch) | |
tree | 5b9186f201cb85565f9f85c0bd1e8679bb204645 /drivers/ide/ide-iops.c | |
parent | 3c619ffd48d7fdb3b17f0df67c4eb4b0bd80e253 (diff) |
ide: re-code ide_fixstring() loop to be less evil
On Friday 25 July 2008, Linus Torvalds wrote:
>
> On Fri, 25 Jul 2008, Ben Dooks wrote:
> >
> > personally, i would much prefer to see the loop being less evil
> > like:
> >
> > for (p = s; p < end; p += 2)
> > be16_to_cpus((u16 *)p);
>
> Well, in this case, the code actually depends on 'p' being back at the
> start of the buffer by the end of it all, so it would need some more
> changes than that.
>
> But yes, I applied David's patch, but I _also_ suspect that we would be
> better off without code that does horrid things like casts and assignments
> inside the function arguments.
>
> So it would be nice to re-code that loop to be more readable. But due to
> the reliance of 'p' being 's' after the loop, the minimal patch would be
> something like the appended.
>
> Bartlomiej - take this or not, I'm not going to commit it - I haven't
> tested it, nor do I even have any machines that would trigger it. So this
> is more a "maybe something like this" than anything else.
From: Linus Torvalds <torvalds@linux-foundation.org>
CC: Ben Dooks <ben-linux@fluff.org>
Cc: David Miller <davem@davemloft.net>
Cc: harvey.harrison@gmail.com
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/ide-iops.c')
-rw-r--r-- | drivers/ide/ide-iops.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index 8cfa6125c7a4..004803030f64 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c | |||
@@ -423,14 +423,16 @@ void ide_fix_driveid(u16 *id) | |||
423 | 423 | ||
424 | void ide_fixstring (u8 *s, const int bytecount, const int byteswap) | 424 | void ide_fixstring (u8 *s, const int bytecount, const int byteswap) |
425 | { | 425 | { |
426 | u8 *p = s, *end = &s[bytecount & ~1]; /* bytecount must be even */ | 426 | u8 *p, *end = &s[bytecount & ~1]; /* bytecount must be even */ |
427 | 427 | ||
428 | if (byteswap) { | 428 | if (byteswap) { |
429 | /* convert from big-endian to host byte order */ | 429 | /* convert from big-endian to host byte order */ |
430 | for (p = end ; p != s;) | 430 | for (p = s ; p != end ; p += 2) |
431 | be16_to_cpus((u16 *)(p -= 2)); | 431 | be16_to_cpus((u16 *) p); |
432 | } | 432 | } |
433 | |||
433 | /* strip leading blanks */ | 434 | /* strip leading blanks */ |
435 | p = s; | ||
434 | while (s != end && *s == ' ') | 436 | while (s != end && *s == ' ') |
435 | ++s; | 437 | ++s; |
436 | /* compress internal blanks and strip trailing blanks */ | 438 | /* compress internal blanks and strip trailing blanks */ |