diff options
Diffstat (limited to 'src/daemon')
-rw-r--r-- | src/daemon/dlt-daemon.c | 44 | ||||
-rw-r--r-- | src/daemon/dlt_daemon_common.c | 43 |
2 files changed, 84 insertions, 3 deletions
diff --git a/src/daemon/dlt-daemon.c b/src/daemon/dlt-daemon.c index 24d327e..7e9b6ba 100644 --- a/src/daemon/dlt-daemon.c +++ b/src/daemon/dlt-daemon.c @@ -995,13 +995,25 @@ void dlt_daemon_daemonize(int verbose) /* Open standard descriptors stdin, stdout, stderr */ i=open("/dev/null",O_RDWR); /* open stdin */ ret=dup(i); /* stdout */ + if (0 > ret){ + dlt_log(LOG_CRIT, "can't open standard descriptor stdout\n"); + exit(-1); /* can not open */ + } ret=dup(i); /* stderr */ + if (0 > ret){ + dlt_log(LOG_CRIT, "can't open standard descriptor stderr"); + exit(-1); /* can not open */ + } /* Set umask */ umask(DLT_DAEMON_UMASK); /* Change to known directory */ ret=chdir(DLT_USER_DIR); + if (0 > ret){ + dlt_log(LOG_CRIT, "Can't change to known directory"); + exit(-1); /* Can't change to known directory */ + } /* Ensure single copy of daemon; run only one instance at a time */ @@ -1020,6 +1032,9 @@ void dlt_daemon_daemonize(int verbose) sprintf(str,"%d\n",getpid()); bytes_written=write(lfp,str,strlen(str)); /* record pid to lockfile */ + if (0 > bytes_written){ + dlt_log(LOG_CRIT, "write pid to lockfile failed:"); + } /* Catch signals */ signal(SIGCHLD,SIG_IGN); /* ignore child */ @@ -1917,10 +1932,22 @@ int dlt_daemon_process_user_message_log(DltDaemon *daemon, DltDaemonLocal *daemo if (daemon_local->flags.lflag) { ret=write(j,dltSerialHeader,sizeof(dltSerialHeader)); + if (0 > ret) + { + dlt_log(LOG_ERR,"write(j,daemon_local->msg.headerbuffer failed\n"); + } } ret=write(j,daemon_local->msg.headerbuffer+sizeof(DltStorageHeader),daemon_local->msg.headersize-sizeof(DltStorageHeader)); + if (0 > ret) + { + dlt_log(LOG_ERR,"write(j,dltSerialHeader failed\n"); + } ret=write(j,daemon_local->msg.databuffer,daemon_local->msg.datasize); + if (0 > ret) + { + dlt_log(LOG_ERR,"write(j,daemon_local->msg.databuffer failed\n"); + } DLT_DAEMON_SEM_FREE(); @@ -2314,10 +2341,22 @@ int dlt_daemon_send_ringbuffer_to_client(DltDaemon *daemon, DltDaemonLocal *daem if (daemon_local->flags.lflag) { ret=write(j,dltSerialHeader,sizeof(dltSerialHeader)); + if (0 > ret) + { + dlt_log(LOG_ERR, "dlt_daemon_send_ringbuffer_to_client: write(j,dltSerialHeader,sizeof(dltSerialHeader)) failed!\n"); + DLT_DAEMON_SEM_FREE(); + return -1; + } } ret=write(j,data,length); - + if (0 > ret) + { + dlt_log(LOG_ERR, "dlt_daemon_send_ringbuffer_to_client: write(j,data,length) failed!\n"); + DLT_DAEMON_SEM_FREE(); + return -1; + } DLT_DAEMON_SEM_FREE(); + } } /* if */ } /* for */ @@ -2569,6 +2608,9 @@ void dlt_daemon_wait_period (DltDaemonPeriodicData *info, int verbose) PRINT_FUNCTION_VERBOSE(verbose); ret = read (info->timer_fd, &missed, sizeof (missed)); + if (0 > ret){ + dlt_log(LOG_ERR,"dlt_daemon_wait_period: Read failed"); + } if (missed > 0) { diff --git a/src/daemon/dlt_daemon_common.c b/src/daemon/dlt_daemon_common.c index 3e24475..7bbce7b 100644 --- a/src/daemon/dlt_daemon_common.c +++ b/src/daemon/dlt_daemon_common.c @@ -485,6 +485,12 @@ int dlt_daemon_applications_load(DltDaemon *daemon,const char *filename, int ver /* Get line */ ret=fgets(buf,sizeof(buf),fd); + if (NULL == ret) + { + snprintf(str,DLT_DAEMON_COMMON_TEXTBUFSIZE, "dlt_daemon_applications_load fgets(buf,sizeof(buf),fd) returned NULL"); + dlt_log(LOG_ERR, str); + return -1;//seems to be appropriate, but not sure. !feof is already a precondition, so another problem should the reason! + } if (strcmp(buf,"")!=0) { @@ -824,6 +830,13 @@ int dlt_daemon_contexts_load(DltDaemon *daemon,const char *filename, int verbose /* Get line */ ret=fgets(buf,sizeof(buf),fd); + if (NULL == ret) + { + sprintf(str,"dlt_daemon_contexts_load: fgets(buf,sizeof(buf),fd);"); + dlt_log(LOG_ERR, str); + fclose(fd); + return -1;//as we are not eof, there seems to be another problem. + } if (strcmp(buf,"")!=0) { @@ -2122,7 +2135,7 @@ void dlt_daemon_control_send_ecu_version(int sock, DltDaemon *daemon, const char { DltMessage msg; uint32_t len; - DltServiceGetSoftwareVersionResponse *resp; + DltServiceGetSoftwareVersionResponse *resp; PRINT_FUNCTION_VERBOSE(verbose); @@ -2254,11 +2267,29 @@ void dlt_daemon_control_send_control_message( int sock, DltDaemon *daemon, DltMe if (daemon->sendserialheader) { ret=write(sock,dltSerialHeader,sizeof(dltSerialHeader)); + if (0 > ret) + { + dlt_log(LOG_CRIT,"dlt_daemon_control_send_control_message: write dltSerialHeader failed\n"); + DLT_DAEMON_SEM_FREE(); + return; + } } /* Send data */ ret=write(sock, msg->headerbuffer+sizeof(DltStorageHeader),msg->headersize-sizeof(DltStorageHeader)); + if (0 > ret) + { + dlt_log(LOG_CRIT,"dlt_daemon_control_send_control_message: write msg->headerbuffer failed\n"); + DLT_DAEMON_SEM_FREE(); + return; + } ret=write(sock, msg->databuffer,msg->datasize); + if (0 > ret) + { + dlt_log(LOG_CRIT,"dlt_daemon_control_send_control_message: write msg->databuffer failed\n"); + DLT_DAEMON_SEM_FREE(); + return; + } DLT_DAEMON_SEM_FREE(); } @@ -2485,7 +2516,15 @@ void dlt_daemon_control_message_time(int sock, DltDaemon *daemon, int verbose) /* Send data */ ret=write(sock, msg.headerbuffer+sizeof(DltStorageHeader),msg.headersize-sizeof(DltStorageHeader)); if(msg.datasize > 0) - ret=write(sock, msg.databuffer,msg.datasize); + { + ret=write(sock, msg.databuffer,msg.datasize); + if (0 > ret){ + dlt_log(LOG_CRIT,"dlt_daemon_control_message_time: Failed to write databuffer\n"); + dlt_message_free(&msg,0); + DLT_DAEMON_SEM_FREE(); + return; + } + } DLT_DAEMON_SEM_FREE(); } |