board_serial: use a uint8_t buffer

we should not be using 'char' for binary APIs, as the C standard does
not specify if it is signed or unsigned, so results may not be
consistent
This commit is contained in:
Andrew Tridgell 2014-03-25 10:56:33 +11:00 committed by Lorenz Meier
parent 0d0c4c3626
commit 37b4cdfce2
4 changed files with 7 additions and 7 deletions

View File

@ -1784,7 +1784,7 @@ fmu_main(int argc, char *argv[])
}
if (!strcmp(verb, "id")) {
char id[12];
uint8_t id[12];
(void)get_board_serial(id);
errx(0, "Board serial:\n %02X%02X%02X%02X %02X%02X%02X%02X %02X%02X%02X%02X",

View File

@ -44,11 +44,11 @@
#include "board_config.h"
#include "board_serial.h"
int get_board_serial(char *serialid)
int get_board_serial(uint8_t *serialid)
{
const volatile unsigned *udid_ptr = (const unsigned *)UDID_START;
const volatile uint32_t *udid_ptr = (const uint32_t *)UDID_START;
union udid id;
val_read((unsigned *)&id, udid_ptr, sizeof(id));
val_read((uint32_t *)&id, udid_ptr, sizeof(id));
/* Copy the serial from the chips non-write memory and swap endianess */
@ -57,4 +57,4 @@ int get_board_serial(char *serialid)
serialid[8] = id.data[11]; serialid[9] = id.data[10]; serialid[10] = id.data[9]; serialid[11] = id.data[8];
return 0;
}
}

View File

@ -44,6 +44,6 @@
__BEGIN_DECLS
__EXPORT int get_board_serial(char *serialid);
__EXPORT int get_board_serial(uint8_t *serialid);
__END_DECLS

View File

@ -125,7 +125,7 @@ struct otp_lock {
#pragma pack(push, 1)
union udid {
uint32_t serial[3];
char data[12];
uint8_t data[12];
};
#pragma pack(pop)