]> ruderich.org/simon Gitweb - wall-notify/wall-notify.git/blobdiff - src/wall-notify.c
remove superfluous braces in comment
[wall-notify/wall-notify.git] / src / wall-notify.c
index 95c4d8f8fad53d19534e449aff21b5c078914f30..e0d556db1386387e567bcb7967cb0fe9f1e213fb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * 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;
@@ -164,11 +169,11 @@ static int set_utmpx(short type, int ptm) {
 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
@@ -332,7 +337,7 @@ static void handle_wall(int fd, char **argv) {
     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;