summaryrefslogtreecommitdiffstats
path: root/src/hardware/utils.c
diff options
context:
space:
mode:
authorPeter Schiffer <pschiffe@redhat.com>2013-08-29 14:50:10 +0200
committerPeter Schiffer <pschiffe@redhat.com>2013-08-29 14:50:10 +0200
commit1c9b7c9781b92c4c21e62ecf47cf3413d2d2298a (patch)
tree415b2d8f300bb635cf6628ce2112aa27cb2aa373 /src/hardware/utils.c
parent229d407bf7d03cda4c6b5b9fc5c1102ffc06c2f8 (diff)
downloadopenlmi-providers-1c9b7c9781b92c4c21e62ecf47cf3413d2d2298a.tar.gz
openlmi-providers-1c9b7c9781b92c4c21e62ecf47cf3413d2d2298a.tar.xz
openlmi-providers-1c9b7c9781b92c4c21e62ecf47cf3413d2d2298a.zip
Hardware: Fixed Coverity findings
Fixed Coverity findings, enhanced fail case scenarios.
Diffstat (limited to 'src/hardware/utils.c')
-rw-r--r--src/hardware/utils.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/hardware/utils.c b/src/hardware/utils.c
index 1d80411..f23be27 100644
--- a/src/hardware/utils.c
+++ b/src/hardware/utils.c
@@ -26,8 +26,8 @@ short read_fp_to_2d_buffer(FILE *fp, char ***buffer, unsigned *buffer_size)
short ret = -1;
ssize_t read;
size_t line_len = 0;
- unsigned tmp_buffer_lines, lines_read = 0;
- char **tmp_buffer, *line = NULL;
+ unsigned tmp_buffer_lines = 0, lines_read = 0;
+ char **tmp_buffer = NULL, *line = NULL;
free_2d_buffer(buffer, buffer_size);
@@ -42,6 +42,7 @@ short read_fp_to_2d_buffer(FILE *fp, char ***buffer, unsigned *buffer_size)
tmp_buffer = (char **)calloc(tmp_buffer_lines, sizeof(char *));
if (!tmp_buffer) {
warn("Failed to allocate memory.");
+ tmp_buffer_lines = 0;
ret = -3;
goto done;
}
@@ -59,6 +60,7 @@ short read_fp_to_2d_buffer(FILE *fp, char ***buffer, unsigned *buffer_size)
tmp_buffer_lines * sizeof(char *));
if (!newtmp) {
warn("Failed to allocate memory.");
+ tmp_buffer_lines /= 2;
ret = -4;
goto done;
}
@@ -86,15 +88,15 @@ short read_fp_to_2d_buffer(FILE *fp, char ***buffer, unsigned *buffer_size)
/* reallocate buffer to free unused space */
if (tmp_buffer_lines > lines_read) {
- tmp_buffer_lines = lines_read;
char **newtmp = (char **)realloc(tmp_buffer,
- tmp_buffer_lines * sizeof(char *));
+ lines_read * sizeof(char *));
if (!newtmp) {
warn("Failed to allocate memory.");
ret = -7;
goto done;
}
tmp_buffer = newtmp;
+ tmp_buffer_lines = lines_read;
}
*buffer_size = tmp_buffer_lines;
@@ -117,7 +119,7 @@ void free_2d_buffer(char ***buffer, unsigned *buffer_size)
unsigned i, tmp_buffer_lines = *buffer_size;
char **tmp_buffer = *buffer;
- if (tmp_buffer_lines > 0) {
+ if (tmp_buffer && tmp_buffer_lines > 0) {
for (i = 0; i < tmp_buffer_lines; i++) {
free(tmp_buffer[i]);
tmp_buffer[i] = NULL;
@@ -132,7 +134,7 @@ void free_2d_buffer(char ***buffer, unsigned *buffer_size)
short run_command(const char *command, char ***buffer, unsigned *buffer_size)
{
- FILE *fp;
+ FILE *fp = NULL;
short ret = -1;
/* if command is empty */
@@ -185,9 +187,16 @@ done:
short read_file(const char *filename, char ***buffer, unsigned *buffer_size)
{
- FILE *fp;
+ FILE *fp = NULL;
short ret = -1;
+ /* if filename is empty */
+ if (!filename || strlen(filename) < 1) {
+ warn("Given file name is empty.");
+ ret = -4;
+ goto done;
+ }
+
/* open file */
debug("Reading \"%s\" file.", filename);
fp = fopen(filename, "r");
@@ -307,6 +316,7 @@ short explode(const char *str, const char *delims, char ***buffer, unsigned *buf
tmp_buffer = (char **)calloc(tmp_buffer_size, sizeof(char *));
if (!tmp_buffer) {
warn("Failed to allocate memory.");
+ tmp_buffer_size = 0;
ret = -2;
goto done;
}
@@ -329,6 +339,7 @@ short explode(const char *str, const char *delims, char ***buffer, unsigned *buf
tmp_buffer_size * sizeof(char *));
if (!new_temp) {
warn("Failed to allocate memory.");
+ tmp_buffer_size /= 2;
ret = -3;
goto done;
}
@@ -347,15 +358,15 @@ short explode(const char *str, const char *delims, char ***buffer, unsigned *buf
/* reallocate to save unused space */
if (tmp_buffer_size > item) {
- tmp_buffer_size = item;
char **new_temp = (char **)realloc(tmp_buffer,
- tmp_buffer_size * sizeof(char *));
+ item * sizeof(char *));
if (!new_temp) {
warn("Failed to allocate memory.");
ret = -5;
goto done;
}
tmp_buffer = new_temp;
+ tmp_buffer_size = item;
}
*buffer_size = tmp_buffer_size;