Skip to content

Commit 65510be

Browse files
committed
I have changed the signatures and the implementation of the methods. It compiles, but I get an exception in server.exe
1 parent b595342 commit 65510be

27 files changed

+464
-227
lines changed

engine/src/capsule.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,10 @@ bool MCCapsuleFillFromFile(MCCapsuleRef self, const char *p_path, uint32_t p_off
299299
t_stream = nil;
300300
if (t_success)
301301
{
302-
t_stream = MCS_open(p_path, IO_READ_MODE, True, False, 0);
302+
MCAutoStringRef io_read_mode_string, p_path_string;
303+
/* UNCHECKED */ MCStringCreateWithCString(IO_READ_MODE, &io_read_mode_string);
304+
/* UNCHECKED */ MCStringCreateWithCString(p_path, &p_path_string);
305+
t_stream = MCS_open(*p_path_string, *io_read_mode_string, True, False, 0);
303306
if (t_stream == nil)
304307
t_success = false;
305308
}

engine/src/customprinter.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2045,7 +2045,11 @@ Exec_stat MCCustomPrinterCreate(const char *p_destination, const char *p_filenam
20452045
t_module = nil;
20462046
#endif
20472047
if (t_module != nil)
2048-
s_revpdfprinter_create = (MCCustomPrinterCreateProc)MCS_resolvemodulesymbol(t_module, "MCCustomPrinterCreate");
2048+
{
2049+
MCAutoStringRef p_symbol;
2050+
/*UNCHECKED*/MCStringCreateWithCString("MCCustomPrinterCreate", &p_symbol);
2051+
s_revpdfprinter_create = (MCCustomPrinterCreateProc)MCS_resolvemodulesymbol(t_module, *p_symbol);
2052+
}
20492053
s_revpdfprinter_loaded = true;
20502054
}
20512055

engine/src/dispatch.cpp

Lines changed: 91 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -365,31 +365,46 @@ Boolean MCDispatch::openstartup(const char *sname,
365365
if (enginedir == nil)
366366
return False;
367367

368-
uint4 l = MCU_max((uint4)strlen(enginedir), (uint4)strlen(startdir)) + strlen(sname) + 11;
369-
char *fullpath = new char[l];
370-
sprintf(fullpath, "%s/%s", startdir, sname);
371-
if ((stream = MCS_open(fullpath, IO_READ_MODE, True, False, 0)) != NULL)
372-
{
373-
*outpath = fullpath;
374-
return True;
375-
}
376-
sprintf(fullpath, "%s/%s", enginedir, sname);
377-
if ((stream = MCS_open(fullpath, IO_READ_MODE, True, False, 0)) != NULL)
378-
{
379-
*outpath = fullpath;
380-
return True;
381-
}
382-
delete fullpath;
368+
MCAutoStringRef io_read_mode_string;
369+
/* UNCHECKED */ MCStringCreateWithCString(IO_READ_MODE, &io_read_mode_string);
370+
371+
uint4 l = MCU_max((uint4)strlen(enginedir), (uint4)strlen(startdir)) + strlen(sname) + 11;
372+
char *fullpath = new char[l];
373+
sprintf(fullpath, "%s/%s", startdir, sname);
374+
MCAutoStringRef fullpath_string;
375+
/* UNCHECKED */ MCStringCreateWithCString(fullpath, &fullpath_string);
376+
377+
if ((stream = MCS_open(*fullpath_string, &io_read_mode_string, True, False, 0)) != NULL)
378+
{
379+
*outpath = fullpath;
380+
return True;
381+
}
382+
sprintf(fullpath, "%s/%s", enginedir, sname);
383+
if ((stream = MCS_open(*fullpath_string, &io_read_mode_string, True, False, 0)) != NULL)
384+
{
385+
*outpath = fullpath;
386+
return True;
387+
}
388+
delete fullpath;
383389

384390
return False;
385391
}
386392

387393
Boolean MCDispatch::openenv(const char *sname, const char *env,
388394
char **outpath, IO_handle &stream, uint4 offset)
389395
{
390-
if ((env = MCS_getenv(env)) != NULL)
396+
397+
MCAutoStringRef p_env;
398+
MCAutoStringRef message;
399+
/* UNCHECKED */ MCStringCreateWithCString(env, &message);
400+
401+
if (MCS_getenv(*message, &p_env))
391402
{
403+
env = MCStringGetCString(*p_env);
392404
char *pathstring = strclone(env);
405+
MCAutoStringRef io_read_mode_string;
406+
MCAutoStringRef fullpath_string;
407+
/* UNCHECKED */ MCStringCreateWithCString(IO_READ_MODE, &io_read_mode_string);
393408
char *fullpath = new char[strlen(env) + strlen(sname) + 2];
394409
char *eptr = pathstring;
395410
while (eptr != NULL)
@@ -403,8 +418,8 @@ Boolean MCDispatch::openenv(const char *sname, const char *env,
403418
#else
404419
sprintf(fullpath, "%s/%s", path, sname);
405420
#endif
406-
407-
if ((stream = MCS_open(fullpath, IO_READ_MODE, True, False,
421+
/* UNCHECKED */ MCStringCreateWithCString(fullpath, &fullpath_string);
422+
if ((stream = MCS_open(*fullpath_string, *io_read_mode_string, True, False,
408423
offset)) != NULL)
409424
{
410425
delete pathstring;
@@ -711,10 +726,19 @@ IO_stat MCDispatch::loadfile(const char *inname, MCStack *&sptr)
711726
IO_handle stream;
712727
char *openpath = NULL;
713728
char *fname = strclone(inname);
714-
if ((stream = MCS_open(fname, IO_READ_MODE, True, False, 0)) != NULL)
729+
MCAutoStringRef fname_string;
730+
/* UNCHECKED */ MCStringCreateWithCString(fname, &fname_string);
731+
MCAutoStringRef io_read_mode_string;
732+
/* UNCHECKED */ MCStringCreateWithCString(IO_READ_MODE, &io_read_mode_string);
733+
if ((stream = MCS_open(*fname_string, *io_read_mode_string, True, False, 0)) != NULL)
715734
if (fname[0] != PATH_SEPARATOR && fname[1] != ':')
716735
{
717-
char *curpath = MCS_getcurdir();
736+
MCAutoStringRef p_curpath;
737+
MCS_getcurdir(&p_curpath);
738+
739+
char *curpath = nil;
740+
if (*p_curpath != nil)
741+
MCCStringClone(MCStringGetCString(*p_curpath), curpath);
718742
if (curpath[strlen(curpath) - 1] == '/')
719743
curpath[strlen(curpath) - 1] = '\0';
720744
openpath = new char[strlen(curpath) + strlen(fname) + 2];
@@ -732,9 +756,15 @@ IO_stat MCDispatch::loadfile(const char *inname, MCStack *&sptr)
732756
tname = tmparray;
733757
else
734758
tname++;
735-
if ((stream = MCS_open(tname, IO_READ_MODE, True, False, 0)) != NULL)
759+
MCAutoStringRef tname_string;
760+
/* UNCHECKED */ MCStringCreateWithCString(tname, &tname_string);
761+
if ((stream = MCS_open(*tname_string, *io_read_mode_string, True, False, 0)) != NULL)
736762
{
737-
char *curpath = MCS_getcurdir();
763+
MCAutoStringRef p_curpath;
764+
MCS_getcurdir(&p_curpath);
765+
char *curpath = nil;
766+
if (*p_curpath != nil)
767+
MCCStringClone(MCStringGetCString(*p_curpath), curpath);
738768
openpath = new char[strlen(curpath) + strlen(tname) + 2];
739769
sprintf(openpath, "%s/%s", curpath, tname);
740770
delete curpath;
@@ -745,22 +775,32 @@ IO_stat MCDispatch::loadfile(const char *inname, MCStack *&sptr)
745775
&& !openenv(tname, "MCPATH", &openpath, stream, 0)
746776
&& !openenv(tname, "PATH", &openpath, stream, 0))
747777
{
748-
char *homename;
749-
if ((homename = MCS_getenv("HOME")) != NULL)
778+
779+
MCAutoStringRef p_homename;
780+
MCAutoStringRef message;
781+
/* UNCHECKED */ MCStringCreateWithCString("HOME", &message);
782+
783+
MCS_getenv(*message, &p_homename);
784+
785+
char *homename = (char*) MCStringGetCString(*p_homename);
786+
787+
if (homename != NULL)
750788
{
751789
openpath = new char[strlen(homename) + strlen(tname) + 13];
752790
if (homename[strlen(homename) - 1] == '/')
753791
homename[strlen(homename) - 1] = '\0';
754792
sprintf(openpath, "%s/%s", homename, tname);
755-
if ((stream = MCS_open(openpath, IO_READ_MODE, True,
793+
MCAutoStringRef openpath_string;
794+
/* UNCHECKED */ MCStringCreateWithCString(openpath, &openpath_string);
795+
if ((stream = MCS_open(*openpath_string, *io_read_mode_string, True,
756796
False, 0)) == NULL)
757797
{
758798
sprintf(openpath, "%s/stacks/%s", homename, tname);
759-
if ((stream = MCS_open(openpath, IO_READ_MODE, True,
799+
if ((stream = MCS_open(*openpath_string, *io_read_mode_string, True,
760800
False, 0)) == NULL)
761801
{
762802
sprintf(openpath, "%s/components/%s", homename, tname);
763-
if ((stream = MCS_open(openpath, IO_READ_MODE, True,
803+
if ((stream = MCS_open(*openpath_string, *io_read_mode_string, True,
764804
False, 0)) == NULL)
765805
{
766806
delete openpath;
@@ -789,11 +829,14 @@ IO_stat MCDispatch::loadfile(const char *inname, MCStack *&sptr)
789829

790830
void MCDispatch::cleanup(IO_handle stream, char *linkname, char *bname)
791831
{
832+
MCAutoStringRef linkname_string, bname_string;
833+
/* UNCHECKED */ MCStringCreateWithCString(linkname, &linkname_string);
834+
/* UNCHECKED */ MCStringCreateWithCString(bname, &bname_string);
792835
if (stream != NULL)
793836
MCS_close(stream);
794-
MCS_unlink(linkname);
837+
MCS_unlink(*linkname_string);
795838
if (bname != NULL)
796-
MCS_unbackup(bname, linkname);
839+
MCS_unbackup(*bname_string, *linkname_string);
797840
delete linkname;
798841
delete bname;
799842
}
@@ -814,6 +857,10 @@ IO_stat MCDispatch::dosavestack(MCStack *sptr, const MCStringRef p_fname)
814857
return IO_ERROR;
815858

816859
char *linkname;
860+
861+
MCAutoStringRef t_linkname;
862+
/* UNCHECKED */ MCStringCreateWithCString(linkname, &t_linkname);
863+
817864
if (MCStringGetLength(p_fname) != 0)
818865
linkname = strclone(MCStringGetCString(p_fname));
819866
else
@@ -827,7 +874,7 @@ IO_stat MCDispatch::dosavestack(MCStack *sptr, const MCStringRef p_fname)
827874
MCresult->sets("can't open stack file, bad path");
828875
return IO_ERROR;
829876
}
830-
if (MCS_noperm(linkname))
877+
if (MCS_noperm(*t_linkname))
831878
{
832879
MCresult->sets("can't open stack file, no permission");
833880
delete linkname;
@@ -838,8 +885,13 @@ IO_stat MCDispatch::dosavestack(MCStack *sptr, const MCStringRef p_fname)
838885
char *backup = new char[strlen(linkname) + 2];
839886
strcpy(backup, linkname);
840887
strcat(backup, "~");
841-
MCS_unlink(backup);
842-
if (MCS_exists(linkname, True) && !MCS_backup(linkname, backup))
888+
889+
890+
MCAutoStringRef t_backup;
891+
/* UNCHECKED */ MCStringCreateWithCString(backup, &t_backup);
892+
893+
MCS_unlink(*t_backup);
894+
if (MCS_exists(*t_linkname, True) && !MCS_backup(*t_linkname, *t_backup))
843895
{
844896
MCresult->sets("can't open stack backup file");
845897
MCfiletype = oldfiletype;
@@ -848,7 +900,10 @@ IO_stat MCDispatch::dosavestack(MCStack *sptr, const MCStringRef p_fname)
848900
return IO_ERROR;
849901
}
850902
IO_handle stream;
851-
if ((stream = MCS_open(linkname, IO_WRITE_MODE, True, False, 0)) == NULL)
903+
MCAutoStringRef io_write_mode_string;
904+
/* UNCHECKED */ MCStringCreateWithCString(IO_WRITE_MODE, &io_write_mode_string);
905+
906+
if ((stream = MCS_open(*t_linkname, *io_write_mode_string, True, False, 0)) == NULL)
852907
{
853908
MCresult->sets("can't open stack file");
854909
cleanup(stream, linkname, backup);
@@ -907,20 +962,18 @@ IO_stat MCDispatch::dosavestack(MCStack *sptr, const MCStringRef p_fname)
907962
if (oldmask & 00004)
908963
newmask &= ~00001;
909964
MCS_umask(oldmask);
910-
MCS_chmod(linkname, newmask);
965+
966+
MCS_chmod(*t_linkname, newmask);
911967
/*
912968
if (sptr->getfilename() != NULL && !strequal(linkname, sptr->getfilename()))
913969
MCS_copyresourcefork(sptr->getfilename(), linkname);
914970
else if (sptr -> getfilename() != NULL)
915971
MCS_copyresourcefork(backup, linkname);
916972
*/
917-
MCAutoStringRef t_linkname;
918-
/* UNCHECKED */ MCStringCreateWithCString(linkname, &t_linkname);
973+
919974
MCAutoStringRef t_filename;
920975
if (sptr -> getfilename() != nil)
921976
/* UNCHECKED */ MCStringCreateWithCString(sptr->getfilename(), &t_filename);
922-
MCAutoStringRef t_backup;
923-
/* UNCHECKED */ MCStringCreateWithCString(backup, &t_backup);
924977

925978
if (*t_filename != nil && (*t_linkname == nil || !MCStringIsEqualTo(*t_filename, *t_linkname, kMCCompareExact)))
926979
MCS_copyresourcefork(*t_filename, *t_linkname);

engine/src/exec-files.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -810,9 +810,12 @@ void MCFilesExecLaunchApp(MCExecContext& ctxt, MCNameRef p_app, MCStringRef p_do
810810
}
811811

812812
uindex_t index;
813+
MCAutoStringRef p_empty;
814+
/* UNCHECKED */ MCStringCreateWithCString(strclone(""), &p_empty);
815+
813816
if (!IO_findprocess(p_app, index))
814817
MCS_startprocess(p_app,
815-
p_document == NULL ? strclone("") : MCStringGetCString(p_document),
818+
p_document == NULL ? *p_empty : p_document,
816819
OM_NEITHER, False);
817820
else
818821
ctxt . SetTheResultToStaticCString("process is already open");
@@ -863,21 +866,28 @@ void MCFilesExecPerformOpen(MCExecContext& ctxt, MCNameRef p_name, int p_mode, b
863866

864867
IO_handle istream = NULL;
865868
IO_handle ostream = NULL;
869+
870+
MCAutoStringRef io_append_mode_string, io_read_mode_string, io_write_mode_string, io_update_mode_string ;
871+
/* UNCHECKED */ MCStringCreateWithCString(IO_APPEND_MODE, &io_append_mode_string);
872+
/* UNCHECKED */ MCStringCreateWithCString(IO_READ_MODE, &io_read_mode_string);
873+
/* UNCHECKED */ MCStringCreateWithCString(IO_WRITE_MODE, &io_write_mode_string);
874+
/* UNCHECKED */ MCStringCreateWithCString(IO_UPDATE_MODE, &io_update_mode_string);
875+
866876
switch (p_mode)
867877
{
868878
case OM_APPEND:
869-
ostream = MCS_open(MCNameGetCString(p_name), IO_APPEND_MODE, False, p_is_driver, 0);
879+
ostream = MCS_open(MCNameGetString(p_name), *io_append_mode_string, False, p_is_driver, 0);
870880
break;
871881
case OM_NEITHER:
872882
break;
873883
case OM_READ:
874-
istream = MCS_open(MCNameGetCString(p_name), IO_READ_MODE, True, p_is_driver, 0);
884+
istream = MCS_open(MCNameGetString(p_name), *io_read_mode_string, True, p_is_driver, 0);
875885
break;
876886
case OM_WRITE:
877-
ostream = MCS_open(MCNameGetCString(p_name), IO_WRITE_MODE, False, p_is_driver, 0);
887+
ostream = MCS_open(MCNameGetString(p_name), *io_write_mode_string, False, p_is_driver, 0);
878888
break;
879889
case OM_UPDATE:
880-
istream = ostream = MCS_open(MCNameGetCString(p_name), IO_UPDATE_MODE, False, p_is_driver, 0);
890+
istream = ostream = MCS_open(MCNameGetString(p_name), *io_update_mode_string, False, p_is_driver, 0);
881891
break;
882892
default:
883893
break;

engine/src/exec-interface.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3354,7 +3354,10 @@ void MCInterfaceExecImportGetStream(MCExecContext& ctxt, MCStringRef p_filename,
33543354
return;
33553355
}
33563356

3357-
r_stream = MCS_open(MCStringGetCString(p_filename), IO_READ_MODE, True, False, 0);
3357+
MCAutoStringRef io_read_mode_string;
3358+
/* UNCHECKED */ MCStringCreateWithCString(IO_READ_MODE, &io_read_mode_string);
3359+
3360+
r_stream = MCS_open(p_filename, *io_read_mode_string, True, False, 0);
33583361
}
33593362

33603363
void MCInterfaceExecImportAudioClip(MCExecContext& ctxt, MCStringRef p_filename)
@@ -3497,17 +3500,21 @@ void MCInterfaceExportBitmapToFile(MCExecContext& ctxt, MCImageBitmap *p_bitmap,
34973500
if (!ctxt . EnsureDiskAccessIsAllowed())
34983501
return;
34993502

3503+
MCAutoStringRef io_write_mode_string;
3504+
/* UNCHECKED */ MCStringCreateWithCString(IO_WRITE_MODE, &io_write_mode_string);
3505+
35003506
IO_handle t_mstream = nil;
35013507
if (p_mask_filename != nil)
35023508
{
3503-
if ((t_mstream = MCS_open(MCStringGetCString(p_mask_filename), IO_WRITE_MODE, False, False, 0)) == nil)
3509+
3510+
if ((t_mstream = MCS_open(p_mask_filename, *io_write_mode_string, False, False, 0)) == nil)
35043511
{
35053512
ctxt . LegacyThrow(EE_EXPORT_CANTOPEN);
35063513
return;
35073514
}
35083515
}
35093516
IO_handle t_fstream;
3510-
if ((t_fstream = MCS_open(MCStringGetCString(p_filename), IO_WRITE_MODE, False, False, 0)) == nil)
3517+
if ((t_fstream = MCS_open(p_filename, *io_write_mode_string, False, False, 0)) == nil)
35113518
{
35123519
ctxt . LegacyThrow(EE_EXPORT_CANTOPEN);
35133520
if (t_mstream != nil)

engine/src/exec-legacy.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -420,8 +420,9 @@ void MCLegacyExecImport(MCExecContext& ctxt, MCStringRef p_filename, bool p_is_s
420420

421421
MCU_watchcursor(ctxt.GetObject()->getstack(), True);
422422
IO_handle t_stream;
423-
424-
if ((t_stream = MCS_open(MCStringGetCString(p_filename), IO_READ_MODE, True, False, 0)) == NULL)
423+
MCAutoStringRef io_read_mode_string;
424+
/* UNCHECKED */ MCStringCreateWithCString(IO_READ_MODE, &io_read_mode_string);
425+
if ((t_stream = MCS_open(p_filename, *io_read_mode_string, True, False, 0)) == NULL)
425426
{
426427
ctxt . LegacyThrow(EE_IMPORT_CANTOPEN);
427428
// MW-2007-12-17: [[ Bug 266 ]] The watch cursor must be reset before we

0 commit comments

Comments
 (0)