]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/tinfo/parse_entry.c
ncurses 6.2 - patch 20210508
[ncurses.git] / ncurses / tinfo / parse_entry.c
index f8cca8b5747824f6a551c0b4d92a46b08757bf7c..ec2d3364234e8eefd06ec55d0e580330d2189d2d 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            *
@@ -47,7 +48,7 @@
 #include <ctype.h>
 #include <tic.h>
 
-MODULE_ID("$Id: parse_entry.c,v 1.97 2019/08/03 23:10:38 tom Exp $")
+MODULE_ID("$Id: parse_entry.c,v 1.101 2020/10/24 21:37:13 tom Exp $")
 
 #ifdef LINT
 static short const parametrized[] =
@@ -543,10 +544,14 @@ _nc_parse_entry(ENTRY * entryp, int literal, bool silent)
 
            case STRING:
                ptr = _nc_curr_token.tk_valstring;
-               if (_nc_syntax == SYN_TERMCAP)
+               if (_nc_syntax == SYN_TERMCAP) {
+                   int n = entry_ptr->nte_index;
                    ptr = _nc_captoinfo(_nc_curr_token.tk_name,
                                        ptr,
-                                       parametrized[entry_ptr->nte_index]);
+                                       (n < (int) SIZEOF(parametrized))
+                                       ? parametrized[n]
+                                       : 0);
+               }
                entryp->tterm.Strings[entry_ptr->nte_index] = _nc_save_str(ptr);
                break;
 
@@ -654,12 +659,12 @@ _nc_capcmp(const char *s, const char *t)
 }
 
 static void
-append_acs0(string_desc * dst, int code, int src)
+append_acs0(string_desc * dst, int code, char *src, size_t off)
 {
-    if (src != 0) {
+    if (src != 0 && off < strlen(src)) {
        char temp[3];
        temp[0] = (char) code;
-       temp[1] = (char) src;
+       temp[1] = src[off];
        temp[2] = 0;
        _nc_safe_strcat(dst, temp);
     }
@@ -669,7 +674,7 @@ static void
 append_acs(string_desc * dst, int code, char *src)
 {
     if (VALID_STRING(src) && strlen(src) == 1) {
-       append_acs0(dst, code, *src);
+       append_acs0(dst, code, src, 0);
     }
 }
 
@@ -1038,17 +1043,17 @@ postprocess_terminfo(TERMTYPE2 *tp)
        _nc_str_init(&result, buf2, sizeof(buf2));
        _nc_safe_strcat(&result, acs_chars);
 
-       append_acs0(&result, 'l', box_chars_1[0]);      /* ACS_ULCORNER */
-       append_acs0(&result, 'q', box_chars_1[1]);      /* ACS_HLINE */
-       append_acs0(&result, 'k', box_chars_1[2]);      /* ACS_URCORNER */
-       append_acs0(&result, 'x', box_chars_1[3]);      /* ACS_VLINE */
-       append_acs0(&result, 'j', box_chars_1[4]);      /* ACS_LRCORNER */
-       append_acs0(&result, 'm', box_chars_1[5]);      /* ACS_LLCORNER */
-       append_acs0(&result, 'w', box_chars_1[6]);      /* ACS_TTEE */
-       append_acs0(&result, 'u', box_chars_1[7]);      /* ACS_RTEE */
-       append_acs0(&result, 'v', box_chars_1[8]);      /* ACS_BTEE */
-       append_acs0(&result, 't', box_chars_1[9]);      /* ACS_LTEE */
-       append_acs0(&result, 'n', box_chars_1[10]);     /* ACS_PLUS */
+       append_acs0(&result, 'l', box_chars_1, 0);      /* ACS_ULCORNER */
+       append_acs0(&result, 'q', box_chars_1, 1);      /* ACS_HLINE */
+       append_acs0(&result, 'k', box_chars_1, 2);      /* ACS_URCORNER */
+       append_acs0(&result, 'x', box_chars_1, 3);      /* ACS_VLINE */
+       append_acs0(&result, 'j', box_chars_1, 4);      /* ACS_LRCORNER */
+       append_acs0(&result, 'm', box_chars_1, 5);      /* ACS_LLCORNER */
+       append_acs0(&result, 'w', box_chars_1, 6);      /* ACS_TTEE */
+       append_acs0(&result, 'u', box_chars_1, 7);      /* ACS_RTEE */
+       append_acs0(&result, 'v', box_chars_1, 8);      /* ACS_BTEE */
+       append_acs0(&result, 't', box_chars_1, 9);      /* ACS_LTEE */
+       append_acs0(&result, 'n', box_chars_1, 10);     /* ACS_PLUS */
 
        if (buf2[0]) {
            acs_chars = _nc_save_str(buf2);