SimpleFontData::DerivedFontData::~DerivedFontData() { if (!forCustomFont) return; if (smallCaps) GlyphPageTreeNode::pruneTreeCustomFontData(smallCaps.get()); if (emphasisMark) GlyphPageTreeNode::pruneTreeCustomFontData(emphasisMark.get()); if (brokenIdeograph) GlyphPageTreeNode::pruneTreeCustomFontData(brokenIdeograph.get()); if (verticalRightOrientation) GlyphPageTreeNode::pruneTreeCustomFontData(verticalRightOrientation.get()); if (uprightOrientation) GlyphPageTreeNode::pruneTreeCustomFontData(uprightOrientation.get()); #if PLATFORM(MAC) if (compositeFontReferences) { CFDictionaryRef dictionary = CFDictionaryRef(compositeFontReferences.get()); CFIndex count = CFDictionaryGetCount(dictionary); if (count > 0) { Vector<SimpleFontData*, 2> stash(count); SimpleFontData** fonts = stash.data(); CFDictionaryGetKeysAndValues(dictionary, 0, (const void **)fonts); while (count-- > 0 && *fonts) { OwnPtr<SimpleFontData> afont = adoptPtr(*fonts++); GlyphPageTreeNode::pruneTreeCustomFontData(afont.get()); } } } #endif }
void V8::DisposeGlobal(internal::Object *global_handle) { i::GCObject *gcobject = RTTI_DynamicCast( i::GCObject, reinterpret_cast<i::GCObject *>(global_handle)); if (gcobject) { i::GlobalStash stash("__persistent"); gcobject->RemoveFromGlobalStash(&stash); } }
internal::Object *V8::GlobalizeReference(internal::Object *handle) { i::GCObject *gcobject = RTTI_DynamicCast( i::GCObject, reinterpret_cast<i::GCObject *>(handle)); if (gcobject) { i::GlobalStash stash("__persistent"); gcobject->AddToGlobalStash(&stash); } return handle; }
int copyinout(Ftw_t* ftw) { register File_t* f = &state.out->file; register char* s; register off_t c; register ssize_t n; register int rfd; register int wfd; if (getfile(state.out, f, ftw) && selectfile(state.out, f)) { s = f->name; f->name = stash(&state.out->path.copy, NiL, state.pwdlen + f->namesize); strcpy(stpcpy(f->name, state.pwd), s + (*s == '/')); if ((wfd = openout(state.out, f)) >= 0) { if ((rfd = openin(state.out, f)) >= 0) { #if defined(SEEK_DATA) && defined(SEEK_HOLE) off_t data; off_t hole; int more; data = 0; more = 1; while (more) { if ((hole = lseek(rfd, data, SEEK_HOLE)) < data) { hole = lseek(rfd, 0, SEEK_END); more = 0; } while ((c = hole - data) > 0) { if (c > state.buffersize) c = state.buffersize; if (lseek(rfd, data, SEEK_SET) != data || (n = read(rfd, state.tmp.buffer, (size_t)c)) <= 0) { error(ERROR_SYSTEM|2, "%s: read error", f->name); more = 0; break; } if (lseek(wfd, data, SEEK_SET) != data || write(wfd, state.tmp.buffer, n) != n) { error(ERROR_SYSTEM|2, "%s: write error", f->name); more = 0; break; } state.out->io->count += n; data += n; } if (!more) break; if ((data = lseek(rfd, hole, SEEK_DATA)) < hole) { if ((data = lseek(rfd, -1, SEEK_END)) < 0 || (data + 1) > hole && (lseek(wfd, data, SEEK_SET) != data || write(wfd, "", 1) != 1)) error(ERROR_SYSTEM|2, "%s: write error", f->name); state.out->io->count += 1; break; } } #else holeinit(wfd); for (c = f->st->st_size; c > 0; c -= n) { if ((n = read(rfd, state.tmp.buffer, (size_t)((c > state.buffersize) ? state.buffersize : c))) <= 0) { error(ERROR_SYSTEM|2, "%s: read error", f->name); break; } if (holewrite(wfd, state.tmp.buffer, n) != n) { error(ERROR_SYSTEM|2, "%s: write error", f->name); break; } state.out->io->count += n; } holedone(wfd); #endif closeout(state.out, f, wfd); closein(state.out, f, rfd); setfile(state.out, f); listentry(f); } else closeout(state.out, f, wfd); } else if (wfd != -1) listentry(f); } return 0; }
static char* paxstash(Pax_t* pax, Value_t* v, const char* s, size_t z) { return stash(v, s, z); }