view srogue/bsdtty.c @ 313:2f75940cc544

Advanced Rogue 7: fix a string literal overwrite. pick_spell() attempted to capitalize type by overwriting the first character, changing it back later. All calls of pick_spell passed a string literal as type, and string literals should be considered immutable. This has been fixed by using a separate variable for the capitalized first character. XRogue already has a similar fix. Reported by John Harris of @Play.
author John "Elwin" Edwards
date Tue, 19 Oct 2021 20:39:00 -0400
parents 2128c7dc8a40
children
line wrap: on
line source

/*
 * Super-Rogue
 * Copyright (C) 1984 Robert D. Kindelberger
 * All rights reserved.
 *
 * See the file LICENSE.TXT for full copyright and licensing information.
 */

#include "rogue.h"

extern	bool NONL;

raw()
{
/*
	VERSION 5.0
	_tty.c_lflag &= ~ICANON;
	_tty.c_cc[VMIN] = 1;
	_tty.c_cc[VTIME] = 255;
	_tty.c_oflag &= ~OPOST;
*/
	_rawmode = TRUE;
	_tty.sg_flags |= CBREAK;
	ioctl(_tty_ch, TIOCSETN, &_tty);
}


noraw()
{
/*
	VERSION 5.0
	_tty.c_lflag |= ICANON;
	_tty.c_cc[VMIN] = _res_flg.c_cc[VMIN];
	_tty.c_cc[VTIME] = _res_flg.c_cc[VTIME];
	_tty.c_oflag |= OPOST;
*/
	_rawmode = FALSE;
	_tty.sg_flags &= ~CBREAK;
	ioctl(_tty_ch, TIOCSETN, &_tty);
}


crmode()
{
/*
	VERSION 5.0
	_tty.c_lflag &= ~ICANON;
	_tty.c_oflag |= ONLCR;
	_tty.c_cc[VMIN] = 1;
	_tty.c_cc[VTIME]=255;
*/
	_rawmode = TRUE;
	_tty.sg_flags |= (CBREAK | CRMOD);
	ioctl(_tty_ch, TIOCSETN, &_tty);
}


nocrmode()
{
/*
	_tty.c_lflag |= ICANON;
	_tty.c_cc[VMIN]=_res_flg.c_cc[VMIN];
	_tty.c_cc[VTIME]=_res_flg.c_cc[VTIME];
*/
	_rawmode = FALSE;
	_tty.sg_flags &= ~CBREAK;
	ioctl(_tty_ch, TIOCSETN, &_tty);
}


echo()
{
	_tty.sg_flags |= ECHO;
	_echoit=TRUE;
	ioctl(_tty_ch, TIOCSETN, &_tty);
}

noecho()
{
	_tty.sg_flags &= ~ECHO;
	_echoit = FALSE;
	ioctl(_tty_ch, TIOCSETN, &_tty);
}


nl()
{
/*
	VERSION 5.0
	_tty.c_iflag |= ICRNL;
	_tty.c_oflag |= ONLCR;
*/
	_tty.sg_flags |= CRMOD;
	NONL = TRUE;
	ioctl(_tty_ch, TIOCSETN, &_tty);
}


nonl()
{
/*
	VERSION 5.0
	_tty.c_iflag &= ~ICRNL;
	_tty.c_oflag &= ~ONLCR;
*/
	_tty.sg_flags &= ~CRMOD;
	NONL = FALSE;
	ioctl(_tty_ch, TIOCSETN, &_tty);
}

savetty()
{
	ioctl(_tty_ch, TIOCGETP, &_tty);
	_res_flg = _tty;
}

resetty()
{
	_tty = _res_flg;
	ioctl(_tty_ch, TIOCSETN, &_tty);
}