From 70ec3928666353b69efae1bdc831d704fa505e72 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 15 Apr 2019 18:05:52 +0300 Subject: [PATCH] Fix the MSDOS build when running under CWSDPMI * src/msdos.c (the_only_tty_output): Define. * src/msdos.h (the_only_tty_output): Declare. * src/frame.c (make_terminal_frame) [MSDOS]: * src/dispnew.c (init_display) [MSDOS]: Set up f->output_data.tty pointer using the_only_tty_output, before dereferencing the pointer. This prevents crashes with DPMI servers that provide NULL pointer protection. --- src/dispnew.c | 1 + src/frame.c | 1 + src/msdos.c | 3 +++ src/msdos.h | 1 + 4 files changed, 6 insertions(+) diff --git a/src/dispnew.c b/src/dispnew.c index 03fac54e05b..15a58cc2f57 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -6117,6 +6117,7 @@ init_display (void) t->reference_count++; #ifdef MSDOS + f->output_data.tty = &the_only_tty_output; f->output_data.tty->display_info = &the_only_display_info; #else if (f->output_method == output_termcap) diff --git a/src/frame.c b/src/frame.c index 4ed140d7d08..08925308f9c 100644 --- a/src/frame.c +++ b/src/frame.c @@ -1117,6 +1117,7 @@ make_terminal_frame (struct terminal *terminal) f->terminal = terminal; f->terminal->reference_count++; #ifdef MSDOS + f->output_data.tty = &the_only_tty_output; f->output_data.tty->display_info = &the_only_display_info; if (!inhibit_window_system && (!FRAMEP (selected_frame) || !FRAME_LIVE_P (XFRAME (selected_frame)) diff --git a/src/msdos.c b/src/msdos.c index 3645dc8bb30..4367da4714d 100644 --- a/src/msdos.c +++ b/src/msdos.c @@ -420,6 +420,9 @@ static unsigned short outside_cursor; /* The only display since MS-DOS does not support multiple ones. */ struct tty_display_info the_only_display_info; +/* The only tty_output, since MS-DOS supports only 1 display. */ +struct tty_output the_only_tty_output; + /* Support for DOS/V (allows Japanese characters to be displayed on standard, non-Japanese, ATs). Only supported for DJGPP v2 and later. */ diff --git a/src/msdos.h b/src/msdos.h index ff756f8f634..0d15df7a331 100644 --- a/src/msdos.h +++ b/src/msdos.h @@ -93,6 +93,7 @@ typedef int XRectangle; typedef struct tty_display_info Display_Info; extern struct tty_display_info the_only_display_info; +extern struct tty_output the_only_tty_output; #define FRAME_X_DISPLAY(f) ((Display *) 0) #define FRAME_FONT(f) ((f)->output_data.tty->font) -- 2.39.5