From cbd51314c3245174b42070a66089b27472486b00 Mon Sep 17 00:00:00 2001 From: Alexander Mohr Date: Wed, 16 Dec 2020 17:31:50 +0100 Subject: bug-fix: fix invalid file descriptor check Some functions validated file descriptor to be greater 0. If a process is started without stdin, stdout and stderr the first file descriptor allocated by the process will be 0. This also will be the case if the above mentioned file descriptors will be closed on purpose. As 0 is a valid fd, some methods had to be changed to reflect this. Signed-off-by: Alexander Mohr --- src/shared/dlt_offline_trace.c | 4 ++-- src/shared/dlt_user_shared.c | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/shared/dlt_offline_trace.c b/src/shared/dlt_offline_trace.c index 1f6a5d5..2d70a77 100644 --- a/src/shared/dlt_offline_trace.c +++ b/src/shared/dlt_offline_trace.c @@ -396,7 +396,7 @@ DltReturnValue dlt_offline_trace_write(DltOfflineTrace *trace, int size3) { - if (trace->ohandle <= 0) + if (trace->ohandle < 0) return DLT_RETURN_ERROR; /* check file size here */ @@ -440,7 +440,7 @@ DltReturnValue dlt_offline_trace_write(DltOfflineTrace *trace, DltReturnValue dlt_offline_trace_free(DltOfflineTrace *trace) { - if (trace->ohandle <= 0) + if (trace->ohandle < 0) return DLT_RETURN_ERROR; /* close last used log file */ diff --git a/src/shared/dlt_user_shared.c b/src/shared/dlt_user_shared.c index 857a6e9..732301c 100644 --- a/src/shared/dlt_user_shared.c +++ b/src/shared/dlt_user_shared.c @@ -108,7 +108,7 @@ DltReturnValue dlt_user_log_out2(int handle, void *ptr1, size_t len1, void *ptr2 struct iovec iov[2]; uint32_t bytes_written; - if (handle <= 0) + if (handle < 0) /* Invalid handle */ return DLT_RETURN_ERROR; @@ -130,7 +130,7 @@ DltReturnValue dlt_user_log_out3(int handle, void *ptr1, size_t len1, void *ptr2 struct iovec iov[3]; uint32_t bytes_written; - if (handle <= 0) + if (handle < 0) /* Invalid handle */ return DLT_RETURN_ERROR; @@ -145,6 +145,11 @@ DltReturnValue dlt_user_log_out3(int handle, void *ptr1, size_t len1, void *ptr2 if (bytes_written != (len1 + len2 + len3)) { switch (errno) { + case ETIMEDOUT: + { + return DLT_RETURN_PIPE_ERROR; /* ETIMEDOUT - connect timeout */ + break; + } case EBADF: { return DLT_RETURN_PIPE_ERROR; /* EBADF - handle not open */ -- cgit v1.2.1