10e3d5408SPeter Wemm /****************************************************************************
2*21817992SBaptiste Daroussin * Copyright 2019-2020,2023 Thomas E. Dickey *
3e1865124SBaptiste Daroussin * Copyright 1998-2012,2016 Free Software Foundation, Inc. *
40e3d5408SPeter Wemm * *
50e3d5408SPeter Wemm * Permission is hereby granted, free of charge, to any person obtaining a *
60e3d5408SPeter Wemm * copy of this software and associated documentation files (the *
70e3d5408SPeter Wemm * "Software"), to deal in the Software without restriction, including *
80e3d5408SPeter Wemm * without limitation the rights to use, copy, modify, merge, publish, *
90e3d5408SPeter Wemm * distribute, distribute with modifications, sublicense, and/or sell *
100e3d5408SPeter Wemm * copies of the Software, and to permit persons to whom the Software is *
110e3d5408SPeter Wemm * furnished to do so, subject to the following conditions: *
120e3d5408SPeter Wemm * *
130e3d5408SPeter Wemm * The above copyright notice and this permission notice shall be included *
140e3d5408SPeter Wemm * in all copies or substantial portions of the Software. *
150e3d5408SPeter Wemm * *
160e3d5408SPeter Wemm * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
170e3d5408SPeter Wemm * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
180e3d5408SPeter Wemm * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
190e3d5408SPeter Wemm * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
200e3d5408SPeter Wemm * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
210e3d5408SPeter Wemm * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
220e3d5408SPeter Wemm * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
230e3d5408SPeter Wemm * *
240e3d5408SPeter Wemm * Except as contained in this notice, the name(s) of the above copyright *
250e3d5408SPeter Wemm * holders shall not be used in advertising or otherwise to promote the *
260e3d5408SPeter Wemm * sale, use or other dealings in this Software without prior written *
270e3d5408SPeter Wemm * authorization. *
280e3d5408SPeter Wemm ****************************************************************************/
290e3d5408SPeter Wemm
300e3d5408SPeter Wemm /****************************************************************************
310e3d5408SPeter Wemm * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
320e3d5408SPeter Wemm * and: Eric S. Raymond <esr@snark.thyrsus.com> *
334a1a9510SRong-En Fan * and: Thomas E. Dickey 1996-on *
340e3d5408SPeter Wemm ****************************************************************************/
350e3d5408SPeter Wemm
360e3d5408SPeter Wemm /*
370e3d5408SPeter Wemm * comp_error.c -- Error message routines
380e3d5408SPeter Wemm *
390e3d5408SPeter Wemm */
400e3d5408SPeter Wemm
410e3d5408SPeter Wemm #include <curses.priv.h>
420e3d5408SPeter Wemm
430e3d5408SPeter Wemm #include <tic.h>
440e3d5408SPeter Wemm
45*21817992SBaptiste Daroussin MODULE_ID("$Id: comp_error.c,v 1.44 2023/06/15 20:27:02 tom Exp $")
460e3d5408SPeter Wemm
477a69bbfbSPeter Wemm NCURSES_EXPORT_VAR(bool) _nc_suppress_warnings = FALSE;
4839f2269fSPeter Wemm NCURSES_EXPORT_VAR(int) _nc_curr_line = 0; /* current line # in input */
4939f2269fSPeter Wemm NCURSES_EXPORT_VAR(int) _nc_curr_col = 0; /* current column # in input */
500e3d5408SPeter Wemm
515ca44d1cSRong-En Fan #define SourceName _nc_globals.comp_sourcename
525ca44d1cSRong-En Fan #define TermType _nc_globals.comp_termtype
530e3d5408SPeter Wemm
544a1a9510SRong-En Fan NCURSES_EXPORT(const char *)
_nc_get_source(void)554a1a9510SRong-En Fan _nc_get_source(void)
564a1a9510SRong-En Fan {
575ca44d1cSRong-En Fan return SourceName;
584a1a9510SRong-En Fan }
594a1a9510SRong-En Fan
607a69bbfbSPeter Wemm NCURSES_EXPORT(void)
_nc_set_source(const char * const name)617a69bbfbSPeter Wemm _nc_set_source(const char *const name)
620e3d5408SPeter Wemm {
63*21817992SBaptiste Daroussin if (name == NULL) {
64*21817992SBaptiste Daroussin free(SourceName);
65*21817992SBaptiste Daroussin SourceName = NULL;
66*21817992SBaptiste Daroussin } else if (SourceName == NULL) {
6773f0a83dSXin LI SourceName = strdup(name);
68*21817992SBaptiste Daroussin } else if (strcmp(name, SourceName)) {
69*21817992SBaptiste Daroussin free(SourceName);
70*21817992SBaptiste Daroussin SourceName = strdup(name);
71*21817992SBaptiste Daroussin }
720e3d5408SPeter Wemm }
730e3d5408SPeter Wemm
747a69bbfbSPeter Wemm NCURSES_EXPORT(void)
_nc_set_type(const char * const name)757a69bbfbSPeter Wemm _nc_set_type(const char *const name)
760e3d5408SPeter Wemm {
77aae38d10SBaptiste Daroussin #define MY_SIZE (size_t) MAX_NAME_SIZE
785ca44d1cSRong-En Fan if (TermType == 0)
79aae38d10SBaptiste Daroussin TermType = typeMalloc(char, MY_SIZE + 1);
805ca44d1cSRong-En Fan if (TermType != 0) {
815ca44d1cSRong-En Fan TermType[0] = '\0';
82aae38d10SBaptiste Daroussin if (name) {
83aae38d10SBaptiste Daroussin _nc_STRNCAT(TermType, name, MY_SIZE, MY_SIZE);
84aae38d10SBaptiste Daroussin }
850e3d5408SPeter Wemm }
864a1a9510SRong-En Fan }
870e3d5408SPeter Wemm
887a69bbfbSPeter Wemm NCURSES_EXPORT(void)
_nc_get_type(char * name)897a69bbfbSPeter Wemm _nc_get_type(char *name)
900e3d5408SPeter Wemm {
914a1a9510SRong-En Fan #if NO_LEAKS
925ca44d1cSRong-En Fan if (name == 0 && TermType != 0) {
935ca44d1cSRong-En Fan FreeAndNull(TermType);
944a1a9510SRong-En Fan return;
954a1a9510SRong-En Fan }
964a1a9510SRong-En Fan #endif
974a1a9510SRong-En Fan if (name != 0)
9873f0a83dSXin LI _nc_STRCPY(name, TermType != 0 ? TermType : "", MAX_NAME_SIZE);
990e3d5408SPeter Wemm }
1000e3d5408SPeter Wemm
1014a1a9510SRong-En Fan static NCURSES_INLINE void
where_is_problem(void)1027a69bbfbSPeter Wemm where_is_problem(void)
1030e3d5408SPeter Wemm {
1045ca44d1cSRong-En Fan fprintf(stderr, "\"%s\"", SourceName ? SourceName : "?");
105*21817992SBaptiste Daroussin if (_nc_curr_line > 0)
1060e3d5408SPeter Wemm fprintf(stderr, ", line %d", _nc_curr_line);
107*21817992SBaptiste Daroussin if (_nc_curr_col > 0)
1080e3d5408SPeter Wemm fprintf(stderr, ", col %d", _nc_curr_col);
1095ca44d1cSRong-En Fan if (TermType != 0 && TermType[0] != '\0')
1105ca44d1cSRong-En Fan fprintf(stderr, ", terminal '%s'", TermType);
1110e3d5408SPeter Wemm fputc(':', stderr);
1120e3d5408SPeter Wemm fputc(' ', stderr);
1130e3d5408SPeter Wemm }
1140e3d5408SPeter Wemm
1157a69bbfbSPeter Wemm NCURSES_EXPORT(void)
_nc_warning(const char * const fmt,...)1167a69bbfbSPeter Wemm _nc_warning(const char *const fmt, ...)
1170e3d5408SPeter Wemm {
1180e3d5408SPeter Wemm va_list argp;
1190e3d5408SPeter Wemm
1200e3d5408SPeter Wemm if (_nc_suppress_warnings)
1210e3d5408SPeter Wemm return;
1220e3d5408SPeter Wemm
1230e3d5408SPeter Wemm where_is_problem();
1240e3d5408SPeter Wemm va_start(argp, fmt);
1250e3d5408SPeter Wemm vfprintf(stderr, fmt, argp);
1260e3d5408SPeter Wemm fprintf(stderr, "\n");
1270e3d5408SPeter Wemm va_end(argp);
1280e3d5408SPeter Wemm }
1290e3d5408SPeter Wemm
1307a69bbfbSPeter Wemm NCURSES_EXPORT(void)
_nc_err_abort(const char * const fmt,...)1317a69bbfbSPeter Wemm _nc_err_abort(const char *const fmt, ...)
1320e3d5408SPeter Wemm {
1330e3d5408SPeter Wemm va_list argp;
1340e3d5408SPeter Wemm
1350e3d5408SPeter Wemm where_is_problem();
1360e3d5408SPeter Wemm va_start(argp, fmt);
1370e3d5408SPeter Wemm vfprintf(stderr, fmt, argp);
1380e3d5408SPeter Wemm fprintf(stderr, "\n");
1390e3d5408SPeter Wemm va_end(argp);
1400e3d5408SPeter Wemm exit(EXIT_FAILURE);
1410e3d5408SPeter Wemm }
1420e3d5408SPeter Wemm
1437a69bbfbSPeter Wemm NCURSES_EXPORT(void)
_nc_syserr_abort(const char * const fmt,...)1447a69bbfbSPeter Wemm _nc_syserr_abort(const char *const fmt, ...)
1450e3d5408SPeter Wemm {
1460e3d5408SPeter Wemm va_list argp;
1470e3d5408SPeter Wemm
1480e3d5408SPeter Wemm where_is_problem();
1490e3d5408SPeter Wemm va_start(argp, fmt);
1500e3d5408SPeter Wemm vfprintf(stderr, fmt, argp);
1510e3d5408SPeter Wemm fprintf(stderr, "\n");
1520e3d5408SPeter Wemm va_end(argp);
1530e3d5408SPeter Wemm
154aae38d10SBaptiste Daroussin #if defined(TRACE) || !defined(NDEBUG)
1550e3d5408SPeter Wemm /* If we're debugging, try to show where the problem occurred - this
1560e3d5408SPeter Wemm * will dump core.
1570e3d5408SPeter Wemm */
158*21817992SBaptiste Daroussin if (_nc_env_access())
1590e3d5408SPeter Wemm abort();
160aae38d10SBaptiste Daroussin #endif
1610e3d5408SPeter Wemm /* Dumping core in production code is not a good idea.
1620e3d5408SPeter Wemm */
1630e3d5408SPeter Wemm exit(EXIT_FAILURE);
1640e3d5408SPeter Wemm }
16573f0a83dSXin LI
16673f0a83dSXin LI #if NO_LEAKS
16773f0a83dSXin LI NCURSES_EXPORT(void)
_nc_comp_error_leaks(void)16873f0a83dSXin LI _nc_comp_error_leaks(void)
16973f0a83dSXin LI {
17073f0a83dSXin LI FreeAndNull(SourceName);
17173f0a83dSXin LI FreeAndNull(TermType);
17273f0a83dSXin LI }
17373f0a83dSXin LI #endif
174