delloem: Fix the unalign bug in arm64

For computers using the arm64 of the Apple chip, the link requires strict
alignment of pointers in 32-bit form. Replace the struct vFlashstr to valstr.
Replace the Function get_vFlash_compcode_str to val2str.

Resolves ipmitool/ipmitool#332
Signed-off-by: SliderLu <314238828@qq.com>
This commit is contained in:
SliderLu 2022-11-16 23:39:49 +08:00 committed by Alexander Amelkin
parent 8f0946a81e
commit 206dba615d
2 changed files with 2 additions and 30 deletions

View File

@ -343,10 +343,6 @@ typedef struct _power_headroom
uint16_t peakheadroom; uint16_t peakheadroom;
} __attribute__ ((packed)) POWER_HEADROOM; } __attribute__ ((packed)) POWER_HEADROOM;
struct vFlashstr {
uint8_t val;
const char * str;
};
typedef struct ipmi_vFlash_extended_info typedef struct ipmi_vFlash_extended_info
{ {
uint8_t vflashcompcode; uint8_t vflashcompcode;

View File

@ -115,7 +115,7 @@ char NIC_Selection_Mode_String_12g[] [50] = {
"shared with failover all loms" "shared with failover all loms"
}; };
const struct vFlashstr vFlash_completion_code_vals[] = { const struct valstr vFlash_completion_code_vals[] = {
{0x00, "SUCCESS"}, {0x00, "SUCCESS"},
{0x01, "NO_SD_CARD"}, {0x01, "NO_SD_CARD"},
{0x63, "UNKNOWN_ERROR"}, {0x63, "UNKNOWN_ERROR"},
@ -232,8 +232,6 @@ static void ipmi_powermonitor_usage(void);
/* vFlash Function prototypes */ /* vFlash Function prototypes */
static int ipmi_delloem_vFlash_main(struct ipmi_intf *intf, int argc, static int ipmi_delloem_vFlash_main(struct ipmi_intf *intf, int argc,
char **argv); char **argv);
const char *get_vFlash_compcode_str(uint8_t vflashcompcode,
const struct vFlashstr *vs);
static int ipmi_get_sd_card_info(struct ipmi_intf *intf); static int ipmi_get_sd_card_info(struct ipmi_intf *intf);
static int ipmi_delloem_vFlash_process(struct ipmi_intf *intf, int current_arg, static int ipmi_delloem_vFlash_process(struct ipmi_intf *intf, int current_arg,
char **argv); char **argv);
@ -3756,28 +3754,6 @@ ipmi_delloem_vFlash_main(struct ipmi_intf * intf, int __UNUSED__(argc), char **
rc = ipmi_delloem_vFlash_process(intf, current_arg, argv); rc = ipmi_delloem_vFlash_process(intf, current_arg, argv);
return rc; return rc;
} }
/*
* Function Name: get_vFlash_compcode_str
*
* Description: This function maps the vFlash completion code
* to a string
* Input : vFlash completion code and static array of codes vs strings
* Output: -
* Return: returns the mapped string
*/
const char *
get_vFlash_compcode_str(uint8_t vflashcompcode, const struct vFlashstr *vs)
{
static char un_str[32];
int i;
for (i = 0; vs[i].str; i++) {
if (vs[i].val == vflashcompcode)
return vs[i].str;
}
memset(un_str, 0, 32);
snprintf(un_str, 32, "Unknown (0x%02X)", vflashcompcode);
return un_str;
}
/* /*
* Function Name: ipmi_get_sd_card_info * Function Name: ipmi_get_sd_card_info
* *
@ -3822,7 +3798,7 @@ ipmi_get_sd_card_info(struct ipmi_intf * intf) {
return -1; return -1;
} else if (sdcardinfoblock->vflashcompcode != 0x00) { } else if (sdcardinfoblock->vflashcompcode != 0x00) {
lprintf(LOG_ERR, "Error in getting SD Card Extended Information (%s)", lprintf(LOG_ERR, "Error in getting SD Card Extended Information (%s)",
get_vFlash_compcode_str(sdcardinfoblock->vflashcompcode, val2str(sdcardinfoblock->vflashcompcode,
vFlash_completion_code_vals)); vFlash_completion_code_vals));
return -1; return -1;
} }