From e99e525a53f16d62b5d9ce56acec7b9f3cdae277 Mon Sep 17 00:00:00 2001 From: Zdenek Styblik Date: Fri, 8 Mar 2013 20:32:07 +0000 Subject: [PATCH] ID: 3600911 - 'lib/ipmi_fru.c' - rewrite of ipmi_fru_get_multirec_from_file() Commit is a rewrite of function ipmi_fru_get_multirec_from_file() in 'lib/ipmi_fru.c'. Changes: * argument size is checked; size must be greater than 0 * argument pFileName is checked * return value of seek() is checked * error messages are printed on STDERR * code flow got a re-work --- ipmitool/lib/ipmi_fru.c | 43 +++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/ipmitool/lib/ipmi_fru.c b/ipmitool/lib/ipmi_fru.c index 06f2fc5..059c06f 100644 --- a/ipmitool/lib/ipmi_fru.c +++ b/ipmitool/lib/ipmi_fru.c @@ -42,6 +42,7 @@ #include #include #include +#include #if HAVE_CONFIG_H # include @@ -3850,28 +3851,40 @@ ipmi_fru_get_adjust_size_from_buffer(uint8_t * fru_data, uint32_t *pSize) } static int -ipmi_fru_get_multirec_from_file(char * pFileName, - uint8_t * pBufArea, - uint32_t size, - uint32_t offset) +ipmi_fru_get_multirec_from_file(char * pFileName, uint8_t * pBufArea, + uint32_t size, uint32_t offset) { FILE * pFile; uint32_t len = 0; - - pFile = fopen(pFileName,"rb"); - if (pFile) { - fseek(pFile, offset,SEEK_SET); - len = fread(pBufArea, size, 1, pFile); - fclose(pFile); - } else { - printf("Error opening file\n"); + if (size < 0) { + return (-1); } + if (pFileName == NULL) { + lprintf(LOG_ERR, "Invalid file name given."); + return (-1); + } + + errno = 0; + pFile = fopen(pFileName, "rb"); + if (!pFile) { + lprintf(LOG_ERR, "Error opening file '%s': %i -> %s.", pFileName, errno, + strerror(errno)); + return (-1); + } + errno = 0; + if (fseek(pFile, offset, SEEK_SET) != 0) { + lprintf(LOG_ERR, "Failed to seek in file '%s': %i -> %s.", pFileName, errno, + strerror(errno)); + fclose(pFile); + return (-1); + } + len = fread(pBufArea, size, 1, pFile); + fclose(pFile); if (len != 1) { - printf("Error with file %s\n", pFileName); - return -1; + lprintf(LOG_ERR, "Error in file '%s'.", pFileName); + return (-1); } - return 0; }