@@ -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
387393Boolean 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
790830void 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);
0 commit comments