X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fsave.c;h=3795d2eff1fc3ca3d5401f1e98c0721776bd8ad0;hb=f0cb0cf9c0fe1b6fce5d10dbd34a0b7b249c4ae8;hp=f4da52e9bf8086040d5dc9cd816d295fcbac8dfc;hpb=5311c55dde4deee4b21fb09f9d7b97572083a7d9;p=sbcl.git diff --git a/src/runtime/save.c b/src/runtime/save.c index f4da52e..3795d2e 100644 --- a/src/runtime/save.c +++ b/src/runtime/save.c @@ -435,11 +435,35 @@ lose: } boolean -save_runtime_to_filehandle(FILE *output, void *runtime, size_t runtime_size) +save_runtime_to_filehandle(FILE *output, void *runtime, size_t runtime_size, + int application_type) { size_t padding; void *padbytes; +#ifdef LISP_FEATURE_WIN32 + { + PIMAGE_DOS_HEADER dos_header = (PIMAGE_DOS_HEADER)runtime; + PIMAGE_NT_HEADERS nt_header = (PIMAGE_NT_HEADERS)((char *)dos_header + + dos_header->e_lfanew); + + int sub_system; + switch (application_type) { + case 0: + sub_system = IMAGE_SUBSYSTEM_WINDOWS_CUI; + break; + case 1: + sub_system = IMAGE_SUBSYSTEM_WINDOWS_GUI; + break; + default: + fprintf(stderr, "Invalid application type %d\n", application_type); + return 0; + } + + nt_header->OptionalHeader.Subsystem = sub_system; + } +#endif + if (runtime_size != fwrite(runtime, 1, runtime_size, output)) { perror("Error saving runtime"); return 0; @@ -498,7 +522,8 @@ prepare_to_save(char *filename, boolean prepend_runtime, void **runtime_bytes, boolean save(char *filename, lispobj init_function, boolean prepend_runtime, - boolean save_runtime_options, boolean compressed, int compression_level) + boolean save_runtime_options, boolean compressed, int compression_level, + int application_type) { FILE *file; void *runtime_bytes = NULL; @@ -509,7 +534,7 @@ save(char *filename, lispobj init_function, boolean prepend_runtime, return 1; if (prepend_runtime) - save_runtime_to_filehandle(file, runtime_bytes, runtime_size); + save_runtime_to_filehandle(file, runtime_bytes, runtime_size, application_type); return save_to_filehandle(file, filename, init_function, prepend_runtime, save_runtime_options,