mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-28 20:02:17 +00:00
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>
This commit is contained in:
parent
3c619ffd48
commit
1a7809e349
1 changed files with 5 additions and 3 deletions
|
@ -423,14 +423,16 @@ void ide_fix_driveid(u16 *id)
|
|||
|
||||
void ide_fixstring (u8 *s, const int bytecount, const int byteswap)
|
||||
{
|
||||
u8 *p = s, *end = &s[bytecount & ~1]; /* bytecount must be even */
|
||||
u8 *p, *end = &s[bytecount & ~1]; /* bytecount must be even */
|
||||
|
||||
if (byteswap) {
|
||||
/* convert from big-endian to host byte order */
|
||||
for (p = end ; p != s;)
|
||||
be16_to_cpus((u16 *)(p -= 2));
|
||||
for (p = s ; p != end ; p += 2)
|
||||
be16_to_cpus((u16 *) p);
|
||||
}
|
||||
|
||||
/* strip leading blanks */
|
||||
p = s;
|
||||
while (s != end && *s == ' ')
|
||||
++s;
|
||||
/* compress internal blanks and strip trailing blanks */
|
||||
|
|
Loading…
Reference in a new issue