ID: 65 - Fixes for configure.in for cross compilation

Commit is a re-work of ipmi_ek_display_fru_header_detail() (not limited to) to
get rid off warnings.
This commit is contained in:
Zdenek Styblik 2013-07-24 05:28:53 +00:00
parent 39bcb37d14
commit 4aea72e46f

View File

@ -275,7 +275,7 @@ static int ipmi_ek_check_physical_connectivity(
*****************************************************************************/ *****************************************************************************/
static int ipmi_ek_display_fru_header( char * filename ); static int ipmi_ek_display_fru_header( char * filename );
static void ipmi_ek_display_fru_header_detail( char * filename ); static int ipmi_ek_display_fru_header_detail(char * filename);
static void ipmi_ek_display_chassis_info_area( FILE * input_file, long offset ); static void ipmi_ek_display_chassis_info_area( FILE * input_file, long offset );
@ -469,6 +469,7 @@ ipmi_ekanalyzer_main( struct ipmi_intf * intf, int argc, char ** argv )
{ {
int rc = ERROR_STATUS; int rc = ERROR_STATUS;
int file_type[MAX_FILE_NUMBER]; int file_type[MAX_FILE_NUMBER];
int tmp_ret = 0;
char * filename[MAX_FILE_NUMBER]; char * filename[MAX_FILE_NUMBER];
unsigned int argument_offset = 0; unsigned int argument_offset = 0;
unsigned int type_offset = 0; unsigned int type_offset = 0;
@ -509,7 +510,7 @@ ipmi_ekanalyzer_main( struct ipmi_intf * intf, int argc, char ** argv )
if ( rc != ERROR_STATUS ){ if ( rc != ERROR_STATUS ){
/* Display FRU header info in detail record */ /* Display FRU header info in detail record */
ipmi_ek_display_fru_header_detail (filename[type_offset]); tmp_ret = ipmi_ek_display_fru_header_detail(filename[type_offset]);
/* Convert from binary data into multi record structure */ /* Convert from binary data into multi record structure */
rc = ipmi_ekanalyzer_fru_file2structure ( filename[type_offset], rc = ipmi_ekanalyzer_fru_file2structure ( filename[type_offset],
&list_head, &list_record, &list_last ); &list_head, &list_record, &list_last );
@ -2422,146 +2423,182 @@ ipmi_ek_display_fru_header(char * filename)
* Return: None * Return: None
* *
***************************************************************************/ ***************************************************************************/
static void static int
ipmi_ek_display_fru_header_detail( char * filename ) ipmi_ek_display_fru_header_detail(char * filename)
{ {
FILE * input_file; # define FACTOR_OFFSET 8
struct fru_header header; # define SIZE_MFG_DATE 3
FILE * input_file;
size_t file_offset = 0;
struct fru_header header;
time_t tval;
int ret = 0;
unsigned char data = 0;
unsigned char lan_code = 0;
unsigned char mfg_date[SIZE_MFG_DATE];
unsigned int board_length = 0;
input_file = fopen ( filename, "r"); input_file = fopen(filename, "r");
if ( input_file == NULL ){ if (input_file == NULL) {
lprintf(LOG_ERR, "file: '%s' is not found", filename); lprintf(LOG_ERR, "File '%s' not found.", filename);
} return (-1);
else{ }
/* the offset in each fru is in multiple of 8 bytes /* The offset in each fru is in multiple of 8 bytes
* See IPMI Platform Management FRU Information Storage Definition * See IPMI Platform Management FRU Information Storage Definition
* for detail * for detail
*/ */
#define FACTOR_OFFSET 8 ret = fread(&header, sizeof(struct fru_header), 1, input_file);
if ((ret != 1) || ferror(input_file)) {
lprintf(LOG_ERR, "Failed to read FRU header!");
fclose(input_file);
return (-1);
}
/*** Display FRU Internal Use Info ***/
if (!feof(input_file)) {
unsigned char format_version;
unsigned long len = 0;
if ( !feof (input_file) ){ printf("%s\n", EQUAL_LINE_LIMITER);
fread ( &header, sizeof( struct fru_header ), 1, input_file ); printf("FRU Internal Use Info\n");
} printf("%s\n", EQUAL_LINE_LIMITER);
else{
lprintf(LOG_ERR, "Invalid FRU header!");
}
/*** Display FRU Internal Use Info ***/
if ( !feof (input_file) ){
unsigned char format_version;
unsigned long len;
printf("%s\n", EQUAL_LINE_LIMITER); ret = fread(&format_version, 1, 1, input_file);
printf("FRU Internal Use Info\n"); if ((ret != 1) || ferror(input_file)) {
printf("%s\n", EQUAL_LINE_LIMITER); lprintf(LOG_ERR, "Invalid format version!");
fclose(input_file);
return (-1);
}
printf("Format Version: %d\n", (format_version & 0x0f));
fread ( &format_version, 1, 1, input_file ); if (header.offset.chassis > 0) {
printf("Format Version: %d\n", (format_version & 0x0f) ); len = (header.offset.chassis * FACTOR_OFFSET)
- (header.offset.internal * FACTOR_OFFSET);
} else {
len = (header.offset.board * FACTOR_OFFSET)
- (header.offset.internal * FACTOR_OFFSET);
}
printf("Length: %ld\n", len);
printf("Data dump:\n");
while ((len > 0) && (!feof(input_file))) {
unsigned char data;
ret = fread(&data, 1, 1, input_file);
if ((ret != 1) || ferror(input_file)) {
lprintf(LOG_ERR, "Invalid data!");
fclose(input_file);
return (-1);
}
printf("0x%02x ", data);
len--;
}
printf("\n");
}
/*** Chassis Info Area ***/
if (header.offset.chassis != 0) {
long offset = 0;
offset = header.offset.chassis * FACTOR_OFFSET;
ipmi_ek_display_chassis_info_area(input_file, offset);
}
/*** Display FRU Board Info Area ***/
while (1) {
if (header.offset.board == 0) {
break;
}
ret = fseek(input_file,
(header.offset.board * FACTOR_OFFSET),
SEEK_SET);
if (feof(input_file)) {
break;
}
file_offset = ftell(input_file);
printf("%s\n", EQUAL_LINE_LIMITER);
printf("FRU Board Info Area\n");
printf("%s\n", EQUAL_LINE_LIMITER);
if ( header.offset.chassis > 0 ){ ret = fread(&data, 1, 1, input_file); /* Format version */
len = (header.offset.chassis * FACTOR_OFFSET) if ((ret != 1) || ferror(input_file)) {
- (header.offset.internal * FACTOR_OFFSET); lprintf(LOG_ERR, "Invalid FRU Format Version!");
} fclose(input_file);
else{ return (-1);
len = (header.offset.board * FACTOR_OFFSET) }
- (header.offset.internal * FACTOR_OFFSET); printf("Format Version: %d\n", (data & 0x0f));
} if (feof(input_file)) {
printf("Length: %ld\n", len); break;
printf("Data dump:\n"); }
while ( (len > 0) && ( !feof (input_file) ) ) { ret = fread(&data, 1, 1, input_file); /* Board Area Length */
unsigned char data; if ((ret != 1) || ferror(input_file)) {
fread ( &data, 1, 1, input_file ); lprintf(LOG_ERR, "Invalid Board Area Length!");
printf("0x%02x ", data); fclose(input_file);
len --; return (-1);
} }
printf("\n"); board_length = (data * FACTOR_OFFSET);
} printf("Area Length: %d\n", board_length);
/*** Chassis Info Area ***/ /* Decrease the length of board area by 1 byte of format version
if (header.offset.chassis != 0){ * and 1 byte for area length itself. the rest of this length will
long offset = 0; * be used to check for additional custom mfg. byte
*/
board_length -= 2;
if (feof(input_file)) {
break;
}
ret = fread(&lan_code, 1, 1, input_file); /* Language Code */
if ((ret != 1) || ferror(input_file)) {
lprintf(LOG_ERR, "Invalid Language Code in input");
fclose(input_file);
return (-1);
}
printf("Language Code: %d\n", lan_code);
board_length--;
/* Board Mfg Date */
if (feof(input_file)) {
break;
}
offset = header.offset.chassis * FACTOR_OFFSET; ret = fread(mfg_date, SIZE_MFG_DATE, 1, input_file);
ipmi_ek_display_chassis_info_area (input_file, offset); if (ret != 1) {
} lprintf(LOG_ERR, "Invalid Board Data.");
/*** Display FRU Board Info Area ***/ fclose(input_file);
if (header.offset.board != 0){ return (-1);
fseek ( input_file, (header.offset.board * FACTOR_OFFSET), SEEK_SET); }
if ( !feof(input_file) ){ tval = ((mfg_date[2] << 16) + (mfg_date[1] << 8)
unsigned char data; + (mfg_date[0]));
unsigned int board_length; tval = tval * 60;
size_t file_offset = ftell (input_file); tval = tval + secs_from_1970_1996;
printf("Board Mfg Date: %ld, %s", tval,
printf("%s\n", EQUAL_LINE_LIMITER); asctime(localtime(&tval)));
printf("FRU Board Info Area\n"); board_length -= SIZE_MFG_DATE;
printf("%s\n", EQUAL_LINE_LIMITER); /* Board Mfg */
file_offset = ipmi_ek_display_board_info_area(
fread ( &data, 1, 1, input_file ); /* Format version */ input_file, "Board Manufacture Data", &board_length);
printf("Format Version: %d\n", (data & 0x0f)); ret = fseek(input_file, file_offset, SEEK_SET);
if ( !feof(input_file) ){ /* Board Product */
fread ( &data, 1, 1, input_file ); /* Board Area Length */ file_offset = ipmi_ek_display_board_info_area(
board_length = (data * FACTOR_OFFSET); input_file, "Board Product Name", &board_length);
printf("Area Length: %d\n", board_length); ret = fseek(input_file, file_offset, SEEK_SET);
/* Decrease the length of board area by 1 byte of format version /* Board Serial */
* and 1 byte for area length itself. the rest of this length will file_offset = ipmi_ek_display_board_info_area(
* be used to check for additional custom mfg. byte input_file, "Board Serial Number", &board_length);
*/ ret = fseek(input_file, file_offset, SEEK_SET);
board_length -= 2; /* Board Part */
} file_offset = ipmi_ek_display_board_info_area(
if ( !feof(input_file) ){ input_file, "Board Part Number", &board_length);
unsigned char lan_code; ret = fseek(input_file, file_offset, SEEK_SET);
fread ( &lan_code, 1, 1, input_file ); /* Language Code */ /* FRU file ID */
printf("Language Code: %d\n", lan_code ); file_offset = ipmi_ek_display_board_info_area(
board_length --; input_file, "FRU File ID", &board_length);
} ret = fseek(input_file, file_offset, SEEK_SET);
/* Board Mfg Date */ /* Additional Custom Mfg. */
if ( !feof(input_file) ){ file_offset = ipmi_ek_display_board_info_area(
#define SIZE_MFG_DATE 3 input_file, "Custom", &board_length);
time_t tval; break;
unsigned char mfg_date[SIZE_MFG_DATE]; }
/* Product Info Area */
fread ( mfg_date, SIZE_MFG_DATE, 1, input_file ); if (header.offset.product && (!feof(input_file))) {
tval=((mfg_date[2] << 16) + (mfg_date[1] << 8) + (mfg_date[0])); long offset = 0;
tval = tval * 60; offset = header.offset.product * FACTOR_OFFSET;
tval = tval + secs_from_1970_1996; ipmi_ek_display_product_info_area(input_file, offset);
printf("Board Mfg Date: %ld, %s", tval, }
asctime(localtime(&tval))); fclose(input_file);
board_length -= SIZE_MFG_DATE; return 0;
/* Board Mfg */
file_offset = ipmi_ek_display_board_info_area (
input_file, "Board Manufacture Data", &board_length);
fseek (input_file, file_offset, SEEK_SET);
/* Board Product */
file_offset = ipmi_ek_display_board_info_area (
input_file, "Board Product Name", &board_length);
fseek (input_file, file_offset, SEEK_SET);
/* Board Serial */
file_offset = ipmi_ek_display_board_info_area (
input_file, "Board Serial Number", &board_length);
fseek (input_file, file_offset, SEEK_SET);
/* Board Part */
file_offset = ipmi_ek_display_board_info_area (
input_file, "Board Part Number", &board_length);
fseek (input_file, file_offset, SEEK_SET);
/* FRU file ID */
file_offset = ipmi_ek_display_board_info_area (
input_file, "FRU File ID", &board_length);
fseek (input_file, file_offset, SEEK_SET);
/* Additional Custom Mfg. */
file_offset = ipmi_ek_display_board_info_area (
input_file, "Custom", &board_length);
}
}
}
/*** Product Info Area ***/
if ( header.offset.product ){
if ( !feof(input_file) ){
long offset = 0;
offset = header.offset.product * FACTOR_OFFSET;
ipmi_ek_display_product_info_area (input_file, offset);
}
}
fclose( input_file );
}
} }
/************************************************************************** /**************************************************************************