Since termios.h defines 'struct winsize' on all platforms I think that
pty.h should also do the same. I've committed a patch doing that and
adding a basic C check program for types.

BTW, I think this fixes a very minor bug. Since the 'pty' module does
not directly depend on 'termios' but pty.in.h unconditionally includes
termios.h it would fail on Windows, for example. Very minor since I
think 'forkpty' and 'openpty' would import both header modules. Instead
of depending on only 'pty' directly.

Collin

>From 5b26891027adad4100b3781f586631ac5ad8e4be Mon Sep 17 00:00:00 2001
From: Collin Funk <collin.fu...@gmail.com>
Date: Fri, 16 Aug 2024 21:19:46 -0700
Subject: [PATCH 1/2] pty: Define 'struct winsize' on all platforms.

* modules/pty (Depends-on): Add termios.
* lib/pty.in.h: Make comments more accurate.
(struct winsize): Remove forward declaration.
---
 ChangeLog    | 7 +++++++
 lib/pty.in.h | 8 +++-----
 modules/pty  | 1 +
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index ee8851fea5..2f61940815 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2024-08-16  Collin Funk  <collin.fu...@gmail.com>
+
+	pty: Define 'struct winsize' on all platforms.
+	* modules/pty (Depends-on): Add termios.
+	* lib/pty.in.h: Make comments more accurate.
+	(struct winsize): Remove forward declaration.
+
 2024-08-16  Bruno Haible  <br...@clisp.org>
 
 	gitsub.sh: For a submodule, merge from the right remote branch.
diff --git a/lib/pty.in.h b/lib/pty.in.h
index 37470cb63d..9f597b2252 100644
--- a/lib/pty.in.h
+++ b/lib/pty.in.h
@@ -44,16 +44,14 @@
 # include <libutil.h>
 #endif
 
-/* Get 'struct termios' and 'struct winsize'.  */
+/* Get 'struct termios', if available, and 'struct winsize'.  */
 #include <termios.h>
 #if defined _AIX
 # include <sys/ioctl.h>
 #endif
-/* Mingw lacks 'struct termios' and 'struct winsize', but a forward
-   declaration of an opaque type is sufficient to allow compilation of
-   a stub openpty().  */
+/* Mingw lacks 'struct termios', but a forward declaration of an opaque type is
+   sufficient to allow compilation of a stub openpty().  */
 struct termios;
-struct winsize;
 
 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
 
diff --git a/modules/pty b/modules/pty
index 8f3da034fc..7a1a2e3894 100644
--- a/modules/pty
+++ b/modules/pty
@@ -10,6 +10,7 @@ gen-header
 include_next
 snippet/c++defs
 snippet/warn-on-use
+termios
 
 configure.ac:
 gl_PTY_H
-- 
2.46.0

>From 3f206a330cdedbb670f0d5f42c364785d4513b09 Mon Sep 17 00:00:00 2001
From: Collin Funk <collin.fu...@gmail.com>
Date: Fri, 16 Aug 2024 21:22:31 -0700
Subject: [PATCH 2/2] pty tests: Add C tests.

* modules/pty-tests (Files): Add tests/test-pty.c.
(Makefile.am): Add the new program.
* tests/test-pty.c: New file.
---
 ChangeLog         |  5 +++++
 modules/pty-tests |  3 +++
 tests/test-pty.c  | 31 +++++++++++++++++++++++++++++++
 3 files changed, 39 insertions(+)
 create mode 100644 tests/test-pty.c

diff --git a/ChangeLog b/ChangeLog
index 2f61940815..6919557615 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2024-08-16  Collin Funk  <collin.fu...@gmail.com>
 
+	pty tests: Add C tests.
+	* modules/pty-tests (Files): Add tests/test-pty.c.
+	(Makefile.am): Add the new program.
+	* tests/test-pty.c: New file.
+
 	pty: Define 'struct winsize' on all platforms.
 	* modules/pty (Depends-on): Add termios.
 	* lib/pty.in.h: Make comments more accurate.
diff --git a/modules/pty-tests b/modules/pty-tests
index 7a6bce9784..211a06489a 100644
--- a/modules/pty-tests
+++ b/modules/pty-tests
@@ -1,4 +1,5 @@
 Files:
+tests/test-pty.c
 
 Depends-on:
 pty-c++-tests
@@ -6,3 +7,5 @@ pty-c++-tests
 configure.ac:
 
 Makefile.am:
+TESTS += test-pty
+check_PROGRAMS += test-pty
diff --git a/tests/test-pty.c b/tests/test-pty.c
new file mode 100644
index 0000000000..1169604308
--- /dev/null
+++ b/tests/test-pty.c
@@ -0,0 +1,31 @@
+/* Test of <pty.h> substitute.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+
+   This file is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published
+   by the Free Software Foundation, either version 3 of the License,
+   or (at your option) any later version.
+
+   This file is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Collin Funk <collin.fu...@gmail.com>, 2024.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <pty.h>
+
+/* Check for 'struct winsize'.  */
+struct winsize t1;
+
+int
+main (void)
+{
+  return 0;
+}
-- 
2.46.0

Reply via email to