/****************************************************************************
- * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2013,2014 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 *
#include <dump_entry.h>
-MODULE_ID("$Id: infocmp.c,v 1.120 2012/06/08 23:05:25 tom Exp $")
+MODULE_ID("$Id: infocmp.c,v 1.129 2014/02/01 22:11:03 tom Exp $")
#define L_CURL "{"
#define R_CURL "}"
}
#endif
+static void
+failed(const char *s)
+{
+ perror(s);
+ ExitProgram(EXIT_FAILURE);
+}
+
static char *
canonical_name(char *ptr, char *buf)
/* extract the terminal type's primary name */
* macro is used for limit-checks against the symbols that tic uses to omit
* the two types of non-standard entry.
*/
+#if NCURSES_XNAMES
#define check_user_definable(n,limit) if (!_nc_user_definable && (n) > (limit)) break
+#else
+#define check_user_definable(n,limit) if ((n) > (limit)) break
+#endif
/*
* Use these macros to simplify loops on C_COMMON and C_NAND:
const assoc *ap;
int tp_lines = tp->Numbers[2];
- if (cap == ABSENT_STRING || cap == CANCELLED_STRING)
+ if (!VALID_STRING(cap))
return;
(void) printf("%s: ", name);
for (i = 0; i < STRCOUNT; i++) {
char *cp = tp->Strings[i];
- /* don't use soft-key capabilities */
- if (strnames[i][0] == 'k' && strnames[i][0] == 'f')
+ /* don't use function-key capabilities */
+ if (strnames[i][0] == 'k' && strnames[i][1] == 'f')
continue;
- if (cp != ABSENT_STRING && cp != CANCELLED_STRING && cp[0] && cp
- != cap) {
+ if (VALID_STRING(cp) &&
+ cp[0] != '\0' &&
+ cp != cap) {
len = strlen(cp);
(void) strncpy(buf2, sp, len);
buf2[len] = '\0';
if (_nc_capcmp(cp, buf2))
continue;
-#define ISRS(s) (!strncmp((s), "is", 2) || !strncmp((s), "rs", 2))
+#define ISRS(s) (!strncmp((s), "is", (size_t) 2) || !strncmp((s), "rs", (size_t) 2))
/*
* Theoretically we just passed the test for translation
* (equality once the padding is stripped). However, there
/* now check for standard-mode sequences */
if (!expansion
&& (csi = skip_csi(sp)) != 0
- && (len = strspn(sp + csi, "0123456789;"))
+ && (len = (strspn) (sp + csi, "0123456789;"))
&& (len < sizeof(buf3))
&& (next = (size_t) csi + len)
&& ((sp[next] == 'h') || (sp[next] == 'l'))) {
if (!expansion
&& (csi = skip_csi(sp)) != 0
&& sp[csi] == '?'
- && (len = strspn(sp + csi + 1, "0123456789;"))
+ && (len = (strspn) (sp + csi + 1, "0123456789;"))
&& (len < sizeof(buf3))
&& (next = (size_t) csi + 1 + len)
&& ((sp[next] == 'h') || (sp[next] == 'l'))) {
/* now check for ECMA highlight sequences */
if (!expansion
&& (csi = skip_csi(sp)) != 0
- && (len = strspn(sp + csi, "0123456789;")) != 0
+ && (len = (strspn) (sp + csi, "0123456789;")) != 0
&& (len < sizeof(buf3))
&& (next = (size_t) csi + len)
&& sp[next] == 'm') {
," -R subset (see manpage)"
," -T eliminate size limits (test)"
," -U eliminate post-processing of entries"
+ ," -D print database locations"
," -V print version"
#if NCURSES_XNAMES
," -a with -F, list commented-out caps"
need = (strlen(entries->tterm.term_names)
+ strlen(type)
+ strlen(fmt));
- initializer = (char *) malloc(need);
+ initializer = (char *) malloc(need + 1);
+ if (initializer == 0)
+ failed("any_initializer");
}
_nc_STRCPY(initializer, entries->tterm.term_names, need);
/* make sure we have enough space to add two terminal entries */
myargv = typeCalloc(char *, (size_t) (argc + 3));
+ if (myargv == 0)
+ failed("myargv");
+
memcpy(myargv, argv, (sizeof(char *) * (size_t) argc));
argv = myargv;
}
maxterms = (size_t) (argc + 2 - optind);
- tfile = typeMalloc(path, maxterms);
- tname = typeCalloc(char *, maxterms);
- entries = typeCalloc(ENTRY, maxterms);
+ if ((tfile = typeMalloc(path, maxterms)) == 0)
+ failed("tfile");
+ if ((tname = typeCalloc(char *, maxterms)) == 0)
+ failed("tname");
+ if ((entries = typeCalloc(ENTRY, maxterms)) == 0)
+ failed("entries");
#if NO_LEAKS
- entered = typeCalloc(ENTERED, maxterms);
+ if ((entered = typeCalloc(ENTERED, maxterms)) == 0)
+ failed("entered");
#endif
if (tfile == 0
tname[termcount] = argv[optind];
if (directory) {
-#if USE_DATABASE
+#if NCURSES_USE_DATABASE
#if MIXEDCASE_FILENAMES
#define LEAF_FMT "%c"
#else