#include <sys/types.h>
#include <sys/ioctl.h>
#include <err.h>
#include <libutil.h>
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
#include "stress.h"
#define TXT "Hello, world!"
int
setup(int nb __unused)
{
return (0);
}
void
cleanup(void)
{
}
int
test(void)
{
struct termios tios;
int i, master, slave;
int s[32], m[32];
char buf[512], slname[1025];
for (i = 0; i < 32; i++) {
if (openpty(&m[i], &s[i], slname, NULL, NULL) == -1)
err(1, "openpty");
}
for (i = 0; i < 32; i++) {
close(m[i]);
close(s[i]);
}
for (i = 0; i < 1024; i++) {
if (openpty(&m[0], &s[0], slname, NULL, NULL) == -1)
err(1, "openpty");
close(m[0]);
close(s[0]);
}
for (i = 0; i < 10 && done_testing == 0; i++) {
if (openpty(&master, &slave, slname, NULL, NULL) == -1)
err(1, "openpty");
if ((i & 1) == 0) {
if (close(master) == -1)
err(1, "close(master)");
if (close(slave) == -1)
err(1, "close(%s)", slname);
} else {
if (close(slave) == -1)
err(1, "close(%s)", slname);
if (close(master) == -1)
err(1, "close(master)");
}
}
if (openpty(&master, &slave, slname, NULL, NULL) == -1)
err(1, "openpty");
if (tcgetattr(slave, &tios) < 0)
err(1, "tcgetattr(%s)", slname);
cfmakeraw(&tios);
if (tcsetattr(slave, TCSAFLUSH, &tios) < 0)
err(1, "tcsetattr(%s)", slname);
for (i = 0; i < 64 && done_testing == 0; i++) {
if (write(master, TXT, sizeof(TXT)) == -1)
err(1, "write");
if (read(slave, buf, sizeof(TXT)) == -1)
err(1, "read(%s)", slname);
}
close(master);
close(slave);
return (0);
}