Fix num_to_nibble()
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 23 Aug 2016 21:12:05 +0000 (17:12 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 30 Aug 2016 19:34:05 +0000 (15:34 -0400)
If you passed it a negative number, the mod wouldn't take the lower 4 bits.
I originally went with % 16 so it'd be clear we're dealing with 16
characters in the array.  That needed to be unsigned.  While I'm here, I'll
just do the masking too, in case this code gets copied and morphed a bit.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/drivers/dev/version.c

index 129ad0b..ea4d117 100644 (file)
@@ -117,9 +117,9 @@ static void ver_close(struct chan *c)
 }
 
 /* Returns a char representing the lowest 4 bits of x */
-static char num_to_nibble(int x)
+static char num_to_nibble(unsigned int x)
 {
-       return "0123456789abcdef"[x % 16];
+       return "0123456789abcdef"[x & 0xf];
 }
 
 static ssize_t read_buildid(void *va, long n, off64_t off)