Added new function t_getterm to return the name string of a termcap

entry since the "new" interface hid this information away.
This commit is contained in:
blymn 2000-04-19 13:41:28 +00:00
parent 11b0c60db2
commit c833debc98
4 changed files with 73 additions and 7 deletions

View File

@ -1,5 +1,5 @@
# $NetBSD: shlib_version,v 1.4 1999/08/16 08:34:33 blymn Exp $
# $NetBSD: shlib_version,v 1.5 2000/04/19 13:41:28 blymn Exp $
# Remember to update distrib/sets/lists/base/shl.* when changing
#
major=0
minor=1
minor=2

View File

@ -1,4 +1,4 @@
.\" $NetBSD: termcap.3,v 1.16 1999/10/04 23:16:50 lukem Exp $
.\" $NetBSD: termcap.3,v 1.17 2000/04/19 13:41:28 blymn Exp $
.\"
.\" Copyright (c) 1980, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@ -74,6 +74,8 @@
.Ft char *
.Fn t_getstr "struct tinfo *info" "char *id" "char **area" "size_t *limit"
.Ft int
.Fn t_getterm "struct tinfo *info" "char **area" "size_t *limit"
.Ft int
.Fn t_goto "struct tinfo *info" "char *id" "int destcol" "int destline" "char *buffer" "size_t limit"
.Ft int
.Fn t_puts "struct tinfo *info" "char *cp" "int affcnt" "void (*outc)(char, void *)" "void *args"
@ -316,7 +318,29 @@ If t_getstr is called with
being NULL then the size required to hold the capability string will be
returned in
.Fa limit
so the caller can allocate enough storage to hold the capability.
so the caller can allocate enough storage to hold the capability. The
function
.Fn t_getterm
returns a copy of the termcap name string of the termcap entry
associated with
.Fa info
in the buffer pointed to by
.Fa area .
.Fn t_getterm
returns 0 on success and -1 on error. On error errno will be set to
EINVAL if the termcap entry in
.Fa info
is malformed or E2BIG if the size of the name exceeds the size
specified by
.Fa limit .
If
.Fa area
is NULL then the size required to hold the terminal name will be
returned in
.Fa limit
allowing sufficient storage to be allocated. If
.Fa limit
is NULL then no bounds checking will be performed.
.Pp
The
.Fn t_goto

View File

@ -1,4 +1,4 @@
/* $NetBSD: termcap.c,v 1.23 2000/04/18 14:42:42 blymn Exp $ */
/* $NetBSD: termcap.c,v 1.24 2000/04/19 13:41:28 blymn Exp $ */
/*
* Copyright (c) 1980, 1993
@ -38,7 +38,7 @@
#if 0
static char sccsid[] = "@(#)termcap.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID("$NetBSD: termcap.c,v 1.23 2000/04/18 14:42:42 blymn Exp $");
__RCSID("$NetBSD: termcap.c,v 1.24 2000/04/19 13:41:28 blymn Exp $");
#endif
#endif /* not lint */
@ -291,6 +291,10 @@ t_getstr(info, id, area, limit)
ids[1] = id[1];
ids[2] = '\0';
if ((ids[0] == 'Z') && (ids[1] == 'Z')) {
/* return info->info address??? */
}
if ((i = cgetstr(info->info, ids, &s)) < 0) {
errno = ENOENT;
return NULL;
@ -348,3 +352,40 @@ t_freent(info)
free(info->info);
free(info);
}
/*
* Get the terminal name string from the termcap entry.
*
*/
int
t_getterm(struct tinfo *info, char **area, size_t *limit)
{
char *endp;
size_t count;
if ((endp = index(info->info, ':')) == NULL) {
errno = EINVAL;
return -1;
}
count = endp - info->info + 1;
if (area == NULL) {
*limit = count;
return 0;
} else {
if ((limit != NULL) && (count > *limit)) {
errno = E2BIG;
return -1;
}
strncpy(*area, info->info, count);
(*area)[count] = '\0';
if (limit != NULL)
*limit -= count;
}
return 0;
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: termcap.h,v 1.9 2000/02/20 13:32:52 kleink Exp $ */
/* $NetBSD: termcap.h,v 1.10 2000/04/19 13:41:29 blymn Exp $ */
/*-
* Copyright (c) 1992, 1993
@ -60,6 +60,7 @@ int t_getent __P((struct tinfo **, const char *));
int t_getnum __P((struct tinfo *, const char *));
int t_getflag __P((struct tinfo *, const char *));
char *t_getstr __P((struct tinfo *, const char *, char **, size_t *));
int t_getterm(struct tinfo *info, char **area, size_t *limit);
int t_goto __P((struct tinfo *, const char *, int, int, char *, size_t));
int t_puts __P((struct tinfo *, const char *, int,
void (*)(char, void *), void *));