// SPDX-License-Identifier: GPL-2.0
/*
 * Simple poll on a file.
 *
 * Copyright (c) 2024 Google LLC.
 */

#include <errno.h>
#include <fcntl.h>
#include <poll.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define BUFSIZE 4096

/*
 * Usage:
 *  poll [-I|-P] [-t timeout] FILE
 */
int main(int argc, char *argv[])
{
	struct pollfd pfd = {.events = POLLIN};
	char buf[BUFSIZE];
	int timeout = -1;
	int ret, opt;

	while ((opt = getopt(argc, argv, "IPt:")) != -1) {
		switch (opt) {
		case 'I':
			pfd.events = POLLIN;
			break;
		case 'P':
			pfd.events = POLLPRI;
			break;
		case 't':
			timeout = atoi(optarg);
			break;
		default:
			fprintf(stderr, "Usage: %s [-I|-P] [-t timeout] FILE\n",
				argv[0]);
			return -1;
		}
	}
	if (optind >= argc) {
		fprintf(stderr, "Error: Polling file is not specified\n");
		return -1;
	}

	pfd.fd = open(argv[optind], O_RDONLY);
	if (pfd.fd < 0) {
		fprintf(stderr, "failed to open %s", argv[optind]);
		perror("open");
		return -1;
	}

	/* Reset poll by read if POLLIN is specified. */
	if (pfd.events & POLLIN)
		do {} while (read(pfd.fd, buf, BUFSIZE) == BUFSIZE);

	ret = poll(&pfd, 1, timeout);
	if (ret < 0 && errno != EINTR) {
		perror("poll");
		return -1;
	}
	close(pfd.fd);

	/* If timeout happened (ret == 0), exit code is 1 */
	if (ret == 0)
		return 1;

	return 0;
}
