- changed select to uselect
- some fixes in tecs.c
This commit is contained in:
@ -172,7 +172,7 @@ int CocCmdWithRetry(CocConn *conn) {
|
|||||||
}
|
}
|
||||||
iret=CocTryCmd(conn);
|
iret=CocTryCmd(conn);
|
||||||
if (iret>=0) break;
|
if (iret>=0) break;
|
||||||
close(conn->fd);
|
if (conn->fd > 0) close(conn->fd);
|
||||||
conn->fd=-1;
|
conn->fd=-1;
|
||||||
if (iret==-1) goto OnError; /* severe error */
|
if (iret==-1) goto OnError; /* severe error */
|
||||||
ErrShort(ErrMessage);
|
ErrShort(ErrMessage);
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "coc_server.h"
|
#include "coc_server.h"
|
||||||
#include "myc_str.h"
|
#include "myc_str.h"
|
||||||
#include "myc_time.h"
|
#include "myc_time.h"
|
||||||
|
#include "uselect.h"
|
||||||
|
|
||||||
#define COC_NUL COC_SEP
|
#define COC_NUL COC_SEP
|
||||||
|
|
||||||
@ -480,7 +481,7 @@ void CocShowHandlers(char *buf, int buf_len) {
|
|||||||
#ifdef __VMS
|
#ifdef __VMS
|
||||||
typedef size_t socklen_type;
|
typedef size_t socklen_type;
|
||||||
#else
|
#else
|
||||||
typedef int socklen_type;
|
typedef socklen_t socklen_type;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int CocHandle1Request(int tmo_msec, int fd) {
|
int CocHandle1Request(int tmo_msec, int fd) {
|
||||||
@ -496,10 +497,10 @@ int CocHandle1Request(int tmo_msec, int fd) {
|
|||||||
|
|
||||||
rmask=mask;
|
rmask=mask;
|
||||||
if (fd>0) FD_SET(fd, &rmask);
|
if (fd>0) FD_SET(fd, &rmask);
|
||||||
|
if (fd>=maxfd) maxfd=fd+1;
|
||||||
tmo.tv_sec=tmo_msec / 1000;
|
tmo.tv_sec=tmo_msec / 1000;
|
||||||
tmo.tv_usec=(tmo_msec % 1000)*1000+1;
|
tmo.tv_usec=(tmo_msec % 1000)*1000+1;
|
||||||
if (fd>=maxfd) maxfd=fd+1;
|
ERR_I(i=uselect(maxfd,&rmask,NULL,NULL,&tmo));
|
||||||
ERR_SI(i=select(maxfd,&rmask,NULL,NULL,&tmo));
|
|
||||||
if (fd>0 && FD_ISSET(fd, &rmask)) return(1); /* event on fd */
|
if (fd>0 && FD_ISSET(fd, &rmask)) return(1); /* event on fd */
|
||||||
if (i==0) return(0); /* timeout */
|
if (i==0) return(0); /* timeout */
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "myc_err.h"
|
#include "myc_err.h"
|
||||||
#include "myc_str.h"
|
#include "myc_str.h"
|
||||||
#include "coc_util.h"
|
#include "coc_util.h"
|
||||||
|
#include "uselect.h"
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
/* CreateSocketAddress stolen from Tcl. Thanks to John Ousterhout */
|
/* CreateSocketAddress stolen from Tcl. Thanks to John Ousterhout */
|
||||||
|
|
||||||
@ -52,7 +53,7 @@ void CocDelay(int msec) {
|
|||||||
|
|
||||||
tmo.tv_sec=msec / 1000;
|
tmo.tv_sec=msec / 1000;
|
||||||
tmo.tv_usec=(msec % 1000)*1000+1;
|
tmo.tv_usec=(msec % 1000)*1000+1;
|
||||||
select(1,NULL,NULL,NULL,&tmo);
|
uselect(1,NULL,NULL,NULL,&tmo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
@ -79,7 +80,7 @@ int CocRecv(int fd, StrBuf *buf, int timeout, int *flag) {
|
|||||||
|
|
||||||
FD_ZERO(&mask);
|
FD_ZERO(&mask);
|
||||||
FD_SET(fd, &mask);
|
FD_SET(fd, &mask);
|
||||||
ERR_SI(i=select(fd+1,&mask,NULL,NULL,&tmo));
|
ERR_SI(i=uselect(fd+1,&mask,NULL,NULL,&tmo));
|
||||||
if (flag!=NULL) {
|
if (flag!=NULL) {
|
||||||
*flag=0;
|
*flag=0;
|
||||||
if (i==0) return(0);
|
if (i==0) return(0);
|
||||||
|
@ -10,10 +10,10 @@
|
|||||||
|
|
||||||
LIBR_OBJ =coc_util.o myc_err.o myc_str.o myc_buf.o myc_time.o
|
LIBR_OBJ =coc_util.o myc_err.o myc_str.o myc_buf.o myc_time.o
|
||||||
SERV_OBJ =tecs.o coc_server.o tecs_lsc.o tecs_serial.o coc_logfile.o \
|
SERV_OBJ =tecs.o coc_server.o tecs_lsc.o tecs_serial.o coc_logfile.o \
|
||||||
tecs_data.o tecs_logger.o $(LIBR_OBJ)
|
tecs_data.o tecs_logger.o uselect.o $(LIBR_OBJ)
|
||||||
CLI_OBJ =tecs_cli.o coc_client.o $(LIBR_OBJ)
|
CLI_OBJ =tecs_cli.o coc_client.o $(LIBR_OBJ)
|
||||||
TCLI_OBJ =sys_getenv.o sys_env.o myc_tmp.o sys_cmdpar.o \
|
TCLI_OBJ =sys_getenv.o sys_env.o myc_tmp.o sys_cmdpar.o \
|
||||||
sys_date.o sys_wait.o sys_lun.o sys_rdline.o \
|
sys_date.o sys_wait.o sys_lun.o sys_rdline.o uselect.o \
|
||||||
sys_get_key.o sys_unix.o sys_open$(SYS_OPEN).o \
|
sys_get_key.o sys_unix.o sys_open$(SYS_OPEN).o \
|
||||||
$(CLI_OBJ)
|
$(CLI_OBJ)
|
||||||
TECLI_OBJ =tecs_client.o tecs_plot.o str.o instr_hosts.o \
|
TECLI_OBJ =tecs_client.o tecs_plot.o str.o instr_hosts.o \
|
||||||
@ -71,7 +71,7 @@ tecs_serial.o: tecs_serial.c
|
|||||||
keep_running: keep_running.c
|
keep_running: keep_running.c
|
||||||
$(CC) $(CFLAGS) -o $@ $Q $(FORTIFYOBJ)
|
$(CC) $(CFLAGS) -o $@ $Q $(FORTIFYOBJ)
|
||||||
|
|
||||||
six: six.c term.o sys_select.o libtecsl.a instr_hosts.o
|
six: six.c term.o sys_select.o libtecsl.a instr_hosts.o uselect.o
|
||||||
$(CC) $(CFLAGS) -o $@ $Q $(FORTIFYOBJ)
|
$(CC) $(CFLAGS) -o $@ $Q $(FORTIFYOBJ)
|
||||||
|
|
||||||
rexstart: rstart.c myc_str.o myc_err.o instr_hosts.o
|
rexstart: rstart.c myc_str.o myc_err.o instr_hosts.o
|
||||||
|
@ -21,6 +21,7 @@ void *outarg;
|
|||||||
void ErrTxt(char *text, int systemError)
|
void ErrTxt(char *text, int systemError)
|
||||||
{
|
{
|
||||||
if (systemError) {
|
if (systemError) {
|
||||||
|
stack_empty = 0;
|
||||||
sp=0; ErrCode=errno; ErrMessage=strerror(errno);
|
sp=0; ErrCode=errno; ErrMessage=strerror(errno);
|
||||||
}
|
}
|
||||||
if (stack_empty && sp>0) {
|
if (stack_empty && sp>0) {
|
||||||
|
@ -241,6 +241,7 @@ int str_ncpy(char *dst, const char *src, int maxdest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int str_ncat(char *dst, const char *src, int maxdest) {
|
int str_ncat(char *dst, const char *src, int maxdest) {
|
||||||
|
dst[maxdest-1]='\0';
|
||||||
strncat(dst, src, maxdest-strlen(dst)-1);
|
strncat(dst, src, maxdest-strlen(dst)-1);
|
||||||
if (dst[maxdest-1]!='\0') {
|
if (dst[maxdest-1]!='\0') {
|
||||||
dst[maxdest-1]='\0';
|
dst[maxdest-1]='\0';
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
#include "uselect.h"
|
||||||
|
|
||||||
static int lastFd=-1;
|
static int lastFd=-1;
|
||||||
static struct termios atts;
|
static struct termios atts;
|
||||||
@ -53,7 +54,7 @@ int sys_select_or_key(fd_set *mask, int msecTmo, int *key) {
|
|||||||
|
|
||||||
sys_keys_on();
|
sys_keys_on();
|
||||||
rmask=*mask;
|
rmask=*mask;
|
||||||
iret=select(FD_SETSIZE, &rmask, NULL, NULL, &tmo0);
|
iret=uselect(FD_SETSIZE, &rmask, NULL, NULL, &tmo0);
|
||||||
if (iret<0) {
|
if (iret<0) {
|
||||||
FD_ZERO(&rmask);
|
FD_ZERO(&rmask);
|
||||||
perror("error in select");
|
perror("error in select");
|
||||||
@ -72,9 +73,9 @@ int sys_select_or_key(fd_set *mask, int msecTmo, int *key) {
|
|||||||
}
|
}
|
||||||
tmo.tv_sec=msecTmo / 1000;
|
tmo.tv_sec=msecTmo / 1000;
|
||||||
tmo.tv_usec=(msecTmo%1000)*1000;
|
tmo.tv_usec=(msecTmo%1000)*1000;
|
||||||
iret=select(FD_SETSIZE, &rmask, NULL, NULL, &tmo);
|
iret=uselect(FD_SETSIZE, &rmask, NULL, NULL, &tmo);
|
||||||
} else {
|
} else {
|
||||||
iret=select(FD_SETSIZE, &rmask, NULL, NULL, NULL);
|
iret=uselect(FD_SETSIZE, &rmask, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
if (iret<0) {
|
if (iret<0) {
|
||||||
FD_ZERO(&rmask);
|
FD_ZERO(&rmask);
|
||||||
|
@ -633,6 +633,7 @@ again:
|
|||||||
loop=1;
|
loop=1;
|
||||||
initMaxPower=1;
|
initMaxPower=1;
|
||||||
resist=10;
|
resist=10;
|
||||||
|
nScan=0;
|
||||||
} else {
|
} else {
|
||||||
InitSensor(&sensC);
|
InitSensor(&sensC);
|
||||||
InitSensor(&sensD);
|
InitSensor(&sensD);
|
||||||
@ -1831,7 +1832,7 @@ int Settings(void) {
|
|||||||
if (k>4) k=kk;
|
if (k>4) k=kk;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
k = kk + nScan + 1;
|
/* k = kk + nScan + 1; */
|
||||||
if (k > 4) k = 5;
|
if (k > 4) k = 5;
|
||||||
}
|
}
|
||||||
maxfld=k-1;
|
maxfld=k-1;
|
||||||
@ -2337,7 +2338,7 @@ int PeriodicTask(void) {
|
|||||||
ERR_P(LscCmd(ser, "ALMRST"));
|
ERR_P(LscCmd(ser, "ALMRST"));
|
||||||
}
|
}
|
||||||
} else if (loop == 1) {
|
} else if (loop == 1) {
|
||||||
if (!relay0) logfileOut(LOG_MAIN, "Relay is on!\n");
|
if (relay && !relay0) logfileOut(LOG_MAIN, "Relay is on!\n");
|
||||||
alarmStatus[0]='\0';
|
alarmStatus[0]='\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2630,7 +2631,6 @@ int DeviceHdl(int mode, void *base, int fd) {
|
|||||||
t=strchr(device, '/');
|
t=strchr(device, '/');
|
||||||
if (t==NULL) {
|
if (t==NULL) {
|
||||||
if (0==strcmp(device, "0") || 0==strcasecmp(device, "auto")) {
|
if (0==strcmp(device, "0") || 0==strcasecmp(device, "auto")) {
|
||||||
nScan=0;
|
|
||||||
ERR_I(ConfigByCode(0));
|
ERR_I(ConfigByCode(0));
|
||||||
ERR_I(ConfigByCode(1));
|
ERR_I(ConfigByCode(1));
|
||||||
} else {
|
} else {
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "coc_util.h"
|
#include "coc_util.h"
|
||||||
#include "myc_str.h"
|
#include "myc_str.h"
|
||||||
#include "myc_mem.h"
|
#include "myc_mem.h"
|
||||||
|
#include "uselect.h"
|
||||||
|
|
||||||
#define ASYNSRV_TYPE 1
|
#define ASYNSRV_TYPE 1
|
||||||
#define TERMSRV_TYPE 2
|
#define TERMSRV_TYPE 2
|
||||||
@ -50,9 +51,11 @@ int SerWait(int tmo_msec, int fd) {
|
|||||||
|
|
||||||
FD_ZERO(&mask);
|
FD_ZERO(&mask);
|
||||||
FD_SET(fd, &mask);
|
FD_SET(fd, &mask);
|
||||||
|
|
||||||
tmo.tv_sec=tmo_msec / 1000;
|
tmo.tv_sec=tmo_msec / 1000;
|
||||||
tmo.tv_usec=(tmo_msec % 1000) % 1000 +1;
|
tmo.tv_usec=(tmo_msec % 1000) % 1000 +1;
|
||||||
ERR_SI(i=select(fd+1,&mask,NULL,NULL,&tmo));
|
ERR_SI(i=uselect(fd+1,&mask,NULL,NULL,&tmo));
|
||||||
|
|
||||||
if (i==0) return(0); /* timeout */
|
if (i==0) return(0); /* timeout */
|
||||||
return(1);
|
return(1);
|
||||||
OnError: return(-1);
|
OnError: return(-1);
|
||||||
|
@ -67,7 +67,7 @@ int term_wait_socket(int socket, int msecTmo) {
|
|||||||
FD_SET(STDIN_FILENO, &mask);
|
FD_SET(STDIN_FILENO, &mask);
|
||||||
tmo.tv_sec=msecTmo / 1000;
|
tmo.tv_sec=msecTmo / 1000;
|
||||||
tmo.tv_usec=(msecTmo % 1000) * 1000;
|
tmo.tv_usec=(msecTmo % 1000) * 1000;
|
||||||
i=select(FD_SETSIZE, &mask, NULL, NULL, &tmo);
|
i=uselect(FD_SETSIZE, &mask, NULL, NULL, &tmo);
|
||||||
if (FD_ISSET(STDIN_FILENO, &mask)) {
|
if (FD_ISSET(STDIN_FILENO, &mask)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
18
tecs/uselect.c
Normal file
18
tecs/uselect.c
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#include <signal.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include "uselect.h"
|
||||||
|
|
||||||
|
/* an uninterruptable version of select. M.Z. Oct 2008 */
|
||||||
|
|
||||||
|
int uselect(int nfds,
|
||||||
|
fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
||||||
|
struct timeval *timeout) {
|
||||||
|
|
||||||
|
sigset_t sigmask;
|
||||||
|
struct timespec tmo;
|
||||||
|
|
||||||
|
sigfillset(&sigmask);
|
||||||
|
tmo.tv_sec = timeout->tv_sec;
|
||||||
|
tmo.tv_nsec = timeout->tv_usec * 1000;
|
||||||
|
return pselect(nfds, readfds, writefds, exceptfds, &tmo, &sigmask);
|
||||||
|
}
|
7
tecs/uselect.h
Normal file
7
tecs/uselect.h
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#include <sys/select.h>
|
||||||
|
|
||||||
|
/* an uninterruptable version of select. M.Z. Oct 2008 */
|
||||||
|
|
||||||
|
int uselect(int nfds,
|
||||||
|
fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
||||||
|
struct timeval *timeout);
|
Reference in New Issue
Block a user