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(¶ms, 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));