void MCPlayer::freetmp() { if (istmpfile) { MCS_unlink(filename); MCValueAssign(filename, kMCEmptyString); } }
void MCDispatch::cleanup(IO_handle stream, char *linkname, char *bname) { if (stream != NULL) MCS_close(stream); MCS_unlink(linkname); if (bname != NULL) MCS_unbackup(bname, linkname); delete linkname; delete bname; }
Exec_stat MCRevRelicense::exec(MCExecPoint& ep) { switch(MCdefaultstackptr -> getcard() -> message(MCM_shut_down_request)) { case ES_PASS: case ES_NOT_HANDLED: break; default: MCresult -> sets("cancelled"); return ES_NORMAL; } if (MClicenseparameters . license_token == NULL || strlen(MClicenseparameters . license_token) == 0) { MCresult -> sets("no token"); return ES_NORMAL; } if (!MCS_unlink(MClicenseparameters . license_token)) { MCresult -> sets("token deletion failed"); return ES_NORMAL; } MCretcode = 0; MCquit = True; MCexitall = True; MCtracestackptr = NULL; MCtraceabort = True; MCtracereturn = True; s_command_path = MCS_resolvepath(MCcmd); atexit(restart_revolution); return ES_NORMAL; }
char *MCVideoClip::getfile() { if (frames != NULL) { char *tmpfile = strclone(MCS_tmpnam()); IO_handle tstream; if ((tstream = MCS_open(tmpfile, IO_WRITE_MODE, False, False, 0)) == NULL) { delete tmpfile; return NULL; } IO_stat stat = IO_write(frames, sizeof(int1), size, tstream); MCS_close(tstream); if (stat != IO_NORMAL) { MCS_unlink(tmpfile); delete tmpfile; return NULL; } return tmpfile; } return NULL; }
IO_stat MCDispatch::dosavestack(MCStack *sptr, const MCString &fname) { if (MCModeCheckSaveStack(sptr, fname) != IO_NORMAL) return IO_ERROR; char *linkname; if (fname.getlength() != 0) linkname = fname.clone(); else if ((linkname = strclone(sptr->getfilename())) == NULL) { MCresult->sets("stack does not have a filename"); return IO_ERROR; } if (linkname == NULL) { MCresult->sets("can't open stack file, bad path"); return IO_ERROR; } if (MCS_noperm(linkname)) { MCresult->sets("can't open stack file, no permission"); delete linkname; return IO_ERROR; } char *oldfiletype = MCfiletype; MCfiletype = MCstackfiletype; char *backup = new char[strlen(linkname) + 2]; strcpy(backup, linkname); strcat(backup, "~"); MCS_unlink(backup); if (MCS_exists(linkname, True) && !MCS_backup(linkname, backup)) { MCresult->sets("can't open stack backup file"); MCfiletype = oldfiletype; delete linkname; delete backup; return IO_ERROR; } IO_handle stream; if ((stream = MCS_open(linkname, IO_WRITE_MODE, True, False, 0)) == NULL) { MCresult->sets("can't open stack file"); cleanup(stream, linkname, backup); MCfiletype = oldfiletype; return IO_ERROR; } MCfiletype = oldfiletype; MCString errstring = "Error writing stack (disk full?)"; // MW-2012-03-04: [[ StackFile5500 ]] Work out what header to emit, and the size. const char *t_header; uint32_t t_header_size; if (MCstackfileversion >= 5500) t_header = newheader5500, t_header_size = 8; else if (MCstackfileversion >= 2700) t_header = newheader, t_header_size = 8; else t_header = header, t_header_size = HEADERSIZE; if (IO_write(t_header, sizeof(char), t_header_size, stream) != IO_NORMAL || IO_write_uint1(CHARSET, stream) != IO_NORMAL) { MCresult->sets(errstring); cleanup(stream, linkname, backup); return IO_ERROR; } if (IO_write_uint1(OT_NOTHOME, stream) != IO_NORMAL || IO_write_string(NULL, stream) != IO_NORMAL) { // was stackfiles MCresult->sets(errstring); cleanup(stream, linkname, backup); return IO_ERROR; } // MW-2012-02-22; [[ NoScrollSave ]] Adjust the rect by the current group offset. MCgroupedobjectoffset . x = 0; MCgroupedobjectoffset . y = 0; MCresult -> clear(); if (sptr->save(stream, 0, false) != IO_NORMAL || IO_write_uint1(OT_END, stream) != IO_NORMAL) { if (MCresult -> isclear()) MCresult->sets(errstring); cleanup(stream, linkname, backup); return IO_ERROR; } MCS_close(stream); uint2 oldmask = MCS_umask(0); uint2 newmask = ~oldmask & 00777; if (oldmask & 00400) newmask &= ~00100; if (oldmask & 00040) newmask &= ~00010; if (oldmask & 00004) newmask &= ~00001; MCS_umask(oldmask); MCS_chmod(linkname, newmask); if (sptr->getfilename() != NULL && !strequal(linkname, sptr->getfilename())) MCS_copyresourcefork(sptr->getfilename(), linkname); else if (sptr -> getfilename() != NULL) MCS_copyresourcefork(backup, linkname); sptr->setfilename(linkname); if (backup != NULL) { MCS_unlink(backup); delete backup; } return IO_NORMAL; }