]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/tinfo/captoinfo.c
ncurses 6.2 - patch 20210911
[ncurses.git] / ncurses / tinfo / captoinfo.c
index 9362105ab795ebd4192e812737ca1e798e0eece9..7e14731df3685b78269bbbf8e167e39144063a6e 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright 2018-2019,2020 Thomas E. Dickey                                *
+ * Copyright 2018-2020,2021 Thomas E. Dickey                                *
  * Copyright 1998-2016,2017 Free Software Foundation, Inc.                  *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
@@ -98,7 +98,7 @@
 #include <ctype.h>
 #include <tic.h>
 
-MODULE_ID("$Id: captoinfo.c,v 1.99 2020/05/25 21:28:29 tom Exp $")
+MODULE_ID("$Id: captoinfo.c,v 1.102 2021/09/04 10:29:15 tom Exp $")
 
 #if 0
 #define DEBUG_THIS(p) DEBUG(9, p)
@@ -634,12 +634,15 @@ _nc_infotocap(const char *cap GCC_UNUSED, const char *str, int const parameteriz
        int offset;
     } fixups[MAX_TC_FIXUPS];
 
-    DEBUG_THIS(("_nc_infotocap params %d, %s", parameterized, str));
+    DEBUG_THIS(("_nc_infotocap %s params %d, %s",
+               _nc_strict_bsd ? "strict" : "loose",
+               parameterized,
+               _nc_visbuf(str)));
 
     /* we may have to move some trailing mandatory padding up front */
     padding = str + strlen(str) - 1;
     if (padding > str && *padding == '>') {
-       if (*--padding == '/')
+       if (padding > (str + 1) && *--padding == '/')
            --padding;
        while (isdigit(UChar(*padding)) || *padding == '.' || *padding == '*')
            padding--;
@@ -673,6 +676,11 @@ _nc_infotocap(const char *cap GCC_UNUSED, const char *str, int const parameteriz
                bufptr = save_char(bufptr, *str++);
                bufptr = save_char(bufptr, *str);
            }
+       } else if (str[0] == ':') {
+           bufptr = save_char(bufptr, '\\');
+           bufptr = save_char(bufptr, '0');
+           bufptr = save_char(bufptr, '7');
+           bufptr = save_char(bufptr, '2');
        } else if (str[0] == '\\') {
            if (str[1] == '\0' || (str + 1) == trimmed) {
                bufptr = save_string(bufptr, "\\134");
@@ -932,7 +940,7 @@ _nc_infotocap(const char *cap GCC_UNUSED, const char *str, int const parameteriz
                break;
 
                /*
-                * %s isn't in termcap, but it's convenient to pass it through
+                * %s isn't in termcap, but it is convenient to pass it through
                 * so we can represent things like terminfo pfkey strings in
                 * termcap notation.
                 */