libncurses: Import https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.5.tar.gz changes

Change-Id: I3433d30ca01359fd2e3623ede96b531f0b39cbfa
Signed-off-by: micky387 <mickaelsaibi@free.fr>
diff --git a/test/cardfile.c b/test/cardfile.c
index b750241..092483b 100644
--- a/test/cardfile.c
+++ b/test/cardfile.c
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1999-2012,2013 Free Software Foundation, Inc.              *
+ * Copyright 2019-2021,2022 Thomas E. Dickey                                *
+ * Copyright 1999-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            *
@@ -29,7 +30,7 @@
 /*
  * Author: Thomas E. Dickey
  *
- * $Id: cardfile.c,v 1.42 2013/09/28 22:02:17 tom Exp $
+ * $Id: cardfile.c,v 1.51 2022/12/04 00:40:11 tom Exp $
  *
  * File format: text beginning in column 1 is a title; other text is content.
  */
@@ -125,15 +126,19 @@
 static void
 add_content(CARD * card, const char *content)
 {
-    size_t total, offset;
+    size_t total;
 
     content = skip(content);
     if ((total = strlen(content)) != 0) {
+	size_t offset;
+
 	if (card->content != 0 && (offset = strlen(card->content)) != 0) {
 	    total += 1 + offset;
 	    card->content = typeRealloc(char, total + 1, card->content);
-	    if (card->content)
-		strcpy(card->content + offset++, " ");
+	    if (card->content) {
+		_nc_STRCPY(card->content + offset, " ", total + 1 - offset);
+		offset++;
+	    }
 	} else {
 	    offset = 0;
 	    if (card->content != 0)
@@ -141,7 +146,7 @@
 	    card->content = typeMalloc(char, total + 1);
 	}
 	if (card->content)
-	    strcpy(card->content + offset, content);
+	    _nc_STRCPY(card->content + offset, content, total + 1 - offset);
 	else
 	    failed("add_content");
     }
@@ -171,10 +176,11 @@
 read_data(char *fname)
 {
     FILE *fp;
-    CARD *card = 0;
-    char buffer[BUFSIZ];
 
     if ((fp = fopen(fname, "r")) != 0) {
+	CARD *card = 0;
+	char buffer[BUFSIZ];
+
 	while (fgets(buffer, sizeof(buffer), fp)) {
 	    trim(buffer);
 	    if (isspace(UChar(*buffer))) {
@@ -195,15 +201,17 @@
 write_data(const char *fname)
 {
     FILE *fp;
-    CARD *p = 0;
-    int n;
 
     if (!strcmp(fname, default_name))
 	fname = "cardfile.out";
 
     if ((fp = fopen(fname, "w")) != 0) {
+	CARD *p = 0;
+
 	for (p = all_cards; p != 0; p = p->link) {
 	    FIELD **f = form_fields(p->form);
+	    int n;
+
 	    for (n = 0; f[n] != 0; n++) {
 		char *s = field_buffer(f[n], 0);
 		if (s != 0
@@ -288,7 +296,7 @@
 static CARD *
 first_card(CARD * now)
 {
-    if (!isVisible(now))
+    if (now != NULL && !isVisible(now))
 	now = next_card(now);
     return now;
 }
@@ -363,7 +371,7 @@
 
 #if (defined(KEY_RESIZE) && HAVE_WRESIZE) || NO_LEAKS
 static void
-free_form_fields(FIELD ** f)
+free_form_fields(FIELD **f)
 {
     int n;
 
@@ -389,7 +397,6 @@
     int form_high;
     int y;
     int x;
-    int ch = ERR;
     int finished = FALSE;
 
     show_legend();
@@ -430,6 +437,8 @@
     order_cards(top_card, visible_cards);
 
     while (!finished) {
+	int ch = ERR;
+
 	update_panels();
 	doupdate();
 
@@ -520,13 +529,11 @@
     }
 #if NO_LEAKS
     while (all_cards != 0) {
-	FIELD **f;
-
 	p = all_cards;
 	all_cards = all_cards->link;
 
 	if (isVisible(p)) {
-	    f = form_fields(p->form);
+	    FIELD **f = form_fields(p->form);
 
 	    unpost_form(p->form);	/* ...so we can free it */
 	    free_form(p->form);	/* this also disconnects the fields */
@@ -543,37 +550,45 @@
 }
 
 static void
-usage(void)
+usage(int ok)
 {
     static const char *msg[] =
     {
-	"Usage: view [options] file"
+	"Usage: cardfile [options] file"
 	,""
+	,USAGE_COMMON
 	,"Options:"
 	," -c       use color if terminal supports it"
     };
     size_t n;
     for (n = 0; n < SIZEOF(msg); n++)
 	fprintf(stderr, "%s\n", msg[n]);
-    ExitProgram(EXIT_FAILURE);
+    ExitProgram(ok ? EXIT_SUCCESS : EXIT_FAILURE);
 }
 
 /*******************************************************************************/
+/* *INDENT-OFF* */
+VERSION_COMMON()
+/* *INDENT-ON* */
 
 int
 main(int argc, char *argv[])
 {
-    int n;
+    int ch;
 
     setlocale(LC_ALL, "");
 
-    while ((n = getopt(argc, argv, "c")) != -1) {
-	switch (n) {
+    while ((ch = getopt(argc, argv, OPTS_COMMON "c")) != -1) {
+	switch (ch) {
 	case 'c':
 	    try_color = TRUE;
 	    break;
+	case OPTS_VERSION:
+	    show_version(argv);
+	    ExitProgram(EXIT_SUCCESS);
 	default:
-	    usage();
+	    usage(ch == OPTS_USAGE);
+	    /* NOTREACHED */
 	}
     }
 
@@ -593,6 +608,7 @@
     }
 
     if (optind + 1 == argc) {
+	int n;
 	for (n = 1; n < argc; n++)
 	    read_data(argv[n]);
 	if (count_cards() == 0)