/*
* Receive wall messages and pass them to a notification program via stdin.
*
- * Copyright (C) 2014 Simon Ruderich
+ * Copyright (C) 2014-2015 Simon Ruderich
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#endif
+static sig_atomic_t signaled = 0;
+
+
static void sig_handler(int signal) {
(void)signal;
+
+ signaled = 1;
}
static void setup_signals(void) {
struct sigaction action;
static int login(int ptm) {
#if defined(USE_UTEMPTER)
int result = utempter_add_record(ptm, NULL);
- /* Exit value of utempter_*() is not correct on all systems, e.g.
- * FreeBSD() always returns 0. Checking the utmpx database manually is
- * difficult because we don't know the exact values for ut_id and ut_line,
- * therefore we only check the return value on systems known to return a
- * useful value. */
+ /* Exit value of utempter_*() is not correct on all systems, e.g. FreeBSD
+ * always returns 0. Checking the utmpx database manually is difficult
+ * because we don't know the exact values for ut_id and ut_line, therefore
+ * we only check the return value on systems known to return a useful
+ * value. */
# ifndef __linux
result = 1;
# endif
ssize_t r;
assert(SSIZE_MAX <= SIZE_MAX);
- while ((r = read(fd, buffer, sizeof(buffer))) > 0) {
+ while (!signaled && (r = read(fd, buffer, sizeof(buffer))) > 0) {
size_t space;
ssize_t r2;