diff options
Diffstat (limited to 'login/tst-grantpt.c')
-rw-r--r-- | login/tst-grantpt.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/login/tst-grantpt.c b/login/tst-grantpt.c new file mode 100644 index 0000000000..9b993daaca --- /dev/null +++ b/login/tst-grantpt.c @@ -0,0 +1,78 @@ +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <string.h> +#include <unistd.h> + +static int +test_ebadf (void) +{ + int fd, ret, err; + + fd = posix_openpt (O_RDWR); + if (fd == -1) + { + printf ("posix_openpt(O_RDWR) failed\nerrno %d (%s)\n", + errno, strerror (errno)); + /* We don't fail because of this; maybe the system does not have + SUS pseudo terminals. */ + return 0; + } + unlockpt (fd); + close (fd); + + ret = grantpt (fd); + err = errno; + if (ret != -1 || err != EBADF) + { + printf ("grantpt(): expected: return = %d, errno = %d\n", -1, EBADF); + printf (" got: return = %d, errno = %d\n", ret, err); + return 1; + } + return 0; +} + +static int +test_einval (void) +{ + int fd, ret, err; + const char file[] = "./grantpt-einval"; + + fd = open (file, O_RDWR | O_CREAT); + if (fd == -1) + { + printf ("open(\"%s\", O_RDWR) failed\nerrno %d (%s)\n", + file, errno, strerror (errno)); + return 0; + } + unlink (file); + + ret = grantpt (fd); + err = errno; + if (ret != -1 || err != EINVAL) + { + printf ("grantpt(): expected: return = %d, errno = %d\n", -1, EINVAL); + printf (" got: return = %d, errno = %d\n", ret, err); + ret = 1; + } + else + ret = 0; + + close (fd); + + return ret; +} + +int +main (void) +{ + int result = 0; + + result += test_ebadf (); + result += test_einval (); + + return result; +} |