#include <sys/types.h>
#include <sys/ioctl.h>
#include <termios.h>
#include <atf-c.h>
#include <libutil.h>
#define newpty(masterp, slavep) openpty((masterp), (slavep), NULL, NULL, NULL)
ATF_TC_WITHOUT_HEAD(fionread);
ATF_TC_BODY(fionread, tc)
{
char rbuf[32];
char buf[] = "Hello";
int master, slave;
int bytes;
ATF_REQUIRE_EQ(0, newpty(&master, &slave));
ATF_REQUIRE_EQ(0, ioctl(master, FIONREAD, &bytes));
ATF_REQUIRE_EQ(0, bytes);
ATF_REQUIRE_EQ(sizeof(buf) - 1, write(slave, buf, sizeof(buf) - 1));
ATF_REQUIRE_EQ(0, ioctl(master, FIONREAD, &bytes));
ATF_REQUIRE_EQ(sizeof(buf) - 1, bytes);
ATF_REQUIRE_EQ(sizeof(buf) - 1, read(master, rbuf, sizeof(rbuf)));
ATF_REQUIRE_EQ(0, ioctl(master, FIONREAD, &bytes));
ATF_REQUIRE_EQ(0, bytes);
ATF_REQUIRE_EQ(sizeof(buf) - 1, write(slave, buf, sizeof(buf) - 1));
ATF_REQUIRE_EQ(0, ioctl(master, FIONREAD, &bytes));
ATF_REQUIRE_EQ(sizeof(buf) - 1, bytes);
ATF_REQUIRE_EQ(0, close(slave));
ATF_REQUIRE_EQ(0, ioctl(master, FIONREAD, &bytes));
ATF_REQUIRE_EQ(0, bytes);
ATF_REQUIRE_EQ(0, read(master, rbuf, sizeof(rbuf)));
}
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, fionread);
return (atf_no_error());
}