CDoc::CDoc(const char* mimetype, BLooper *target, const entry_ref *doc) : fDocIO(NULL) , fSavePanel(NULL) , fMimeType(mimetype ? mimetype : "") , fDirty(false) , fReadOnly(false) , fEncoding(B_UNICODE_UTF8) , fLineEndType(kle_LF) { fDocIO = new CLocalDocIO(this, doc, target); FailNil(fDocIO); if (doc) { BEntry e; FailOSErr(e.SetTo(doc, true)); FailOSErr(e.GetParent(&gCWD)); BNode node; FailOSErr(node.SetTo(doc)); struct stat st; FailOSErr(node.GetStat(&st)); fReadOnly = !((gUid == st.st_uid && (S_IWUSR & st.st_mode)) || (gGid == st.st_gid && (S_IWGRP & st.st_mode)) || (S_IWOTH & st.st_mode)); char s[NAME_MAX]; if (BNodeInfo(&node).GetType(s) == B_OK) fMimeType = s; } sfDocList.push_back(this); }
/*! Tests whether this and the supplied BNode object are equal. Two BNode objects are said to be equal if they're set to the same node, or if they're both \c B_NO_INIT. \param node the BNode to be compared with \return \c true, if the BNode objects are equal, \c false otherwise */ bool BNode::operator==(const BNode &node) const { if (fCStatus == B_NO_INIT && node.InitCheck() == B_NO_INIT) return true; if (fCStatus == B_OK && node.InitCheck() == B_OK) { // Check if they're identical BPrivate::Storage::Stat s1, s2; if (GetStat(&s1) != B_OK) return false; if (node.GetStat(&s2) != B_OK) return false; return (s1.st_dev == s2.st_dev && s1.st_ino == s2.st_ino); } return false; }