Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.

Commit 4cb2a76

Browse files
[[ RefactorServer ]] Fixes CGI execution on Windows
1 parent 20da5d8 commit 4cb2a76

3 files changed

Lines changed: 22 additions & 7 deletions

File tree

engine/src/dskw32.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1657,7 +1657,7 @@ struct MCStdioFileHandle: public MCSystemFileHandle
16571657
if (!SetEndOfFile(m_handle))
16581658
return false;
16591659

1660-
return false;
1660+
return true;
16611661
}
16621662

16631663
virtual bool Sync(void)
@@ -1696,7 +1696,11 @@ struct MCStdioFileHandle: public MCSystemFileHandle
16961696
return IO_ERROR;
16971697
return IO_NORMAL;
16981698
#endif /* MCS_flush_dsk_w32 */ //flush output buffer
1699-
if (FlushFileBuffers(m_handle) != NO_ERROR)
1699+
// SN-2014-06-16
1700+
// It seems that FlushFileBuffers can return a non-zero value
1701+
// with no error declared...
1702+
if (FlushFileBuffers(m_handle) != NO_ERROR
1703+
&& GetLastError() != NO_ERROR)
17001704
return false;
17011705

17021706
return true;

engine/src/srvsession.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,7 @@ bool MCSessionCreateSession(MCSessionIndexRef p_index, MCStringRef p_session_id,
386386

387387
MCAutoStringRef t_remote_addr_string;
388388
char *t_remote_addr;
389+
t_remote_addr = NULL;
389390

390391
if (MCS_getenv(MCSTR("REMOTE_ADDR"), &t_remote_addr_string))
391392
MCCStringClone(MCStringGetCString(*t_remote_addr_string), t_remote_addr);
@@ -685,6 +686,7 @@ bool MCSessionGenerateID(MCStringRef &r_id)
685686

686687
MCAutoStringRef t_remote_addr_string;
687688
char *t_remote_addr;
689+
t_remote_addr = NULL;
688690

689691
if (MCS_getenv(MCSTR("REMOTE_ADDR"), &t_remote_addr_string))
690692
MCCStringClone(MCStringGetCString(*t_remote_addr_string), t_remote_addr);

engine/src/srvwindows.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,7 +1231,18 @@ bool MCS_isnan(double v)
12311231

12321232
bool MCS_get_temporary_folder(MCStringRef &r_temp_folder)
12331233
{
1234-
return MCsystem -> GetTemporaryFileName(r_temp_folder);
1234+
// MCS_get_temporay_folder is supposed to return an existing folder
1235+
// which is not the case with MCsystem -> GetTemporaryFilename
1236+
// return MCsystem -> GetTemporaryFilename(r_temp_folder);
1237+
WCHAR t_tmpdir[MAX_PATH];
1238+
int32_t t_tmpdir_len = 0;
1239+
t_tmpdir_len = GetTempPathW(MAX_PATH, t_tmpdir);
1240+
1241+
MCAutoStringRef t_native_tmp, t_short_tmp;
1242+
1243+
return (MCStringCreateWithWString(t_tmpdir, &t_native_tmp)
1244+
&& MCsystem->PathFromNative(*t_native_tmp, &t_short_tmp)
1245+
&& MCS_longfilepath(*t_short_tmp, r_temp_folder));
12351246
}
12361247

12371248
bool MCS_create_temporary_file(MCStringRef p_path_string, MCStringRef p_prefix_string, IO_handle &r_file, MCStringRef &r_name_string)
@@ -1301,10 +1312,8 @@ bool MCS_create_temporary_file(MCStringRef p_path_string, MCStringRef p_prefix_s
13011312

13021313
bool MCSystemLockFile(MCSystemFileHandle *p_file, bool p_shared, bool p_wait)
13031314
{
1304-
// FRAGILE? In case p_file is a MCMemoryMappedFile, getFilePointer returns a char*...
1305-
int t_fd = fileno((FILE*)p_file->GetFilePointer());
1306-
1307-
HANDLE t_fhandle = (HANDLE)_get_osfhandle(t_fd);
1315+
HANDLE t_fhandle;
1316+
t_fhandle = p_file->GetFilePointer();
13081317

13091318
bool t_success = true;
13101319

0 commit comments

Comments
 (0)