summaryrefslogtreecommitdiff
path: root/src/lib/dlt_filetransfer.c
diff options
context:
space:
mode:
authorSimon Brandner <simon.brandner@partner.bmw.de>2013-02-05 14:16:10 +0100
committerAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>2013-07-19 16:54:40 +0200
commit3bbfc218fd5053e95c6de274ef5a28ca80bcdee2 (patch)
treeff2ecd2ac569e8c2bbb3ac1cc0e5969025de7c9c /src/lib/dlt_filetransfer.c
parente2943ff4cf2d7d2da4000e2ca35663a7c83675d7 (diff)
downloadDLT-daemon-3bbfc218fd5053e95c6de274ef5a28ca80bcdee2.tar.gz
some coverity fixes
fixed some merge problems Signed-off-by: Alexander Wenzel <Alexander.AW.Wenzel@bmw.de>
Diffstat (limited to 'src/lib/dlt_filetransfer.c')
-rw-r--r--src/lib/dlt_filetransfer.c99
1 files changed, 69 insertions, 30 deletions
diff --git a/src/lib/dlt_filetransfer.c b/src/lib/dlt_filetransfer.c
index ce18f52..8ef0072 100644
--- a/src/lib/dlt_filetransfer.c
+++ b/src/lib/dlt_filetransfer.c
@@ -50,7 +50,10 @@
** aw Alexander Wenzel BMW **
*******************************************************************************/
+#include <stdio.h>
+#include <string.h>
#include "dlt_filetransfer.h"
+#include "dlt_common.h"
//!Defines the buffer size of a single file package which will be logged to dlt
#define BUFFER_SIZE 1024
@@ -69,11 +72,18 @@ unsigned char buffer[BUFFER_SIZE];
//!Get some information about the file size of a file
/**See stat(2) for more informations.
* @param file Absolute file path
- * @return Returns the size of the file (if it is a regular file or a symbolic link) in bytes.
+ * @return Returns the size of the file (if it is a regular file or a symbolic link) in bytes. Returns 0 in case of error. Regard: can also be a size value!
*/
-unsigned long getFilesize(const char* file){
+unsigned long getFilesize(const char* file, int *ok){
struct stat st;
- stat(file, &st);
+
+ if ( -1 == stat(file, &st))
+ {
+ //we can only return 0, as the value is unsigned
+ *ok = 0;
+ return 0;
+ }
+ *ok = 1;
return (unsigned long)st.st_size;
}
@@ -106,15 +116,23 @@ void stringHash(const char* str, unsigned long *hash )
* @param file Absolute file path
* @return Returns a unique number associated with each filename
*/
-unsigned long getFileSerialNumber(const char* file){
+unsigned long getFileSerialNumber(const char* file, int *ok){
struct stat st;
unsigned long ret;
- stat(file, &st);
- ret = st.st_ino;
- ret = ret << (sizeof(ret)*8)/2;
- ret |= st.st_size;
- ret ^= st.st_ctime;
- stringHash(file, &ret);
+ if ( -1 == stat(file, &st))
+ {
+ *ok = 0;
+ ret = 0;
+ }
+ else
+ {
+ *ok = 1;
+ ret = st.st_ino;
+ ret = ret << (sizeof(ret)*8)/2;
+ ret |= st.st_size;
+ ret ^= st.st_ctime;
+ stringHash(file, &ret);
+ }
return ret;
}
@@ -191,13 +209,14 @@ void dlt_user_log_file_errorMessage(DltContext *fileContext, const char *filenam
if(errno != ENOENT)
{
+ int ok = 0;
DLT_LOG(*fileContext,DLT_LOG_ERROR,
DLT_STRING("FLER"),
DLT_INT(errorCode),
DLT_INT(-errno),
- DLT_UINT(getFileSerialNumber(filename)),
+ DLT_UINT(getFileSerialNumber(filename,&ok)),
DLT_STRING(filename),
- DLT_UINT(getFilesize(filename)),
+ DLT_UINT(getFilesize(filename,&ok)),
DLT_STRING(getFileCreationDate2(filename)),
DLT_UINT(dlt_user_log_file_packagesCount(fileContext,filename)),
DLT_UINT(BUFFER_SIZE),
@@ -226,11 +245,12 @@ int dlt_user_log_file_infoAbout(DltContext *fileContext, const char *filename){
if(isFile(filename))
{
+ int ok;
DLT_LOG(*fileContext,DLT_LOG_INFO,
DLT_STRING("FLIF"),
- DLT_STRING("file serialnumber"),DLT_UINT(getFileSerialNumber(filename)),
+ DLT_STRING("file serialnumber"),DLT_UINT(getFileSerialNumber(filename,&ok)),
DLT_STRING("filename"),DLT_STRING(filename),
- DLT_STRING("file size in bytes"),DLT_UINT(getFilesize(filename)),
+ DLT_STRING("file size in bytes"),DLT_UINT(getFilesize(filename,&ok)),
DLT_STRING("file creation date"),DLT_STRING(getFileCreationDate2(filename)),
DLT_STRING("number of packages"),DLT_UINT(dlt_user_log_file_packagesCount(fileContext, filename)),
DLT_STRING("FLIF")
@@ -296,7 +316,12 @@ int dlt_user_log_file_packagesCount(DltContext *fileContext, const char *filenam
if(isFile(filename))
{
packages = 1;
- filesize = getFilesize(filename);
+ int ok;
+ filesize = getFilesize(filename,&ok);
+ if (!ok){
+ dlt_user_log_file_errorMessage(fileContext,filename,DLT_FILETRANSFER_ERROR_PACKAGE_COUNT);
+ return -1;
+ }
if(filesize < BUFFER_SIZE)
{
return packages;
@@ -334,15 +359,16 @@ int dlt_user_log_file_header_alias(DltContext *fileContext,const char *filename,
if(isFile(filename))
{
+ int ok;
DLT_LOG(*fileContext,DLT_LOG_INFO,
- DLT_STRING("FLST"),
- DLT_UINT(getFileSerialNumber(filename)),
- DLT_STRING(alias),
- DLT_UINT(getFilesize(filename)),
- DLT_STRING(getFileCreationDate2(filename));
- DLT_UINT(dlt_user_log_file_packagesCount(fileContext,filename)),
- DLT_UINT(BUFFER_SIZE),
- DLT_STRING("FLST")
+ DLT_STRING("FLST"),
+ DLT_UINT(getFileSerialNumber(filename,&ok)),
+ DLT_STRING(alias),
+ DLT_UINT(getFilesize(filename,&ok)),
+ DLT_STRING(getFileCreationDate2(filename));
+ DLT_UINT(dlt_user_log_file_packagesCount(fileContext,filename)),
+ DLT_UINT(BUFFER_SIZE),
+ DLT_STRING("FLST")
);
return 0;
@@ -367,11 +393,12 @@ int dlt_user_log_file_header(DltContext *fileContext,const char *filename){
if(isFile(filename))
{
+ int ok;
DLT_LOG(*fileContext,DLT_LOG_INFO,
DLT_STRING("FLST"),
- DLT_UINT(getFileSerialNumber(filename)),
+ DLT_UINT(getFileSerialNumber(filename,&ok)),
DLT_STRING(filename),
- DLT_UINT(getFilesize(filename)),
+ DLT_UINT(getFilesize(filename,&ok)),
DLT_STRING(getFileCreationDate2(filename));
DLT_UINT(dlt_user_log_file_packagesCount(fileContext,filename)),
DLT_UINT(BUFFER_SIZE),
@@ -433,12 +460,23 @@ int dlt_user_log_file_data(DltContext *fileContext,const char *filename, int pac
// if(checkUserBufferForFreeSpace()<0)
// return DLT_FILETRANSFER_ERROR_FILE_DATA_USER_BUFFER_FAILED;
- fseek ( file , (packageToTransfer-1)*BUFFER_SIZE , SEEK_SET );
+ if ( 0 != fseek ( file , (packageToTransfer-1)*BUFFER_SIZE , SEEK_SET ) )
+ {
+ DLT_LOG(*fileContext,DLT_LOG_ERROR,
+ DLT_STRING("failed to fseek in file: "),
+ DLT_STRING(filename),
+ DLT_STRING("ferror:"),
+ DLT_INT(ferror(file))
+ );
+ fclose (file);
+ return -1;
+ }
readBytes = fread(buffer, sizeof(char), BUFFER_SIZE, file);
+ int ok = 0;
DLT_LOG(*fileContext,DLT_LOG_INFO,
DLT_STRING("FLDA"),
- DLT_UINT(getFileSerialNumber(filename)),
+ DLT_UINT(getFileSerialNumber(filename,&ok)),
DLT_UINT(packageToTransfer),
DLT_RAW(buffer,readBytes),
DLT_STRING("FLDA")
@@ -456,10 +494,10 @@ int dlt_user_log_file_data(DltContext *fileContext,const char *filename, int pac
{
pkgNumber++;
readBytes = fread(buffer, sizeof(char), BUFFER_SIZE, file);
-
+ int ok;
DLT_LOG(*fileContext,DLT_LOG_INFO,
DLT_STRING("FLDA"),
- DLT_UINT(getFileSerialNumber(filename)),
+ DLT_UINT(getFileSerialNumber(filename,&ok)),
DLT_UINT(pkgNumber),
DLT_RAW(buffer,readBytes),
DLT_STRING("FLDA")
@@ -493,9 +531,10 @@ int dlt_user_log_file_end(DltContext *fileContext,const char *filename,int delet
if(isFile(filename))
{
+ int ok;
DLT_LOG(*fileContext,DLT_LOG_INFO,
DLT_STRING("FLFI"),
- DLT_UINT(getFileSerialNumber(filename)),
+ DLT_UINT(getFileSerialNumber(filename,&ok)),
DLT_STRING("FLFI")
);