aboutsummaryrefslogtreecommitdiff
path: root/progs
diff options
context:
space:
mode:
Diffstat (limited to 'progs')
-rwxr-xr-xprogs/MKtermsort.sh22
-rw-r--r--progs/Makefile.in2
-rw-r--r--progs/dump_entry.c77
-rw-r--r--progs/dump_entry.h6
-rw-r--r--progs/infocmp.c89
-rw-r--r--progs/progs.priv.h5
-rw-r--r--progs/tic.c86
-rw-r--r--progs/toe.c25
-rw-r--r--progs/tput.c5
-rw-r--r--progs/tset.c90
10 files changed, 233 insertions, 174 deletions
diff --git a/progs/MKtermsort.sh b/progs/MKtermsort.sh
index 18b90ac265d8..2247f14ef2e8 100755
--- a/progs/MKtermsort.sh
+++ b/progs/MKtermsort.sh
@@ -1,10 +1,10 @@
#!/bin/sh
-# $Id: MKtermsort.sh,v 1.9 2003/01/11 22:23:50 tom Exp $
+# $Id: MKtermsort.sh,v 1.10 2008/07/12 20:22:54 tom Exp $
#
# MKtermsort.sh -- generate indirection vectors for the various sort methods
#
##############################################################################
-# Copyright (c) 1998-2002,2003 Free Software Foundation, Inc. #
+# Copyright (c) 1998-2003,2008 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
@@ -56,7 +56,7 @@ echo " *";
echo " * Note: this file is generated using MKtermsort.sh, do not edit by hand.";
echo " */";
-echo "static const int bool_terminfo_sort[] = {";
+echo "static const PredIdx bool_terminfo_sort[] = {";
$AWK <$DATA '
BEGIN {i = 0;}
/^#/ {next;}
@@ -65,7 +65,7 @@ $3 == "bool" {printf("%s\t%d\n", $2, i++);}
echo "};";
echo "";
-echo "static const int num_terminfo_sort[] = {";
+echo "static const PredIdx num_terminfo_sort[] = {";
$AWK <$DATA '
BEGIN {i = 0;}
/^#/ {next;}
@@ -74,7 +74,7 @@ $3 == "num" {printf("%s\t%d\n", $2, i++);}
echo "};";
echo "";
-echo "static const int str_terminfo_sort[] = {";
+echo "static const PredIdx str_terminfo_sort[] = {";
$AWK <$DATA '
BEGIN {i = 0;}
/^#/ {next;}
@@ -83,7 +83,7 @@ $3 == "str" {printf("%s\t%d\n", $2, i++);}
echo "};";
echo "";
-echo "static const int bool_variable_sort[] = {";
+echo "static const PredIdx bool_variable_sort[] = {";
$AWK <$DATA '
BEGIN {i = 0;}
/^#/ {next;}
@@ -92,7 +92,7 @@ $3 == "bool" {printf("%s\t%d\n", $1, i++);}
echo "};";
echo "";
-echo "static const int num_variable_sort[] = {";
+echo "static const PredIdx num_variable_sort[] = {";
$AWK <$DATA '
BEGIN {i = 0;}
/^#/ {next;}
@@ -101,7 +101,7 @@ $3 == "num" {printf("%s\t%d\n", $1, i++);}
echo "};";
echo "";
-echo "static const int str_variable_sort[] = {";
+echo "static const PredIdx str_variable_sort[] = {";
$AWK <$DATA '
BEGIN {i = 0;}
/^#/ {next;}
@@ -110,7 +110,7 @@ $3 == "str" {printf("%s\t%d\n", $1, i++);}
echo "};";
echo "";
-echo "static const int bool_termcap_sort[] = {";
+echo "static const PredIdx bool_termcap_sort[] = {";
$AWK <$DATA '
BEGIN {i = 0;}
/^#/ {next;}
@@ -119,7 +119,7 @@ $3 == "bool" {printf("%s\t%d\n", $4, i++);}
echo "};";
echo "";
-echo "static const int num_termcap_sort[] = {";
+echo "static const PredIdx num_termcap_sort[] = {";
$AWK <$DATA '
BEGIN {i = 0;}
/^#/ {next;}
@@ -128,7 +128,7 @@ $3 == "num" {printf("%s\t%d\n", $4, i++);}
echo "};";
echo "";
-echo "static const int str_termcap_sort[] = {";
+echo "static const PredIdx str_termcap_sort[] = {";
$AWK <$DATA '
BEGIN {i = 0;}
/^#/ {next;}
diff --git a/progs/Makefile.in b/progs/Makefile.in
index 38f4e74fbb8e..886fd5be2465 100644
--- a/progs/Makefile.in
+++ b/progs/Makefile.in
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.77 2007/10/13 22:25:53 tom Exp $
+# $Id: Makefile.in,v 1.79 2008/09/07 13:58:55 tom Exp $
##############################################################################
# Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. #
# #
diff --git a/progs/dump_entry.c b/progs/dump_entry.c
index eeee5dbb6a04..bd2422008bf7 100644
--- a/progs/dump_entry.c
+++ b/progs/dump_entry.c
@@ -29,7 +29,7 @@
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
- * and: Thomas E. Dickey 1996 on *
+ * and: Thomas E. Dickey 1996 on *
****************************************************************************/
#define __INTERNAL_CAPS_VISIBLE
@@ -39,12 +39,14 @@
#include "termsort.c" /* this C file is generated */
#include <parametrized.h> /* so is this */
-MODULE_ID("$Id: dump_entry.c,v 1.82 2008/04/19 22:27:04 tom Exp $")
+MODULE_ID("$Id: dump_entry.c,v 1.88 2008/08/04 12:36:12 tom Exp $")
#define INDENT 8
#define DISCARD(string) string = ABSENT_STRING
#define PRINTF (void) printf
+#define OkIndex(index,array) ((int)(index) >= 0 && (int)(index) < (int) SIZEOF(array))
+
typedef struct {
char *text;
size_t used;
@@ -140,6 +142,11 @@ _nc_leaks_dump_entry(void)
}
#endif
+#define NameTrans(check,result) \
+ if (OkIndex(np->nte_index, check) \
+ && check[np->nte_index]) \
+ return (result[np->nte_index])
+
NCURSES_CONST char *
nametrans(const char *name)
/* translate a capability name from termcap to terminfo */
@@ -149,18 +156,15 @@ nametrans(const char *name)
if ((np = _nc_find_entry(name, _nc_get_hash_table(0))) != 0)
switch (np->nte_type) {
case BOOLEAN:
- if (bool_from_termcap[np->nte_index])
- return (boolcodes[np->nte_index]);
+ NameTrans(bool_from_termcap, boolcodes);
break;
case NUMBER:
- if (num_from_termcap[np->nte_index])
- return (numcodes[np->nte_index]);
+ NameTrans(num_from_termcap, numcodes);
break;
case STRING:
- if (str_from_termcap[np->nte_index])
- return (strcodes[np->nte_index]);
+ NameTrans(str_from_termcap, strcodes);
break;
}
@@ -293,9 +297,9 @@ static void set_obsolete_termcaps(TERMTYPE *tp);
* If we configure with a different Caps file, the offsets into the arrays
* will change. So we use an address expression.
*/
-#define BOOL_IDX(name) (&(name) - &(CUR Booleans[0]))
-#define NUM_IDX(name) (&(name) - &(CUR Numbers[0]))
-#define STR_IDX(name) (&(name) - &(CUR Strings[0]))
+#define BOOL_IDX(name) (PredType) (&(name) - &(CUR Booleans[0]))
+#define NUM_IDX(name) (PredType) (&(name) - &(CUR Numbers[0]))
+#define STR_IDX(name) (PredType) (&(name) - &(CUR Strings[0]))
static bool
version_filter(PredType type, PredIdx idx)
@@ -352,7 +356,7 @@ version_filter(PredType type, PredIdx idx)
}
break;
-#define is_termcap(type) (idx < (int) sizeof(type##_from_termcap) && \
+#define is_termcap(type) (OkIndex(idx, type##_from_termcap) && \
type##_from_termcap[idx])
case V_BSD: /* BSD */
@@ -389,22 +393,22 @@ force_wrap(void)
static void
wrap_concat(const char *src)
{
- int need = strlen(src);
- int want = strlen(separator) + need;
+ unsigned need = strlen(src);
+ unsigned want = strlen(separator) + need;
if (column > INDENT
- && column + want > width) {
+ && column + (int) want > width) {
force_wrap();
}
strcpy_DYN(&outbuf, src);
strcpy_DYN(&outbuf, separator);
- column += need;
+ column += (int) need;
}
#define IGNORE_SEP_TRAIL(first,last,sep_trail) \
if ((size_t)(last - first) > sizeof(sep_trail)-1 \
&& !strncmp(first, sep_trail, sizeof(sep_trail)-1)) \
- first += sizeof(sep_trail)-2
+ first += sizeof(sep_trail)-2
/* Returns the nominal length of the buffer assuming it is termcap format,
* i.e., the continuation sequence is treated as a single character ":".
@@ -448,7 +452,7 @@ static bool
has_params(const char *src)
{
bool result = FALSE;
- int len = strlen(src);
+ int len = (int) strlen(src);
int n;
bool ifthen = FALSE;
bool params = FALSE;
@@ -553,6 +557,7 @@ fmt_complex(char *src, int level)
}
#define SAME_CAP(n,cap) (&tterm->Strings[n] == &cap)
+#define EXTRA_CAP 20
int
fmt_entry(TERMTYPE *tterm,
@@ -563,7 +568,7 @@ fmt_entry(TERMTYPE *tterm,
int numbers)
{
PredIdx i, j;
- char buffer[MAX_TERMINFO_LENGTH];
+ char buffer[MAX_TERMINFO_LENGTH + EXTRA_CAP];
char *capability;
NCURSES_CONST char *name;
int predval, len;
@@ -589,13 +594,14 @@ fmt_entry(TERMTYPE *tterm,
} else {
strcpy_DYN(&outbuf, tterm->term_names);
strcpy_DYN(&outbuf, separator);
- column = outbuf.used;
+ column = (int) outbuf.used;
force_wrap();
}
for_each_boolean(j, tterm) {
i = BoolIndirect(j);
name = ExtBoolname(tterm, i, bool_names);
+ assert(strlen(name) < sizeof(buffer) - EXTRA_CAP);
if (!version_filter(BOOLEAN, i))
continue;
@@ -619,6 +625,7 @@ fmt_entry(TERMTYPE *tterm,
for_each_number(j, tterm) {
i = NumIndirect(j);
name = ExtNumname(tterm, i, num_names);
+ assert(strlen(name) < sizeof(buffer) - EXTRA_CAP);
if (!version_filter(NUMBER, i))
continue;
@@ -641,9 +648,9 @@ fmt_entry(TERMTYPE *tterm,
if (column != INDENT)
force_wrap();
- len += num_bools
- + num_values * 2
- + strlen(tterm->term_names) + 1;
+ len += (int) (num_bools
+ + num_values * 2
+ + strlen(tterm->term_names) + 1);
if (len & 1)
len++;
@@ -664,6 +671,8 @@ fmt_entry(TERMTYPE *tterm,
for_each_string(j, tterm) {
i = StrIndirect(j);
name = ExtStrname(tterm, i, str_names);
+ assert(strlen(name) < sizeof(buffer) - EXTRA_CAP);
+
capability = tterm->Strings[i];
if (!version_filter(STRING, i))
@@ -762,7 +771,7 @@ fmt_entry(TERMTYPE *tterm,
} else {
sprintf(buffer, "%s=%s", name, cv);
}
- len += strlen(capability) + 1;
+ len += (int) strlen(capability) + 1;
WRAP_CONCAT;
} else {
char *src = _nc_tic_expand(capability,
@@ -778,7 +787,7 @@ fmt_entry(TERMTYPE *tterm,
} else {
strcpy_DYN(&tmpbuf, src);
}
- len += strlen(capability) + 1;
+ len += (int) strlen(capability) + 1;
wrap_concat(tmpbuf.text);
outcount = TRUE;
}
@@ -787,7 +796,7 @@ fmt_entry(TERMTYPE *tterm,
if (capability != tterm->Strings[i])
free(capability);
}
- len += num_strings * 2;
+ len += (int) (num_strings * 2);
/*
* This piece of code should be an effective inverse of the functions
@@ -877,7 +886,7 @@ fmt_entry(TERMTYPE *tterm,
static bool
kill_string(TERMTYPE *tterm, char *cap)
{
- int n;
+ unsigned n;
for (n = 0; n < NUM_STRINGS(tterm); ++n) {
if (cap == tterm->Strings[n]) {
tterm->Strings[n] = ABSENT_STRING;
@@ -920,7 +929,7 @@ kill_labels(TERMTYPE *tterm, int target)
sprintf(name, "lf%d", n);
if ((cap = find_string(tterm, name)) != ABSENT_STRING
&& kill_string(tterm, cap)) {
- target -= (strlen(cap) + 5);
+ target -= (int) (strlen(cap) + 5);
++result;
if (target < 0)
break;
@@ -945,7 +954,7 @@ kill_fkeys(TERMTYPE *tterm, int target)
sprintf(name, "kf%d", n);
if ((cap = find_string(tterm, name)) != ABSENT_STRING
&& kill_string(tterm, cap)) {
- target -= (strlen(cap) + 5);
+ target -= (int) (strlen(cap) + 5);
++result;
if (target < 0)
break;
@@ -1053,7 +1062,7 @@ dump_entry(TERMTYPE *tterm,
* Extended names are most likely function-key definitions. Drop
* those first.
*/
- int n;
+ unsigned n;
for (n = STRCOUNT; n < NUM_STRINGS(tterm); n++) {
const char *name = ExtStrname(tterm, n, strnames);
@@ -1145,7 +1154,7 @@ show_entry(void)
trim_trailing();
(void) fputs(outbuf.text, stdout);
putchar('\n');
- return outbuf.used;
+ return (int) outbuf.used;
}
void
@@ -1244,15 +1253,15 @@ repair_acsc(TERMTYPE *tp)
for (n = 0; acs_chars[n] != 0; n++) {
source = UChar(acs_chars[n]);
if ((target = (unsigned char) acs_chars[n + 1]) != 0) {
- mapped[source] = target;
+ mapped[source] = (char) target;
n++;
} else {
- extra = source;
+ extra = (char) source;
}
}
for (n = m = 0; n < sizeof(mapped); n++) {
if (mapped[n]) {
- acs_chars[m++] = n;
+ acs_chars[m++] = (char) n;
acs_chars[m++] = mapped[n];
}
}
diff --git a/progs/dump_entry.h b/progs/dump_entry.h
index f802ecb783f7..b99a37a74f25 100644
--- a/progs/dump_entry.h
+++ b/progs/dump_entry.h
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 1998-2002,2004 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2006,2008 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
@@ -34,7 +34,7 @@
/*
- * $Id: dump_entry.h,v 1.29 2006/08/19 21:11:14 tom Exp $
+ * $Id: dump_entry.h,v 1.30 2008/07/12 20:23:03 tom Exp $
*
* Dump control definitions and variables
*/
@@ -63,7 +63,7 @@
#define CMP_USE 3 /* comparison on use capabilities */
typedef unsigned PredType;
-typedef int PredIdx;
+typedef unsigned PredIdx;
typedef int (*PredFunc)(PredType, PredIdx);
extern NCURSES_CONST char *nametrans(const char *);
diff --git a/progs/infocmp.c b/progs/infocmp.c
index 8680df35d34f..84989ffc63d4 100644
--- a/progs/infocmp.c
+++ b/progs/infocmp.c
@@ -42,7 +42,7 @@
#include <dump_entry.h>
-MODULE_ID("$Id: infocmp.c,v 1.96 2008/01/19 21:08:07 tom Exp $")
+MODULE_ID("$Id: infocmp.c,v 1.103 2008/08/16 22:04:56 tom Exp $")
#define L_CURL "{"
#define R_CURL "}"
@@ -221,7 +221,7 @@ static bool
useeq(ENTRY * e1, ENTRY * e2)
/* are the use references in two entries equivalent? */
{
- int i, j;
+ unsigned i, j;
if (e1->nuses != e2->nuses)
return (FALSE);
@@ -271,7 +271,7 @@ static void
print_uses(ENTRY * ep, FILE *fp)
/* print an entry's use references */
{
- int i;
+ unsigned i;
if (!ep->nuses)
fputs("NULL", fp);
@@ -568,37 +568,41 @@ same_param(const char *table, const char *param, unsigned length)
static char *
lookup_params(const assoc * table, char *dst, char *src)
{
+ char *result = 0;
const char *ep = strtok(src, ";");
- const assoc *ap;
- do {
- bool found = FALSE;
+ if (ep != 0) {
+ const assoc *ap;
- for (ap = table; ap->from; ap++) {
- size_t tlen = strlen(ap->from);
+ do {
+ bool found = FALSE;
- if (same_param(ap->from, ep, tlen)) {
- (void) strcat(dst, ap->to);
- found = TRUE;
- break;
+ for (ap = table; ap->from; ap++) {
+ size_t tlen = strlen(ap->from);
+
+ if (same_param(ap->from, ep, tlen)) {
+ (void) strcat(dst, ap->to);
+ found = TRUE;
+ break;
+ }
}
- }
- if (!found)
- (void) strcat(dst, ep);
- (void) strcat(dst, ";");
- } while
- ((ep = strtok((char *) 0, ";")));
+ if (!found)
+ (void) strcat(dst, ep);
+ (void) strcat(dst, ";");
+ } while
+ ((ep = strtok((char *) 0, ";")));
- dst[strlen(dst) - 1] = '\0';
+ dst[strlen(dst) - 1] = '\0';
- return dst;
+ result = dst;
+ }
+ return result;
}
static void
analyze_string(const char *name, const char *cap, TERMTYPE *tp)
{
- char buf[MAX_TERMINFO_LENGTH];
char buf2[MAX_TERMINFO_LENGTH];
const char *sp;
const assoc *ap;
@@ -608,7 +612,6 @@ analyze_string(const char *name, const char *cap, TERMTYPE *tp)
return;
(void) printf("%s: ", name);
- buf[0] = '\0';
for (sp = cap; *sp; sp++) {
int i;
int csi;
@@ -656,7 +659,7 @@ analyze_string(const char *name, const char *cap, TERMTYPE *tp)
if (!expansion) {
csi = skip_csi(sp);
for (ap = std_caps; ap->from; ap++) {
- size_t adj = csi ? 2 : 0;
+ size_t adj = (size_t) (csi ? 2 : 0);
len = strlen(ap->from);
if (csi && skip_csi(ap->from) != csi)
@@ -665,7 +668,7 @@ analyze_string(const char *name, const char *cap, TERMTYPE *tp)
&& strncmp(ap->from + adj, sp + csi, len - adj) == 0) {
expansion = ap->to;
len -= adj;
- len += csi;
+ len += (size_t) csi;
break;
}
}
@@ -675,13 +678,14 @@ analyze_string(const char *name, const char *cap, TERMTYPE *tp)
if (!expansion
&& (csi = skip_csi(sp)) != 0
&& (len = strspn(sp + csi, "0123456789;"))
- && (next = csi + len)
+ && (len < sizeof(buf3))
+ && (next = (size_t) csi + len)
&& ((sp[next] == 'h') || (sp[next] == 'l'))) {
(void) strcpy(buf2, (sp[next] == 'h') ? "ECMA+" : "ECMA-");
(void) strncpy(buf3, sp + csi, len);
buf3[len] = '\0';
- len += csi + 1;
+ len += (size_t) csi + 1;
expansion = lookup_params(std_modes, buf2, buf3);
}
@@ -691,13 +695,14 @@ analyze_string(const char *name, const char *cap, TERMTYPE *tp)
&& (csi = skip_csi(sp)) != 0
&& sp[csi] == '?'
&& (len = strspn(sp + csi + 1, "0123456789;"))
- && (next = csi + 1 + len)
+ && (len < sizeof(buf3))
+ && (next = (size_t) csi + 1 + len)
&& ((sp[next] == 'h') || (sp[next] == 'l'))) {
(void) strcpy(buf2, (sp[next] == 'h') ? "DEC+" : "DEC-");
(void) strncpy(buf3, sp + csi + 1, len);
buf3[len] = '\0';
- len += csi + 2;
+ len += (size_t) csi + 2;
expansion = lookup_params(private_modes, buf2, buf3);
}
@@ -706,13 +711,14 @@ analyze_string(const char *name, const char *cap, TERMTYPE *tp)
if (!expansion
&& (csi = skip_csi(sp)) != 0
&& (len = strspn(sp + csi, "0123456789;")) != 0
- && (next = csi + len)
+ && (len < sizeof(buf3))
+ && (next = (size_t) csi + len)
&& sp[next] == 'm') {
(void) strcpy(buf2, "SGR:");
(void) strncpy(buf3, sp + csi, len);
buf3[len] = '\0';
- len += csi + 1;
+ len += (size_t) csi + 1;
expansion = lookup_params(ecma_highlights, buf2, buf3);
}
@@ -720,7 +726,7 @@ analyze_string(const char *name, const char *cap, TERMTYPE *tp)
if (!expansion
&& (csi = skip_csi(sp)) != 0
&& sp[csi] == 'm') {
- len = csi + 1;
+ len = (size_t) csi + 1;
(void) strcpy(buf2, "SGR:");
strcat(buf2, ecma_highlights[0].to);
expansion = buf2;
@@ -738,7 +744,7 @@ analyze_string(const char *name, const char *cap, TERMTYPE *tp)
if (strncmp(buf2, sp + csi, len) == 0)
expansion = "RSR";
}
- len += csi;
+ len += (size_t) csi;
}
/* now check for home-down */
@@ -755,22 +761,21 @@ analyze_string(const char *name, const char *cap, TERMTYPE *tp)
expansion = "LL";
}
}
- len += csi;
+ len += (size_t) csi;
}
/* now look at the expansion we got, if any */
if (expansion) {
- (void) sprintf(buf + strlen(buf), "{%s}", expansion);
+ printf("{%s}", expansion);
sp += len - 1;
- continue;
} else {
/* couldn't match anything */
buf2[0] = *sp;
buf2[1] = '\0';
- (void) strcat(buf, TIC_EXPAND(buf2));
+ fputs(TIC_EXPAND(buf2), stdout);
}
}
- (void) printf("%s\n", buf);
+ putchar('\n');
}
/***************************************************************************
@@ -789,6 +794,7 @@ file_comparison(int argc, char *argv[])
ENTRY *qp, *rp;
int i, n;
+ memset(heads, 0, sizeof(heads));
dump_init((char *) 0, F_LITERAL, S_TERMINFO, 0, itrace, FALSE);
for (n = 0; n < argc && n < MAXCOMPARE; n++) {
@@ -1059,7 +1065,6 @@ static void
dump_initializers(TERMTYPE *term)
{
unsigned n;
- int size;
const char *str = 0;
printf("\nstatic char %s[] = \"%s\";\n\n",
@@ -1138,10 +1143,6 @@ dump_initializers(TERMTYPE *term)
}
(void) printf("%s;\n", R_CURL);
- size = (sizeof(TERMTYPE)
- + (NUM_BOOLEANS(term) * sizeof(term->Booleans[0]))
- + (NUM_NUMBERS(term) * sizeof(term->Numbers[0])));
-
(void) printf("static char * %s[] = %s\n", name_initializer("string"), L_CURL);
for_each_string(n, term) {
@@ -1283,8 +1284,8 @@ main(int argc, char *argv[])
_nc_progname = _nc_rootname(argv[0]);
/* make sure we have enough space to add two terminal entries */
- myargv = typeCalloc(char *, argc + 3);
- memcpy(myargv, argv, sizeof(char *) * argc);
+ myargv = typeCalloc(char *, (size_t) (argc + 3));
+ memcpy(myargv, argv, (sizeof(char *) * (size_t) argc));
argv = myargv;
while ((c = getopt(argc,
diff --git a/progs/progs.priv.h b/progs/progs.priv.h
index d445c3366591..f0ea4608227d 100644
--- a/progs/progs.priv.h
+++ b/progs/progs.priv.h
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
@@ -30,7 +30,7 @@
* Author: Thomas E. Dickey 1997-on *
****************************************************************************/
/*
- * $Id: progs.priv.h,v 1.33 2007/10/13 20:33:53 tom Exp $
+ * $Id: progs.priv.h,v 1.34 2008/08/03 17:43:05 tom Exp $
*
* progs.priv.h
*
@@ -90,6 +90,7 @@
# endif
#endif
+#include <assert.h>
#include <errno.h>
#if DECL_ERRNO
diff --git a/progs/tic.c b/progs/tic.c
index 84781026e51c..82bc3ea0d789 100644
--- a/progs/tic.c
+++ b/progs/tic.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
@@ -29,7 +29,7 @@
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
- * and: Thomas E. Dickey 1996 on *
+ * and: Thomas E. Dickey 1996 on *
****************************************************************************/
/*
@@ -44,7 +44,7 @@
#include <dump_entry.h>
#include <transform.h>
-MODULE_ID("$Id: tic.c,v 1.133 2007/07/21 17:45:59 tom Exp $")
+MODULE_ID("$Id: tic.c,v 1.137 2008/09/13 16:59:24 tom Exp $")
const char *_nc_progname = "tic";
@@ -85,9 +85,25 @@ x\
] \
source-file\n";
+#if NO_LEAKS
+static void
+free_namelist(char **src)
+{
+ if (src != 0) {
+ int n;
+ for (n = 0; src[n] != 0; ++n)
+ free(src[n]);
+ free(src);
+ }
+}
+#endif
+
static void
-cleanup(void)
+cleanup(char **namelst GCC_UNUSED)
{
+#if NO_LEAKS
+ free_namelist(namelst);
+#endif
if (tmp_fp != 0)
fclose(tmp_fp);
if (to_remove != 0) {
@@ -103,7 +119,7 @@ static void
failed(const char *msg)
{
perror(msg);
- cleanup();
+ cleanup((char **) 0);
ExitProgram(EXIT_FAILURE);
}
@@ -178,7 +194,7 @@ write_it(ENTRY * ep)
d = result;
t = s;
while ((ch = *t++) != 0) {
- *d++ = ch;
+ *d++ = (char) ch;
if (ch == '\\') {
*d++ = *t++;
} else if ((ch == '%')
@@ -192,7 +208,7 @@ write_it(ENTRY * ep)
&& value < 127
&& isprint((int) value)) {
*d++ = S_QUOTE;
- *d++ = (int) value;
+ *d++ = (char) value;
*d++ = S_QUOTE;
t = (v + 1);
}
@@ -280,7 +296,7 @@ put_translate(int c)
putchar(c);
in_name = FALSE;
} else if (c != '>') {
- namebuf[used++] = c;
+ namebuf[used++] = (char) c;
} else { /* ah! candidate name! */
char *up;
NCURSES_CONST char *tp;
@@ -353,19 +369,6 @@ open_input(const char *filename)
return fp;
}
-#if NO_LEAKS
-static void
-free_namelist(char **src)
-{
- if (src != 0) {
- int n;
- for (n = 0; src[n] != 0; ++n)
- free(src[n]);
- free(src);
- }
-}
-#endif
-
/* Parse the "-e" option-value into a list of names */
static char **
make_namelist(char *src)
@@ -558,7 +561,8 @@ main(int argc, char *argv[])
break;
case 'V':
puts(curses_version());
- return EXIT_SUCCESS;
+ cleanup(namelst);
+ ExitProgram(EXIT_SUCCESS);
case 'c':
check_only = TRUE;
break;
@@ -628,7 +632,7 @@ main(int argc, char *argv[])
if (namelst && (!infodump && !capdump)) {
(void) fprintf(stderr,
"Sorry, -e can't be used without -I or -C\n");
- cleanup();
+ cleanup(namelst);
ExitProgram(EXIT_FAILURE);
}
#endif /* HAVE_BIG_CORE */
@@ -671,7 +675,7 @@ main(int argc, char *argv[])
_nc_progname,
_nc_progname,
usage_string);
- cleanup();
+ cleanup(namelst);
ExitProgram(EXIT_FAILURE);
}
}
@@ -705,7 +709,7 @@ main(int argc, char *argv[])
/* do use resolution */
if (check_only || (!infodump && !capdump) || forceresolve) {
if (!_nc_resolve_uses2(TRUE, literal) && !check_only) {
- cleanup();
+ cleanup(namelst);
ExitProgram(EXIT_FAILURE);
}
}
@@ -755,7 +759,7 @@ main(int argc, char *argv[])
dump_entry(&qp->tterm, suppress_untranslatable,
limited, numbers, NULL);
- for (j = 0; j < qp->nuses; j++)
+ for (j = 0; j < (int) qp->nuses; j++)
dump_uses(qp->uses[j].name, !capdump);
len = show_entry();
if (debug_level != 0 && !limited)
@@ -799,10 +803,7 @@ main(int argc, char *argv[])
else
fprintf(log_fp, "No entries written\n");
}
-#if NO_LEAKS
- free_namelist(namelst);
-#endif
- cleanup();
+ cleanup(namelst);
ExitProgram(EXIT_SUCCESS);
}
@@ -835,15 +836,19 @@ check_acs(TERMTYPE *tp)
}
mapped[UChar(p[0])] = p[1];
}
+
if (mapped[UChar('I')] && !mapped[UChar('i')]) {
_nc_warning("acsc refers to 'I', which is probably an error");
}
+
for (p = boxes, q = missing; *p != '\0'; ++p) {
if (!mapped[UChar(p[0])]) {
*q++ = p[0];
}
- *q = '\0';
}
+ *q = '\0';
+
+ assert(strlen(missing) <= strlen(boxes));
if (*missing != '\0' && strcmp(missing, boxes)) {
_nc_warning("acsc is missing some line-drawing mapping: %s", missing);
}
@@ -887,10 +892,10 @@ check_colors(TERMTYPE *tp)
}
}
-static int
+static char
keypad_final(const char *string)
{
- int result = '\0';
+ char result = '\0';
if (VALID_STRING(string)
&& *string++ == '\033'
@@ -918,6 +923,7 @@ keypad_index(const char *string)
return result;
}
+#define MAX_KP 5
/*
* Do a quick sanity-check for vt100-style keypads to see if the 5-key keypad
* is mapped inconsistently.
@@ -932,8 +938,8 @@ check_keypad(TERMTYPE *tp)
VALID_STRING(key_b2) &&
VALID_STRING(key_c1) &&
VALID_STRING(key_c3)) {
- char final[6];
- int list[5];
+ char final[MAX_KP + 1];
+ int list[MAX_KP];
int increase = 0;
int j, k, kk;
int last;
@@ -947,6 +953,7 @@ check_keypad(TERMTYPE *tp)
final[5] = '\0';
/* special case: legacy coding using 1,2,3,0,. on the bottom */
+ assert(strlen(final) <= MAX_KP);
if (!strcmp(final, "qsrpn"))
return;
@@ -957,22 +964,22 @@ check_keypad(TERMTYPE *tp)
list[4] = keypad_index(key_c3);
/* check that they're all vt100 keys */
- for (j = 0; j < 5; ++j) {
+ for (j = 0; j < MAX_KP; ++j) {
if (list[j] < 0) {
return;
}
}
/* check if they're all in increasing order */
- for (j = 1; j < 5; ++j) {
+ for (j = 1; j < MAX_KP; ++j) {
if (list[j] > list[j - 1]) {
++increase;
}
}
- if (increase != 4) {
+ if (increase != (MAX_KP - 1)) {
show[0] = '\0';
- for (j = 0, last = -1; j < 5; ++j) {
+ for (j = 0, last = -1; j < MAX_KP; ++j) {
for (k = 0, kk = -1, test = 100; k < 5; ++k) {
if (list[k] > last &&
list[k] < test) {
@@ -981,6 +988,7 @@ check_keypad(TERMTYPE *tp)
}
}
last = test;
+ assert(strlen(show) < (MAX_KP * 4));
switch (kk) {
case 0:
strcat(show, " ka1");
diff --git a/progs/toe.c b/progs/toe.c
index 38b85cb362ed..8af6f371b77b 100644
--- a/progs/toe.c
+++ b/progs/toe.c
@@ -44,7 +44,7 @@
#include <hashed_db.h>
#endif
-MODULE_ID("$Id: toe.c,v 1.48 2008/01/05 20:41:26 tom Exp $")
+MODULE_ID("$Id: toe.c,v 1.51 2008/08/16 21:53:25 tom Exp $")
#define isDotname(name) (!strcmp(name, ".") || !strcmp(name, ".."))
@@ -163,6 +163,7 @@ typelist(int eargc, char *eargv[],
for (i = 0; i < eargc; i++) {
#if USE_DATABASE
if (_nc_is_dir_path(eargv[i])) {
+ char *cwd_buf = 0;
DIR *termdir;
DIRENT *subdir;
@@ -177,20 +178,30 @@ typelist(int eargc, char *eargv[],
while ((subdir = readdir(termdir)) != 0) {
size_t len = NAMLEN(subdir);
- char buf[PATH_MAX];
+ size_t cwd_len = len + strlen(eargv[i]) + 3;
char name_1[PATH_MAX];
DIR *entrydir;
DIRENT *entry;
+ cwd_buf = typeRealloc(char, cwd_len, cwd_buf);
+ if (cwd_buf == 0) {
+ perror("realloc cwd_buf");
+ continue;
+ }
+
strncpy(name_1, subdir->d_name, len)[len] = '\0';
if (isDotname(name_1))
continue;
- (void) sprintf(buf, "%s/%s/", eargv[i], name_1);
- if (chdir(buf) != 0)
+ (void) sprintf(cwd_buf, "%s/%.*s/", eargv[i], (int) len, name_1);
+ if (chdir(cwd_buf) != 0)
continue;
entrydir = opendir(".");
+ if (entrydir == 0) {
+ perror(cwd_buf);
+ continue;
+ }
while ((entry = readdir(entrydir)) != 0) {
char name_2[PATH_MAX];
TERMTYPE lterm;
@@ -222,6 +233,8 @@ typelist(int eargc, char *eargv[],
closedir(entrydir);
}
closedir(termdir);
+ if (cwd_buf != 0)
+ free(cwd_buf);
}
#if USE_HASHED_DB
else {
@@ -317,7 +330,7 @@ main(int argc, char *argv[])
bool invert_dependencies = FALSE;
bool header = FALSE;
char *report_file = 0;
- int i;
+ unsigned i;
int code;
int this_opt, last_opt = '?';
int v_opt = 0;
@@ -386,7 +399,7 @@ main(int argc, char *argv[])
for_entry_list(qp) {
if (qp->nuses) {
- int j;
+ unsigned j;
(void) printf("%s:", _nc_first_name(qp->tterm.term_names));
for (j = 0; j < qp->nuses; j++)
diff --git a/progs/tput.c b/progs/tput.c
index 8745cc9977ad..022d4940c2a1 100644
--- a/progs/tput.c
+++ b/progs/tput.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
@@ -42,11 +42,12 @@
#include <progs.priv.h>
#if !PURE_TERMINFO
+#include <dump_entry.h>
#include <termsort.c>
#endif
#include <transform.h>
-MODULE_ID("$Id: tput.c,v 1.41 2007/10/13 20:34:16 tom Exp $")
+MODULE_ID("$Id: tput.c,v 1.42 2008/07/13 11:05:12 tom Exp $")
#define PUTS(s) fputs(s, stdout)
#define PUTCHAR(c) putchar(c)
diff --git a/progs/tset.c b/progs/tset.c
index 3d6091224979..6a4d2d61c3de 100644
--- a/progs/tset.c
+++ b/progs/tset.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
@@ -89,9 +89,12 @@
char *ttyname(int fd);
#endif
-/* this is just to stifle a missing-prototype warning */
-#ifdef linux
-# include <sys/ioctl.h>
+#if HAVE_SIZECHANGE
+# if !defined(sun) || !TERMIOS
+# if HAVE_SYS_IOCTL_H
+# include <sys/ioctl.h>
+# endif
+# endif
#endif
#if NEED_PTEM_H
@@ -104,7 +107,27 @@ char *ttyname(int fd);
#include <dump_entry.h>
#include <transform.h>
-MODULE_ID("$Id: tset.c,v 1.70 2007/10/13 22:22:04 tom Exp $")
+MODULE_ID("$Id: tset.c,v 1.76 2008/10/11 19:26:19 tom Exp $")
+
+/*
+ * SCO defines TIOCGSIZE and the corresponding struct. Other systems (SunOS,
+ * Solaris, IRIX) define TIOCGWINSZ and struct winsize.
+ */
+#ifdef TIOCGSIZE
+# define IOCTL_GET_WINSIZE TIOCGSIZE
+# define IOCTL_SET_WINSIZE TIOCSSIZE
+# define STRUCT_WINSIZE struct ttysize
+# define WINSIZE_ROWS(n) n.ts_lines
+# define WINSIZE_COLS(n) n.ts_cols
+#else
+# ifdef TIOCGWINSZ
+# define IOCTL_GET_WINSIZE TIOCGWINSZ
+# define IOCTL_SET_WINSIZE TIOCSWINSZ
+# define STRUCT_WINSIZE struct winsize
+# define WINSIZE_ROWS(n) n.ws_row
+# define WINSIZE_COLS(n) n.ws_col
+# endif
+#endif
extern char **environ;
@@ -168,7 +191,7 @@ failed(const char *msg)
char temp[BUFSIZ];
unsigned len = strlen(_nc_progname) + 2;
- if (len < sizeof(temp) - 12) {
+ if ((int) len < (int) sizeof(temp) - 12) {
strcpy(temp, _nc_progname);
strcat(temp, ": ");
} else {
@@ -440,11 +463,15 @@ add_mapping(const char *port, char *arg)
mapp->conditional = ~mapp->conditional & (EQ | GT | LT);
/* If user specified a port with an option flag, set it. */
- done:if (port) {
- if (mapp->porttype)
- badmopt:err("illegal -m option format: %s", copy);
+ done:
+ if (port) {
+ if (mapp->porttype) {
+ badmopt:
+ err("illegal -m option format: %s", copy);
+ }
mapp->porttype = port;
}
+ free(copy);
#ifdef MAPDEBUG
(void) printf("port: %s\n", mapp->porttype ? mapp->porttype : "ANY");
(void) printf("type: %s\n", mapp->type);
@@ -780,16 +807,16 @@ reset_mode(void)
#ifdef NLDLY
| NLDLY
#endif
-#ifdef CRDLY
+#ifdef CRDLY
| CRDLY
#endif
-#ifdef TABDLY
+#ifdef TABDLY
| TABDLY
#endif
-#ifdef BSDLY
+#ifdef BSDLY
| BSDLY
#endif
-#ifdef VTDLY
+#ifdef VTDLY
| VTDLY
#endif
#ifdef FFDLY
@@ -863,13 +890,13 @@ set_control_chars(void)
{
#ifdef TERMIOS
if (DISABLED(mode.c_cc[VERASE]) || terasechar >= 0)
- mode.c_cc[VERASE] = terasechar >= 0 ? terasechar : default_erase();
+ mode.c_cc[VERASE] = (terasechar >= 0) ? terasechar : default_erase();
if (DISABLED(mode.c_cc[VINTR]) || intrchar >= 0)
- mode.c_cc[VINTR] = intrchar >= 0 ? intrchar : CINTR;
+ mode.c_cc[VINTR] = (intrchar >= 0) ? intrchar : CINTR;
if (DISABLED(mode.c_cc[VKILL]) || tkillchar >= 0)
- mode.c_cc[VKILL] = tkillchar >= 0 ? tkillchar : CKILL;
+ mode.c_cc[VKILL] = (tkillchar >= 0) ? tkillchar : CKILL;
#endif
}
@@ -1128,17 +1155,14 @@ usage(void)
static char
arg_to_char(void)
{
- return (optarg[0] == '^' && optarg[1] != '\0')
- ? ((optarg[1] == '?') ? '\177' : CTRL(optarg[1]))
- : optarg[0];
+ return (char) ((optarg[0] == '^' && optarg[1] != '\0')
+ ? ((optarg[1] == '?') ? '\177' : CTRL(optarg[1]))
+ : optarg[0]);
}
int
main(int argc, char **argv)
{
-#if defined(TIOCGWINSZ) && defined(TIOCSWINSZ)
- struct winsize win;
-#endif
int ch, noinit, noset, quiet, Sflag, sflag, showterm;
const char *p;
const char *ttype;
@@ -1218,9 +1242,9 @@ main(int argc, char **argv)
can_restore = TRUE;
original = oldmode = mode;
#ifdef TERMIOS
- ospeed = cfgetospeed(&mode);
+ ospeed = (NCURSES_OSPEED) cfgetospeed(&mode);
#else
- ospeed = mode.sg_ospeed;
+ ospeed = (NCURSES_OSPEED) mode.sg_ospeed;
#endif
if (!strcmp(_nc_progname, PROG_RESET)) {
@@ -1234,15 +1258,17 @@ main(int argc, char **argv)
tcolumns = columns;
tlines = lines;
-#if defined(TIOCGWINSZ) && defined(TIOCSWINSZ)
+#if HAVE_SIZECHANGE
if (opt_w) {
- /* Set window size */
- (void) ioctl(STDERR_FILENO, TIOCGWINSZ, &win);
- if (win.ws_row == 0 && win.ws_col == 0 &&
+ STRUCT_WINSIZE win;
+ /* Set window size if not set already */
+ (void) ioctl(STDERR_FILENO, IOCTL_GET_WINSIZE, &win);
+ if (WINSIZE_ROWS(win) == 0 &&
+ WINSIZE_COLS(win) == 0 &&
tlines > 0 && tcolumns > 0) {
- win.ws_row = tlines;
- win.ws_col = tcolumns;
- (void) ioctl(STDERR_FILENO, TIOCSWINSZ, &win);
+ WINSIZE_ROWS(win) = tlines;
+ WINSIZE_COLS(win) = tcolumns;
+ (void) ioctl(STDERR_FILENO, IOCTL_SET_WINSIZE, &win);
}
}
#endif
@@ -1293,7 +1319,7 @@ main(int argc, char **argv)
* environmental variable SHELL ending in "csh".
*/
if ((var = getenv("SHELL")) != 0
- && ((len = strlen(leaf = _nc_basename(var))) >= 3)
+ && ((len = (int) strlen(leaf = _nc_basename(var))) >= 3)
&& !strcmp(leaf + len - 3, "csh"))
p = "set noglob;\nsetenv TERM %s;\nunset noglob;\n";
else