dynamically allocate fru_data array based on fru.size

This commit is contained in:
Duncan Laurie 2004-02-01 03:17:29 +00:00
parent 1435321c86
commit e0f8bb52bb

View File

@ -74,7 +74,8 @@ static void ipmi_fru_print(struct ipmi_intf * intf, unsigned char id)
{ {
struct ipmi_rs * rsp; struct ipmi_rs * rsp;
struct ipmi_rq req; struct ipmi_rq req;
unsigned char fru_data[256], msg_data[4]; unsigned char * fru_data;
unsigned char msg_data[4];
int i, len, offset; int i, len, offset;
struct fru_area_chassis chassis; struct fru_area_chassis chassis;
@ -101,6 +102,8 @@ static void ipmi_fru_print(struct ipmi_intf * intf, unsigned char id)
if (verbose > 1) if (verbose > 1)
printf("fru.size = %d bytes (accessed by %s)\n", printf("fru.size = %d bytes (accessed by %s)\n",
fru.size, fru.access ? "words" : "bytes"); fru.size, fru.access ? "words" : "bytes");
if (!fru.size)
return;
msg_data[0] = id; msg_data[0] = id;
msg_data[1] = 0; msg_data[1] = 0;
@ -151,8 +154,11 @@ static void ipmi_fru_print(struct ipmi_intf * intf, unsigned char id)
printf("fru.header.offset.multi: 0x%x\n", header.offset.multi); printf("fru.header.offset.multi: 0x%x\n", header.offset.multi);
} }
fru_data = malloc(fru.size+1);
if (!fru_data)
return;
memset(fru_data, 0, fru.size+1);
offset = 0; offset = 0;
memset(fru_data, 0, 256);
do { do {
msg_data[0] = id; msg_data[0] = id;
msg_data[1] = offset; msg_data[1] = offset;
@ -391,6 +397,8 @@ static void ipmi_fru_print(struct ipmi_intf * intf, unsigned char id)
i += h->len + sizeof (struct fru_multirec_header); i += h->len + sizeof (struct fru_multirec_header);
} while (!(h->format & 0x80)); } while (!(h->format & 0x80));
} }
free(fru_data);
} }
static void ipmi_fru_print_all(struct ipmi_intf * intf) static void ipmi_fru_print_all(struct ipmi_intf * intf)