aboutsummaryrefslogtreecommitdiff
path: root/sys/isa/syscons.c
diff options
context:
space:
mode:
authorKazutaka YOKOTA <yokota@FreeBSD.org>1997-09-04 23:01:06 +0000
committerKazutaka YOKOTA <yokota@FreeBSD.org>1997-09-04 23:01:06 +0000
commit9d6218d0885ced0f3475c5f6b042087debc0166e (patch)
treec2ad1a4125e9118a633d44f1d4f665a60c36961c /sys/isa/syscons.c
parent326df44eadf3d10ed0857f998270fbf5bc6bb7ef (diff)
Add a new compile option SC_HISTORY_SIZE to specify the history buffer
size in terms of lines (instead of bytes). When changing video mode in ioctl SW_XXX commands, syscons checks scp->history_size and allocate a history buffer at least as large as the new screen size. (This was unnecessary before, because HISTORY_SIZE was as large as 100 lines and this is bigger than the maximum screen size: 60 lines). Similar adjustment is done in ioctl CONS_HISTORY command too. PR: kern/4169 Reviewed by: sos
Notes
Notes: svn path=/head/; revision=29121
Diffstat (limited to 'sys/isa/syscons.c')
-rw-r--r--sys/isa/syscons.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/sys/isa/syscons.c b/sys/isa/syscons.c
index 1dc654203599..25bf83153510 100644
--- a/sys/isa/syscons.c
+++ b/sys/isa/syscons.c
@@ -25,7 +25,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: syscons.c,v 1.229 1997/08/08 22:52:30 sos Exp $
+ * $Id: syscons.c,v 1.230 1997/08/09 19:24:03 sos Exp $
*/
#include "sc.h"
@@ -961,16 +961,11 @@ scioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
return EBUSY;
if (scp->history != NULL)
free(scp->history, M_DEVBUF);
- scp->history_size = *(int*)data;
- if (scp->history_size < scp->ysize)
- scp->history = NULL;
- else {
- scp->history_size *= scp->xsize;
- scp->history_head = scp->history_pos = scp->history =
- (u_short *)malloc(scp->history_size*sizeof(u_short),
- M_DEVBUF, M_WAITOK);
- bzero(scp->history_head, scp->history_size*sizeof(u_short));
- }
+ scp->history_size = max(scp->ysize, *(int *)data)*scp->xsize;
+ scp->history_head = scp->history_pos = scp->history =
+ (u_short *)malloc(scp->history_size*sizeof(u_short),
+ M_DEVBUF, M_WAITOK);
+ bzero(scp->history_head, scp->history_size*sizeof(u_short));
return 0;
}
else
@@ -1183,6 +1178,13 @@ scioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
free(cut_buffer, M_DEVBUF);
cut_buffer = (char *)malloc(scp->xsize*scp->ysize, M_DEVBUF, M_NOWAIT);
cut_buffer[0] = 0x00;
+ if (scp->history != NULL)
+ free(scp->history, M_DEVBUF);
+ scp->history_size = max(HISTORY_SIZE, scp->xsize*scp->ysize);
+ scp->history_head = scp->history_pos = scp->history = (u_short *)
+ malloc(scp->history_size*sizeof(u_short), M_DEVBUF, M_NOWAIT);
+ if (scp->history != NULL)
+ bzero(scp->history, scp->history_size*sizeof(u_short));
if (scp == cur_console)
set_mode(scp);
scp->status &= ~UNKNOWN_MODE;
@@ -2812,7 +2814,7 @@ init_scp(scr_stat *scp)
scp->proc = NULL;
scp->smode.mode = VT_AUTO;
scp->history_head = scp->history_pos = scp->history = NULL;
- scp->history_size = HISTORY_SIZE;
+ scp->history_size = max(HISTORY_SIZE, scp->xsize*scp->ysize);
}
static u_char