Module Name:    src
Committed By:   roy
Date:           Fri Jan 25 12:30:06 UTC 2013

Modified Files:
        src/lib/libterminfo: terminfo.3 tparm.c

Log Message:
For platforms where we cannot fit a char * into a long, return NULL
and set errno to ENOTSUPP.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/lib/libterminfo/terminfo.3
cvs rdiff -u -r1.12 -r1.13 src/lib/libterminfo/tparm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libterminfo/terminfo.3
diff -u src/lib/libterminfo/terminfo.3:1.8 src/lib/libterminfo/terminfo.3:1.9
--- src/lib/libterminfo/terminfo.3:1.8	Tue Oct  4 11:01:14 2011
+++ src/lib/libterminfo/terminfo.3	Fri Jan 25 12:30:05 2013
@@ -1,4 +1,4 @@
-.\"	$NetBSD: terminfo.3,v 1.8 2011/10/04 11:01:14 roy Exp $
+.\"	$NetBSD: terminfo.3,v 1.9 2013/01/25 12:30:05 roy Exp $
 .\"
 .\" Copyright (c) 2009, 2011 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -27,7 +27,7 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd October 4, 2011
+.Dd January 25, 2013
 .Dt TERMINFO 3
 .Os
 .Sh NAME
@@ -187,6 +187,12 @@ a
 pointer inside a
 .Vt long
 can use them.
+For platforms which don't support this,
+.Dv NULL
+is returned and
+.Va errno
+is set to
+.Er ENOTSUPP .
 The string encoding and parameter application is described in
 .Xr terminfo 5 .
 .Pp

Index: src/lib/libterminfo/tparm.c
diff -u src/lib/libterminfo/tparm.c:1.12 src/lib/libterminfo/tparm.c:1.13
--- src/lib/libterminfo/tparm.c:1.12	Thu Jan 24 10:41:28 2013
+++ src/lib/libterminfo/tparm.c	Fri Jan 25 12:30:05 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: tparm.c,v 1.12 2013/01/24 10:41:28 roy Exp $ */
+/* $NetBSD: tparm.c,v 1.13 2013/01/25 12:30:05 roy Exp $ */
 
 /*
  * Copyright (c) 2009, 2011, 2013 The NetBSD Foundation, Inc.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: tparm.c,v 1.12 2013/01/24 10:41:28 roy Exp $");
+__RCSID("$NetBSD: tparm.c,v 1.13 2013/01/25 12:30:05 roy Exp $");
 #include <sys/param.h>
 
 #include <assert.h>
@@ -223,12 +223,25 @@ _ti_tiparm(TERMINAL *term, const char *s
 	/* Put our parameters into variables */
 	memset(&params, 0, sizeof(params));
 	for (l = 0; l < max; l++) {
-		if (piss[l])
-			params[l].string = va_arg(parms, char *);
-		else if (va_long)
-			params[l].num = va_arg(parms, long);
-		else
-			params[l].num = (long)va_arg(parms, int);
+		if (piss[l]) {
+			if (va_long) {
+				/* This only works if char * fits into a long
+				 * on this platform. */
+				if (sizeof(char *) <= sizeof(long)/*CONSTCOND*/)
+					params[l].string =
+					    (char *)va_arg(parms, long);
+				else {
+					errno = ENOTSUP;
+					return NULL;
+				}
+			} else
+				params[l].string = va_arg(parms, char *);
+		} else {
+			if (va_long)
+				params[l].num = va_arg(parms, long);
+			else
+				params[l].num = (long)va_arg(parms, int);
+		}
 	}
 
 	memset(&stack, 0, sizeof(stack));

Reply via email to