#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#include <err.h>
#include "../lpi.h"     /* for getSigname()
                         * implemented in ../defs.c
                         */

#define NO_EINTR(stmt) while ((stmt) == -1 && errno == EINTR);

void handler(int sig);

int
main(int argc, char *argv[])
{
    char buf[BUFSIZ];
    ssize_t cnt;

    if (signal(SIGINT, handler) == SIG_ERR)
        err(EXIT_FAILURE, "signal()");

    if (signal(SIGUSR1, handler) == SIG_ERR)
        err(EXIT_FAILURE, "signal()");

    printf("PID=%ld\n", (long) getpid());
    NO_EINTR(cnt = read(STDIN_FILENO, buf, BUFSIZ));
    if (cnt == -1)          /* read() failed with other than EINTR */
        err(EXIT_FAILURE, "read()");

    printf("read %ld characters\n", (long) cnt);
    buf[cnt] = '\0';
    printf("%s", buf);

    exit(EXIT_SUCCESS);
}

void
handler(int sig)
{
    printf("caught signal %d (%s)\n", sig, getSigname(sig));
}
