diff options
Diffstat (limited to 'login')
-rw-r--r-- | login/Makefile | 2 | ||||
-rw-r--r-- | login/tst-grantpt.c | 78 |
2 files changed, 79 insertions, 1 deletions
diff --git a/login/Makefile b/login/Makefile index b1fd3055e7..97fab761f3 100644 --- a/login/Makefile +++ b/login/Makefile @@ -37,7 +37,7 @@ distribute := utmp-private.h pty-private.h subdir-dirs = programs vpath %.c programs -tests := tst-utmp tst-utmpx +tests := tst-utmp tst-utmpx tst-grantpt # Build the -lutil library with these extra functions. extra-libs := libutil 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; +} |