****************************************************************************/
/*
- * $Id: curses.priv.h,v 1.666 2023/05/20 18:20:39 tom Exp $
+ * $Id: curses.priv.h,v 1.671 2023/08/26 19:01:27 tom Exp $
*
* curses.priv.h
*
#if (defined(__USE_MINGW_ANSI_STDIO) && __USE_MINGW_ANSI_STDIO != 0) && (defined(__GNUC__) && (__GNUC__ < 12))
# undef PRIxPTR /* gcc bug fixed in 12.x */
# define PRIxPTR "lX"
-# define CASTxPTR(n) (unsigned long)(intptr_t)(n)
+# define CASTxPTR(n) (unsigned long)(intptr_t)(void*)(n)
#else
-# define CASTxPTR(n) (intptr_t)(n)
+# define CASTxPTR(n) (intptr_t)(void*)(n)
#endif
#ifndef PRIxPTR
# define PRIxPTR "lx"
-# define CASTxPTR(n) (long)(n)
+# define CASTxPTR(n) (long)(void*)(n)
#endif
/* include signal.h before curses.h to work-around defect in glibc 2.1.3 */
#define SET_SCREEN_PAIR(s,p) SetPair(SCREEN_ATTRS(s), p)
#if USE_REENTRANT || NCURSES_SP_FUNCS
-NCURSES_EXPORT(int *) _nc_ptr_Lines (SCREEN *);
-NCURSES_EXPORT(int *) _nc_ptr_Cols (SCREEN *);
-NCURSES_EXPORT(int *) _nc_ptr_Tabsize (SCREEN *);
-NCURSES_EXPORT(int *) _nc_ptr_Escdelay (SCREEN *);
+extern NCURSES_EXPORT(int *) _nc_ptr_Lines (SCREEN *);
+extern NCURSES_EXPORT(int *) _nc_ptr_Cols (SCREEN *);
+extern NCURSES_EXPORT(int *) _nc_ptr_Tabsize (SCREEN *);
+extern NCURSES_EXPORT(int *) _nc_ptr_Escdelay (SCREEN *);
#endif
#if USE_REENTRANT
#define TR_PUTC(c) TR(TRACE_CHARPUT, ("PUTC %#x", UChar(c)))
#ifndef MB_LEN_MAX
-#define MB_LEN_MAX 8 /* should be >= MB_CUR_MAX, but that may be a function */
+#define MB_LEN_MAX 16 /* should be >= MB_CUR_MAX, but that may be a function */
#endif
#if USE_WIDEC_SUPPORT /* { */
+/* true if the status/errno indicate an illegal multibyte sequence */
#define isEILSEQ(status) (((size_t)status == (size_t)-1) && (errno == EILSEQ))
#define init_mb(state) memset(&(state), 0, sizeof(state))
#define isWidecExt(ch) (0)
#define if_WIDEC(code) /* nothing */
-#define Charable(ch) ((ch) >= ' ' && (ch) <= '~')
+#define Charable(ch) (CharOf(ch) >= ' ' && CharOf(ch) <= '~')
#define L(ch) ch
#endif /* } */
#define SIZEOF(v) (sizeof(v)/sizeof(v[0]))
+#include <nc_alloc.h>
+#include <nc_access.h>
+
#define FreeIfNeeded(p) if ((p) != 0) free(p)
/* FreeAndNull() is not a comma-separated expression because some compilers
*/
#define FreeAndNull(p) do { free(p); p = 0; } while (0)
-#include <nc_alloc.h>
-#include <nc_access.h>
+#ifdef EXP_OOM_TESTING
+extern NCURSES_EXPORT(void *) _nc_oom_malloc(size_t size);
+extern NCURSES_EXPORT(void *) _nc_oom_calloc(size_t nmemb, size_t size);
+extern NCURSES_EXPORT(void *) _nc_oom_realloc(void *ptr, size_t size);
+extern NCURSES_EXPORT(void) _nc_oom_free(void *ptr);
+extern NCURSES_EXPORT(char *) _nc_oom_strdup(const char *ptr);
+#define malloc(size) _nc_oom_malloc(size)
+#define calloc(nmemb, size) _nc_oom_calloc(nmemb, size)
+#define realloc(ptr, size) _nc_oom_realloc(ptr, size)
+#define free(ptr) _nc_oom_free(ptr)
+#define strdup(ptr) _nc_oom_strdup(ptr)
+#endif
/*
* Use these for tic/infocmp malloc failures. Generally the ncurses library
/* lib_addch.c */
#if USE_WIDEC_SUPPORT
-NCURSES_EXPORT(int) _nc_build_wch(WINDOW *win, ARG_CH_T ch);
+extern NCURSES_EXPORT(int) _nc_build_wch(WINDOW *win, ARG_CH_T ch);
#endif
/* lib_addstr.c */
/* strings.c */
extern NCURSES_EXPORT(string_desc *) _nc_str_init (string_desc *, char *, size_t);
extern NCURSES_EXPORT(string_desc *) _nc_str_null (string_desc *, size_t);
-extern NCURSES_EXPORT(string_desc *) _nc_str_copy (string_desc *, string_desc *);
+extern NCURSES_EXPORT(string_desc *) _nc_str_copy (string_desc *, const string_desc *);
extern NCURSES_EXPORT(bool) _nc_safe_strcat (string_desc *, const char *);
extern NCURSES_EXPORT(bool) _nc_safe_strcpy (string_desc *, const char *);
extern NCURSES_EXPORT(int) _nc_setup_tinfo(const char *, TERMTYPE2 *);
extern NCURSES_EXPORT(int) _nc_setupscreen (int, int, FILE *, int, int);
extern NCURSES_EXPORT(int) _nc_timed_wait (SCREEN *, int, int, int * EVENTLIST_2nd(_nc_eventlist *));
-extern NCURSES_EXPORT(int) _nc_trans_string (char *, char *);
+extern NCURSES_EXPORT(int) _nc_trans_string (char *, const char *);
extern NCURSES_EXPORT(void) _nc_init_termtype (TERMTYPE2 *const);
extern NCURSES_EXPORT(void) _nc_do_color (int, int, int, NCURSES_OUTC);
extern NCURSES_EXPORT(void) _nc_flush (void);
#define _nc_fallback2(tp) _nc_fallback(tp)
#endif
-NCURSES_EXPORT(void) _nc_copy_termtype(TERMTYPE *, const TERMTYPE *);
+extern NCURSES_EXPORT(void) _nc_copy_termtype(TERMTYPE *, const TERMTYPE *);
#if NCURSES_EXT_NUMBERS
extern NCURSES_EXPORT(void) _nc_copy_termtype2 (TERMTYPE2 *, const TERMTYPE2 *);
extern NCURSES_EXPORT(void) _nc_db_iterator_leaks(void);
extern NCURSES_EXPORT(void) _nc_keyname_leaks(void);
extern NCURSES_EXPORT(void) _nc_names_leaks(void);
-extern NCURSES_EXPORT(void) _nc_tgetent_leak(TERMINAL *);
+extern NCURSES_EXPORT(void) _nc_tgetent_leak(const TERMINAL *);
extern NCURSES_EXPORT(void) _nc_tgetent_leaks(void);
#endif
#if defined(_NC_WINDOWS) || defined(_NC_MINGW)
/* see wcwidth.c */
-NCURSES_EXPORT(int) mk_wcwidth(wchar_t);
+extern NCURSES_EXPORT(int) mk_wcwidth(wchar_t);
#define wcwidth(ucs) _nc_wcwidth(ucs)
#endif
#endif
#ifdef EXP_XTERM_1005
-NCURSES_EXPORT(int) _nc_conv_to_utf8(unsigned char *, unsigned, unsigned);
-NCURSES_EXPORT(int) _nc_conv_to_utf32(unsigned *, const char *, unsigned);
+extern NCURSES_EXPORT(int) _nc_conv_to_utf8(unsigned char *, unsigned, unsigned);
+extern NCURSES_EXPORT(int) _nc_conv_to_utf32(unsigned *, const char *, unsigned);
#endif
#ifdef __cplusplus