X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=src%2Fwall-notify.c;h=7fb3b33cbc0bdaaf2e7436abf77bd7ca4b8d4fa1;hb=d9e9fb8ccfa208052b89aee8cfd3fc6c38752b96;hp=13e7829926f04708708e084d1dd147e895f864ff;hpb=637459052b01632ce2c4e9e36c93509f65fb4788;p=wall-notify%2Fwall-notify.git diff --git a/src/wall-notify.c b/src/wall-notify.c index 13e7829..7fb3b33 100644 --- a/src/wall-notify.c +++ b/src/wall-notify.c @@ -143,7 +143,16 @@ static int set_utmpx(short type, int ptm) { #endif static int login(int ptm) { #if defined(USE_UTEMPTER) - return utempter_add_record(ptm, NULL); + 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. */ +# ifndef __linux + result = 1; +# endif + return result; #elif defined(USE_UTMPX) return set_utmpx(USER_PROCESS, ptm); #else @@ -152,7 +161,12 @@ static int login(int ptm) { } static int logout(int ptm) { #if defined(USE_UTEMPTER) - return utempter_remove_record(ptm); + int result = utempter_remove_record(ptm); + /* See above. */ +# ifndef __linux + result = 1; +# endif + return result; #elif defined(USE_UTMPX) return set_utmpx(DEAD_PROCESS, ptm); #else @@ -191,9 +205,6 @@ static void pass_buffer_to_program(const char *buffer, size_t length, char **arg pid_t pid; - /* Skip argv[0]. */ - argv++; - if (pipe(fds) != 0) { perror("pipe"); return; @@ -280,14 +291,23 @@ static void handle_wall(int fd, char **argv) { } } +static void usage(const char *argv0) { + fprintf(stderr, "usage: %s \n", argv0); + exit(EXIT_FAILURE); +} + int main(int argc, char **argv) { int ptm, pts; char *name; + const char *argv0; + + argv0 = argv[0]; + /* Don't pass our argv[0] to the notification program. */ + argv++; if (argc < 2) { - fprintf(stderr, "usage: %s \n", argv[0]); - exit(EXIT_FAILURE); + usage(argv0); } ptm = open_tty();