• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Copyright (c) International Business Machines  Corp., 2002
4  * Copyright (c) 2020 Petr Vorel <pvorel@suse.cz>
5  * Copyright (C) 2024 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
6  */
7 
8 /*\
9  * [Description]
10  *
11  * Verify that it's possible to open a pseudo-terminal via /dev/ptmx, obtain a
12  * slave device and set/get window size.
13  */
14 
15 #define _GNU_SOURCE
16 
17 #include "common.h"
18 
19 static int masterfd = -1;
20 
run(void)21 static void run(void)
22 {
23 	int slavefd;
24 	struct winsize wsz;
25 	struct winsize wsz1 = { 24, 80, 5, 10 };
26 	struct winsize wsz2 = { 60, 100, 11, 777 };
27 
28 	slavefd = open_slave(masterfd);
29 
30 	TST_EXP_PASS(ioctl(masterfd, TIOCSWINSZ, &wsz1));
31 	TST_EXP_PASS(ioctl(slavefd, TIOCGWINSZ, &wsz));
32 
33 	TST_EXP_EQ_LI(wsz.ws_row, wsz1.ws_row);
34 	TST_EXP_EQ_LI(wsz.ws_col, wsz1.ws_col);
35 	TST_EXP_EQ_LI(wsz.ws_xpixel, wsz1.ws_xpixel);
36 	TST_EXP_EQ_LI(wsz.ws_ypixel, wsz1.ws_ypixel);
37 
38 	TST_EXP_PASS(ioctl(masterfd, TIOCGWINSZ, &wsz));
39 
40 	TST_EXP_EQ_LI(wsz.ws_row, wsz1.ws_row);
41 	TST_EXP_EQ_LI(wsz.ws_col, wsz1.ws_col);
42 	TST_EXP_EQ_LI(wsz.ws_xpixel, wsz1.ws_xpixel);
43 	TST_EXP_EQ_LI(wsz.ws_ypixel, wsz1.ws_ypixel);
44 
45 	TST_EXP_PASS(ioctl(slavefd, TIOCSWINSZ, &wsz2));
46 	TST_EXP_PASS(ioctl(slavefd, TIOCGWINSZ, &wsz));
47 
48 	TST_EXP_EQ_LI(wsz.ws_row, wsz2.ws_row);
49 	TST_EXP_EQ_LI(wsz.ws_col, wsz2.ws_col);
50 	TST_EXP_EQ_LI(wsz.ws_xpixel, wsz2.ws_xpixel);
51 	TST_EXP_EQ_LI(wsz.ws_ypixel, wsz2.ws_ypixel);
52 
53 	SAFE_CLOSE(slavefd);
54 }
55 
setup(void)56 static void setup(void)
57 {
58 	masterfd = open_master();
59 }
60 
cleanup(void)61 static void cleanup(void)
62 {
63 	if (masterfd != -1)
64 		SAFE_CLOSE(masterfd);
65 }
66 
67 static struct tst_test test = {
68 	.test_all = run,
69 	.setup = setup,
70 	.cleanup = cleanup,
71 };
72