bool MCReferencedImageRep::GetDataStream(IO_handle &r_stream) { IO_handle t_stream = nil; if (MCSecureModeCanAccessDisk()) t_stream = MCS_open(m_file_name, IO_READ_MODE, false, false, 0); // MW-2013-09-25: [[ Bug 10983 ]] Only ever try to load the rep as a url once. if (t_stream == nil && !m_url_load_attempted) { // MW-2013-09-25: [[ Bug 10983 ]] Mark the rep has having attempted url load. m_url_load_attempted = true; MCExecPoint ep(MCdefaultstackptr, nil, nil); ep.setsvalue(m_file_name); MCU_geturl(ep); if (ep.getsvalue().getlength() == 0) return false; /* UNCHECKED */ MCMemoryAllocateCopy(ep.getsvalue().getstring(), ep.getsvalue().getlength(), m_url_data); m_url_data_size = ep.getsvalue().getlength(); t_stream = MCS_fakeopen(MCString((char*)m_url_data, m_url_data_size)); } if (t_stream != nil) r_stream = t_stream; return t_stream != nil; }
bool MCReferencedImageRep::GetDataStream(IO_handle &r_stream) { IO_handle t_stream = nil; if (MCSecureModeCanAccessDisk()) t_stream = MCS_open(m_file_name, kMCOpenFileModeRead, false, false, 0); if (t_stream == nil) { // MW-2013-09-25: [[ Bug 10983 ]] Only ever try to load the rep as a url once. if (!m_url_load_attempted) { // MW-2013-09-25: [[ Bug 10983 ]] Mark the rep has having attempted url load. m_url_load_attempted = true; MCExecContext ctxt(MCdefaultstackptr, nil, nil); MCAutoValueRef t_data; MCU_geturl(ctxt, m_file_name, &t_data); if (ctxt.HasError() || MCValueIsEmpty(*t_data)) return false; MCAutoDataRef t_dataref; /* UNCHECKED */ ctxt . ConvertToData(*t_data, &t_dataref); /* UNCHECKED */ MCMemoryAllocateCopy(MCDataGetBytePtr(*t_dataref), MCDataGetLength(*t_dataref), m_url_data); m_url_data_size = MCDataGetLength(*t_dataref); } // IM-2014-09-30: [[ Bug 13501 ]] If we already have the url data then make sure we use it. if (m_url_data != nil) t_stream = MCS_fakeopen((const char *)m_url_data, m_url_data_size); } if (t_stream != nil) r_stream = t_stream; return t_stream != nil; }
MCObject *MCDispatch::getobjname(Chunk_term type, const MCString &s) { if (stacks != NULL) { MCStack *tstk = stacks; do { MCObject *optr; if ((optr = tstk->getsubstackobjname(type, s)) != NULL) return optr; tstk = (MCStack *)tstk->next(); } while (tstk != stacks); } if (type == CT_IMAGE) { const char *sptr = s.getstring(); uint4 l = s.getlength(); MCAutoNameRef t_image_name; if (MCU_strchr(sptr, l, ':')) /* UNCHECKED */ t_image_name . CreateWithOldString(s); MCImage *iptr = imagecache; if (iptr != NULL) { do { check: if (t_image_name != nil && iptr -> hasname(t_image_name)) return iptr; if (!iptr->getopened()) { iptr->remove(imagecache); delete iptr; iptr = imagecache; if (iptr == NULL) break; goto check; } iptr = (MCImage *)iptr->next(); } while (iptr != imagecache); } if (MCU_strchr(sptr, l, ':')) { MCresult->clear(False); MCExecPoint ep(MCdefaultstackptr, NULL, NULL); MCExecPoint *epptr = MCEPptr == NULL ? &ep : MCEPptr; epptr->setsvalue(s); MCU_geturl(*epptr); if (MCresult->isempty()) { iptr = new MCImage; iptr->appendto(imagecache); iptr->setprop(0, P_TEXT, *epptr, False); iptr->setname(t_image_name); return iptr; } } } return NULL; }