diff options
Diffstat (limited to 'drivers/gator/gator_buffer_write.c')
-rw-r--r-- | drivers/gator/gator_buffer_write.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/drivers/gator/gator_buffer_write.c b/drivers/gator/gator_buffer_write.c index b621ba93ee5e..654ec606cfad 100644 --- a/drivers/gator/gator_buffer_write.c +++ b/drivers/gator/gator_buffer_write.c @@ -14,16 +14,17 @@ static void gator_buffer_write_packed_int(int cpu, int buftype, int x) char *buffer = per_cpu(gator_buffer, cpu)[buftype]; int packedBytes = 0; int more = true; + while (more) { - // low order 7 bits of x + /* low order 7 bits of x */ char b = x & 0x7f; + x >>= 7; - if ((x == 0 && (b & 0x40) == 0) || (x == -1 && (b & 0x40) != 0)) { + if ((x == 0 && (b & 0x40) == 0) || (x == -1 && (b & 0x40) != 0)) more = false; - } else { + else b |= 0x80; - } buffer[(write + packedBytes) & mask] = b; packedBytes++; @@ -39,16 +40,17 @@ static void gator_buffer_write_packed_int64(int cpu, int buftype, long long x) char *buffer = per_cpu(gator_buffer, cpu)[buftype]; int packedBytes = 0; int more = true; + while (more) { - // low order 7 bits of x + /* low order 7 bits of x */ char b = x & 0x7f; + x >>= 7; - if ((x == 0 && (b & 0x40) == 0) || (x == -1 && (b & 0x40) != 0)) { + if ((x == 0 && (b & 0x40) == 0) || (x == -1 && (b & 0x40) != 0)) more = false; - } else { + else b |= 0x80; - } buffer[(write + packedBytes) & mask] = b; packedBytes++; @@ -75,6 +77,7 @@ static void gator_buffer_write_bytes(int cpu, int buftype, const char *x, int le static void gator_buffer_write_string(int cpu, int buftype, const char *x) { int len = strlen(x); + gator_buffer_write_packed_int(cpu, buftype, len); gator_buffer_write_bytes(cpu, buftype, x, len); } |