diff options
author | Peter Schiffer <pschiffe@redhat.com> | 2013-08-29 14:50:10 +0200 |
---|---|---|
committer | Peter Schiffer <pschiffe@redhat.com> | 2013-08-29 14:50:10 +0200 |
commit | 1c9b7c9781b92c4c21e62ecf47cf3413d2d2298a (patch) | |
tree | 415b2d8f300bb635cf6628ce2112aa27cb2aa373 /src/hardware/utils.c | |
parent | 229d407bf7d03cda4c6b5b9fc5c1102ffc06c2f8 (diff) | |
download | openlmi-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.c | 29 |
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; |