diff options
-rw-r--r-- | usr.sbin/moused/moused.c | 91 |
1 files changed, 53 insertions, 38 deletions
diff --git a/usr.sbin/moused/moused.c b/usr.sbin/moused/moused.c index d2cd265..587d505 100644 --- a/usr.sbin/moused/moused.c +++ b/usr.sbin/moused/moused.c @@ -68,6 +68,7 @@ static const char rcsid[] = #include <sys/types.h> #include <sys/time.h> #include <sys/socket.h> +#include <sys/stat.h> #include <sys/un.h> #include <unistd.h> @@ -104,38 +105,26 @@ static const char rcsid[] = #define ID_MODEL 8 #define ID_ALL (ID_PORT | ID_IF | ID_TYPE | ID_MODEL) -#define debug(fmt,args...) \ - if (debug&&nodaemon) warnx(fmt, ##args) +#define debug(fmt, args...) do { \ + if (debug && nodaemon) \ + warnx(fmt, ##args); \ +} while (0) -#define logerr(e, fmt, args...) { \ - if (background) { \ - syslog(LOG_DAEMON | LOG_ERR, fmt ": %m", ##args); \ - exit(e); \ - } else \ - err(e, fmt, ##args); \ -} +#define logerr(e, fmt, args...) do { \ + log_or_warn(LOG_DAEMON | LOG_ERR, errno, fmt, ##args); \ + exit(e); \ +} while (0) -#define logerrx(e, fmt, args...) { \ - if (background) { \ - syslog(LOG_DAEMON | LOG_ERR, fmt, ##args); \ - exit(e); \ - } else \ - errx(e, fmt, ##args); \ -} +#define logerrx(e, fmt, args...) do { \ + log_or_warn(LOG_DAEMON | LOG_ERR, 0, fmt, ##args); \ + exit(e); \ +} while (0) -#define logwarn(fmt, args...) { \ - if (background) \ - syslog(LOG_DAEMON | LOG_WARNING, fmt ": %m", ##args); \ - else \ - warn(fmt, ##args); \ -} +#define logwarn(fmt, args...) \ + log_or_warn(LOG_DAEMON | LOG_WARNING, errno, fmt, ##args) -#define logwarnx(fmt, args...) { \ - if (background) \ - syslog(LOG_DAEMON | LOG_WARNING, fmt, ##args); \ - else \ - warnx(fmt, ##args); \ -} +#define logwarnx(fmt, args...) \ + log_or_warn(LOG_DAEMON | LOG_WARNING, 0, fmt, ##args) /* structures */ @@ -475,6 +464,8 @@ static void moused(void); static void hup(int sig); static void cleanup(int sig); static void usage(void); +static void log_or_warn(int log_pri, int errnum, const char *fmt, ...) + __printflike(3, 4); static int r_identify(void); static char *r_if(int type); @@ -838,11 +829,11 @@ moused(void) int i; if ((rodent.cfd = open("/dev/consolectl", O_RDWR, 0)) == -1) - logerr(1, "cannot open /dev/consolectl", 0); + logerr(1, "cannot open /dev/consolectl"); - if (!nodaemon && !background) + if (!nodaemon && !background) { if (daemon(0, 0)) { - logerr(1, "failed to become a daemon", 0); + logerr(1, "failed to become a daemon"); } else { background = TRUE; fp = fopen(pidfile, "w"); @@ -851,6 +842,7 @@ moused(void) fclose(fp); } } + } /* clear mouse data */ bzero(&action0, sizeof(action0)); @@ -888,7 +880,7 @@ moused(void) c = select(FD_SETSIZE, &fds, NULL, NULL, (rodent.flags & Emulate3Button) ? &timeout : NULL); if (c < 0) { /* error */ - logwarn("failed to read from mouse", 0); + logwarn("failed to read from mouse"); continue; } else if (c == 0) { /* timeout */ /* assert(rodent.flags & Emulate3Button) */ @@ -1017,6 +1009,30 @@ usage(void) exit(1); } +/* + * Output an error message to syslog or stderr as appropriate. If + * `errnum' is non-zero, append its string form to the message. + */ +static void +log_or_warn(int log_pri, int errnum, const char *fmt, ...) +{ + va_list ap; + char buf[256]; + + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + if (errnum) { + strlcat(buf, ": ", sizeof(buf)); + strlcat(buf, strerror(errnum), sizeof(buf)); + } + + if (background) + syslog(log_pri, "%s", buf); + else + warnx("%s", buf); +} + /** ** Mouse interface code, courtesy of XFree86 3.1.2. ** @@ -2304,7 +2320,7 @@ setmousespeed(int old, int new, unsigned cflag) if (tcgetattr(rodent.mfd, &tty) < 0) { - logwarn("unable to get status of mouse fd", 0); + logwarn("unable to get status of mouse fd"); return; } @@ -2337,7 +2353,7 @@ setmousespeed(int old, int new, unsigned cflag) if (tcsetattr(rodent.mfd, TCSADRAIN, &tty) < 0) { - logwarn("unable to set status of mouse fd", 0); + logwarn("unable to set status of mouse fd"); return; } @@ -2370,14 +2386,14 @@ setmousespeed(int old, int new, unsigned cflag) { if (write(rodent.mfd, c, 2) != 2) { - logwarn("unable to write to mouse fd", 0); + logwarn("unable to write to mouse fd"); return; } } usleep(100000); if (tcsetattr(rodent.mfd, TCSADRAIN, &tty) < 0) - logwarn("unable to set status of mouse fd", 0); + logwarn("unable to set status of mouse fd"); } /* @@ -2539,7 +2555,6 @@ pnpgets(char *buf) * assuming there is something at the port even if it didn't * respond to the PnP enumeration procedure. */ -disconnect_idle: i = TIOCM_DTR | TIOCM_RTS; /* DTR = 1, RTS = 1 */ ioctl(rodent.mfd, TIOCMBIS, &i); return 0; @@ -2839,7 +2854,7 @@ typedef enum { static int kidspad(u_char rxc, mousestatus_t *act) { - static buf[5]; + static int buf[5]; static int buflen = 0, b_prev = 0 , x_prev = -1, y_prev = -1 ; static k_status status = S_IDLE ; static struct timeval old, now ; |