-$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.250 $ $NHDT-Date: 1549584261 2019/02/08 00:04:21 $
+$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.251 $ $NHDT-Date: 1549586901 2019/02/08 00:48:21 $
This fixes36.2 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.1 in April 2018. Please note, however,
X11: rollback disabling of keystroke input for PICK_NONE menus (for scrolling)
curses: catch up with tty to not put dolook/whatis autodescribe feedback into
^P message recall (multi-digit count feedback was already handled)
+curses: if the interface code ran out of memory, it would crash rather than
+ attempt a controlled panic (which is fairly likely crash anyway if
+ done when there's no memory available)
Platform- and/or Interface-Specific Fixes or Features
return;
}
- new_menu = malloc(sizeof (nhmenu));
+ new_menu = (nhmenu *) alloc((signed) sizeof (nhmenu));
new_menu->wid = wid;
new_menu->prompt = NULL;
new_menu->entries = NULL;
new_str = curses_copy_of(str);
curses_rtrim((char *) new_str);
- new_item = malloc(sizeof (nhmenu_item));
+ new_item = (nhmenu_item *) alloc((unsigned) sizeof (nhmenu_item));
new_item->wid = wid;
new_item->glyph = glyph;
new_item->identifier = *identifier;
curses_destroy_win(win);
if (num_chosen > 0) {
- selected = (MENU_ITEM_P *) malloc(num_chosen * sizeof (MENU_ITEM_P));
+ selected = (MENU_ITEM_P *) alloc((unsigned)
+ (num_chosen * sizeof (MENU_ITEM_P)));
count = 0;
menu_item_ptr = current_menu->entries;
wid = curses_get_wid(NHW_MENU);
curses_create_nhmenu(wid);
- identifier = malloc(sizeof (anything));
+ identifier = (anything *) alloc((unsigned) sizeof (anything));
identifier->a_void = NULL;
for (count = 0; count < num_messages; count++) {
maxy = height - 1 + border_space;
maxx = width - 1 + border_space;
- tmpbuf = (char *)malloc(strlen(prompt) + buffer + 2);
+ tmpbuf = (char *) alloc((unsigned) ((int) strlen(prompt) + buffer + 2));
maxlines = buffer / width * 2;
strcpy(tmpbuf, prompt);
strcat(tmpbuf, " ");
nlines = curses_num_lines(tmpbuf,width);
maxlines += nlines * 2;
- linestarts = (char **)malloc(sizeof(char*) * maxlines);
+ linestarts = (char **) alloc((unsigned) (sizeof (char *) * maxlines));
p_answer = tmpbuf + strlen(tmpbuf);
linestarts[0] = tmpbuf;
mesg_add_line(char *mline)
{
nhprev_mesg *tmp_mesg = NULL;
- nhprev_mesg *current_mesg = malloc(sizeof (nhprev_mesg));
+ nhprev_mesg *current_mesg = (nhprev_mesg *) alloc((unsigned)
+ (sizeof (nhprev_mesg)));
current_mesg->str = curses_copy_of(mline);
current_mesg->turn = moves;
{
if (!s)
s = "";
- return strcpy((char *) alloc((unsigned) (strlen(s) + 1)), s);
+ return dupstr(s);
}
/* Determine the number of lines needed for a string for a dialog window
-of the given width */
+ of the given width */
int
curses_num_lines(const char *str, int width)
wid = curses_get_wid(NHW_MENU);
curses_create_nhmenu(wid);
- identifier = malloc(sizeof (anything));
+ identifier = (anything *) alloc(sizeof (anything));
identifier->a_void = NULL;
while (dlb_fgets(buf, BUFSZ, fp) != NULL) {
height += 2;
if ((width > term_cols) || (height > term_rows)) {
- impossible("curses_create_window: Terminal too small for dialog window");
+ impossible(
+ "curses_create_window: Terminal too small for dialog window");
width = term_cols;
height = term_rows;
}
curses_get_nhwin(winid wid)
{
if (!is_main_window(wid)) {
- impossible("curses_get_nhwin: wid %d out of range. Not a main window.", wid);
+ impossible("curses_get_nhwin: wid %d out of range. Not a main window.",
+ wid);
return NULL;
}
int real_height = height;
if (!is_main_window(wid)) {
- impossible("curses_add_nhwin: wid %d out of range. Not a main window.", wid);
+ impossible("curses_add_nhwin: wid %d out of range. Not a main window.",
+ wid);
return;
}
nethack_wid *new_wid;
nethack_wid *widptr = nhwids;
- new_wid = malloc(sizeof (nethack_wid));
+ new_wid = (nethack_wid *) alloc((unsigned) sizeof (nethack_wid));
new_wid->nhwid = wid;
new_wid->next_wid = NULL;
}
if (!is_main_window(wid)) {
- impossible("curses_del_nhwin: wid %d out of range. Not a main window.", wid);
+ impossible("curses_del_nhwin: wid %d out of range. Not a main window.",
+ wid);
return;
}
curses_get_window_xy(winid wid, int *x, int *y)
{
if (!is_main_window(wid)) {
- impossible("curses_get_window_xy: wid %d out of range. Not a main window.", wid);
+ impossible(
+ "curses_get_window_xy: wid %d out of range. Not a main window.",
+ wid);
*x = 0;
*y = 0;
return;
curses_get_window_orientation(winid wid)
{
if (!is_main_window(wid)) {
- impossible
- ("curses_get_window_orientation: wid %d out of range. Not a main window.", wid);
+ impossible(
+ "curses_get_window_orientation: wid %d out of range. Not a main window.",
+ wid);
return CENTER;
}
/* Output a line of text to specified NetHack window with given coordinates
-and text attributes */
+ and text attributes */
void
curses_puts(winid wid, int attr, const char *text)
if (curses_is_menu(wid) || curses_is_text(wid)) {
if (!curses_menu_exists(wid)) {
- impossible("curses_puts: Attempted write to nonexistant window %d!", wid);
+ impossible(
+ "curses_puts: Attempted write to nonexistant window %d!",
+ wid);
return;
}
- identifier = malloc(sizeof (anything));
+ identifier = (anything *) alloc((unsigned) sizeof (anything));
identifier->a_void = NULL;
curses_add_nhmenu_item(wid, NO_GLYPH, identifier, 0, 0, attr, text,
FALSE);