fix cmdline-level printf wrapper for Windows

It was broken in a way that made gracket-text crash
 Merge to v5.0
This commit is contained in:
Matthew Flatt 2010-05-27 16:47:34 -06:00
parent 91ecad670c
commit bb4b04082a
4 changed files with 13 additions and 5 deletions

View File

@ -2292,6 +2292,7 @@ static void MrEdSchemeMessages(char *msg, ...)
waiting_sema = CreateSemaphore(NULL, 0, 1, NULL); waiting_sema = CreateSemaphore(NULL, 0, 1, NULL);
SetConsoleCtrlHandler(ConsoleHandler, TRUE); SetConsoleCtrlHandler(ConsoleHandler, TRUE);
{ {
HMODULE hm; HMODULE hm;
gcw_proc gcw; gcw_proc gcw;
@ -2336,10 +2337,14 @@ static void MrEdSchemeMessages(char *msg, ...)
WriteConsole(console_out, s XFORM_OK_PLUS d, l, &wrote, NULL); WriteConsole(console_out, s XFORM_OK_PLUS d, l, &wrote, NULL);
} else { } else {
long sz, wrt;
char *buffer; char *buffer;
DWORD wrote; DWORD wrote;
buffer = (char *)malloc(5 * strlen(msg)); /* FIXME: multiplying by 5 and adding 80 works for
vsprintf(buffer, msg, args); all the cases where printf mode is currently used
for the function, but it's completely a hack. */
buffer = (char *)malloc((5 * strlen(msg)) + 80);
wrt = vsprintf(buffer, msg, args);
WriteConsole(console_out, buffer, strlen(buffer), &wrote, NULL); WriteConsole(console_out, buffer, strlen(buffer), &wrote, NULL);
free(buffer); free(buffer);
} }

View File

@ -113,10 +113,12 @@ extern "C" Scheme_Object *scheme_initialize(Scheme_Env *env);
#define GET_INIT_FILENAME get_init_filename #define GET_INIT_FILENAME get_init_filename
#if REDIRECT_STDIO || WINDOW_STDIO || WCONSOLE_STDIO #if REDIRECT_STDIO || WINDOW_STDIO || WCONSOLE_STDIO
# define PRINTF mred_console_printf # define PRINTF mred_console_printf
# define CMDLINE_FFLUSH(x) /* nothing */
static void (*mred_console_printf)(char *str, ...); static void (*mred_console_printf)(char *str, ...);
# define NEED_MRED_CONSOLE_PRINTF # define NEED_MRED_CONSOLE_PRINTF
#else #else
# define PRINTF printf # define PRINTF printf
# define CMDLINE_FFLUSH fflush
#endif #endif
#define PROGRAM "GRacket" #define PROGRAM "GRacket"
#define PROGRAM_LC "gracket" #define PROGRAM_LC "gracket"

View File

@ -1078,7 +1078,7 @@ static int run_from_cmd_line(int argc, char *_argv[],
#endif #endif
#if defined(USE_FD_PORTS) || defined(WINDOWS_FILE_HANDLES) #if defined(USE_FD_PORTS) || defined(WINDOWS_FILE_HANDLES)
fflush(stdout); CMDLINE_FFLUSH(stdout);
#endif #endif
} }
#endif /* DONT_PARSE_COMMAND_LINE */ #endif /* DONT_PARSE_COMMAND_LINE */
@ -1286,7 +1286,7 @@ static int run_from_cmd_line(int argc, char *_argv[],
); );
PRINTF(prog, BANNER); PRINTF(prog, BANNER);
#if defined(WINDOWS_FILE_HANDLES) #if defined(WINDOWS_FILE_HANDLES)
fflush(stdout); CMDLINE_FFLUSH(stdout);
#endif #endif
return 0; return 0;
bad_switch: bad_switch:
@ -1298,7 +1298,7 @@ static int run_from_cmd_line(int argc, char *_argv[],
show_need_help: show_need_help:
PRINTF("Use the --help or -h flag for help.\n"); PRINTF("Use the --help or -h flag for help.\n");
#if defined(DETECT_WIN32_CONSOLE_STDIN) #if defined(DETECT_WIN32_CONSOLE_STDIN)
fflush(stdout); CMDLINE_FFLUSH(stdout);
#endif #endif
return 1; return 1;
#endif #endif

View File

@ -146,6 +146,7 @@ extern Scheme_Object *scheme_initialize(Scheme_Env *env);
#endif #endif
#define GET_INIT_FILENAME get_init_filename #define GET_INIT_FILENAME get_init_filename
#define PRINTF printf #define PRINTF printf
#define CMDLINE_FFLUSH fflush
#define PROGRAM "Racket" #define PROGRAM "Racket"
#define PROGRAM_LC "racket" #define PROGRAM_LC "racket"
#define INITIAL_BIN_TYPE "zi" #define INITIAL_BIN_TYPE "zi"