]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - progs/dump_entry.c
ncurses 6.2 - patch 20210313
[ncurses.git] / progs / dump_entry.c
index d0e420ecfb453c6410d2d1f67ebbd33a9a36f5a4..75bbe059cd0bd9b6a0a0cd1e9159b483eea4b87a 100644 (file)
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998-2018,2019 Free Software Foundation, Inc.              *
+ * Copyright 2018-2019,2020 Thomas E. Dickey                                *
+ * Copyright 1998-2016,2017 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            *
@@ -39,7 +40,7 @@
 #include "termsort.c"          /* this C file is generated */
 #include <parametrized.h>      /* so is this */
 
-MODULE_ID("$Id: dump_entry.c,v 1.173 2019/05/11 21:02:24 tom Exp $")
+MODULE_ID("$Id: dump_entry.c,v 1.181 2020/12/26 18:25:18 tom Exp $")
 
 #define DISCARD(string) string = ABSENT_STRING
 #define PRINTF (void) printf
@@ -746,7 +747,7 @@ leading_DYN(DYNBUF * buffer, const char *leading)
 }
 
 bool
-has_params(const char *src)
+has_params(const char *src, bool formatting)
 {
     bool result = FALSE;
     int len = (int) strlen(src);
@@ -764,7 +765,11 @@ has_params(const char *src)
        }
     }
     if (!ifthen) {
-       result = ((len > 50) && params);
+       if (formatting) {
+           result = ((len > 50) && params);
+       } else {
+           result = params;
+       }
     }
     return result;
 }
@@ -773,7 +778,7 @@ static char *
 fmt_complex(TERMTYPE2 *tterm, const char *capability, char *src, int level)
 {
     bool percent = FALSE;
-    bool params = has_params(src);
+    bool params = has_params(src, TRUE);
 
     while (*src != '\0') {
        switch (*src) {
@@ -800,7 +805,7 @@ fmt_complex(TERMTYPE2 *tterm, const char *capability, char *src, int level)
                    strncpy_DYN(&tmpbuf, "%", (size_t) 1);
                    strncpy_DYN(&tmpbuf, src, (size_t) 1);
                    src++;
-                   params = has_params(src);
+                   params = has_params(src, TRUE);
                    if (!params && *src != '\0' && *src != '%') {
                        strncpy_DYN(&tmpbuf, "\n", (size_t) 1);
                        indent_DYN(&tmpbuf, level + 1);
@@ -1109,7 +1114,7 @@ fmt_entry(TERMTYPE2 *tterm,
                              ? parametrized[i]
                              : ((*srccap == 'k')
                                 ? 0
-                                : has_params(srccap)));
+                                : has_params(srccap, FALSE)));
                char *cv = _nc_infotocap(name, srccap, params);
 
                if (cv == 0) {
@@ -1124,7 +1129,7 @@ fmt_entry(TERMTYPE2 *tterm,
                        char *s = srccap, *d = buffer;
                        int need = 3 + (int) strlen(name);
                        while ((*d = *s++) != 0) {
-                           if ((d - buffer + 1) >= (int) sizeof(buffer)) {
+                           if ((d - buffer + 2) >= (int) sizeof(buffer)) {
                                fprintf(stderr,
                                        "%s: value for %s is too long\n",
                                        _nc_progname,
@@ -1136,7 +1141,8 @@ fmt_entry(TERMTYPE2 *tterm,
                                *d++ = '\\';
                                *d = ':';
                            } else if (*d == '\\') {
-                               *++d = *s++;
+                               if ((*++d = *s++) == '\0')
+                                   break;
                            }
                            d++;
                            *d = '\0';
@@ -1341,7 +1347,7 @@ kill_labels(TERMTYPE2 *tterm, int target)
     int n;
     int result = 0;
     char *cap;
-    char name[10];
+    char name[20];
 
     for (n = 0; n <= 10; ++n) {
        _nc_SPRINTF(name, _nc_SLIMIT(sizeof(name)) "lf%d", n);
@@ -1367,7 +1373,7 @@ kill_fkeys(TERMTYPE2 *tterm, int target)
     int n;
     int result = 0;
     char *cap;
-    char name[10];
+    char name[20];
 
     for (n = 60; n >= 0; --n) {
        _nc_SPRINTF(name, _nc_SLIMIT(sizeof(name)) "kf%d", n);
@@ -1396,7 +1402,7 @@ one_one_mapping(const char *mapping)
 
     if (VALID_STRING(mapping)) {
        int n = 0;
-       while (mapping[n] != '\0') {
+       while (mapping[n] != '\0' && mapping[n + 1] != '\0') {
            if (isLine(mapping[n]) &&
                mapping[n] != mapping[n + 1]) {
                result = FALSE;