summaryrefslogtreecommitdiff
path: root/login/tst-grantpt.c
diff options
context:
space:
mode:
Diffstat (limited to 'login/tst-grantpt.c')
-rw-r--r--login/tst-grantpt.c78
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;
+}