std::list<std::string> getNodeChildren(const std::string& parentId) const { std::list<std::string> children; if (parentId.empty()) { if (this->dataSource_->modelRoot() != NULL) { QPersistentModelIndex pindex(this->model_->index(this->dataSource_->modelRoot(), 0)); this->nodeIndexes_.insert(pindex); // Convert uint64 internal id to string. QString qstr = QString::number(pindex.internalId()); children.push_back(qstr.toLocal8Bit().constData()); } } else { TreeNode* parentNode = getNode(parentId); if (parentNode != NULL) { QList<TreeNode*> childNodes = parentNode->children(); for (int i = 0; i < childNodes.count(); ++i) { QPersistentModelIndex pindex(this->model_->index(childNodes[i], 0)); this->nodeIndexes_.insert(pindex); // Convert uint64 internal id to string. QString qstr = QString::number(pindex.internalId()); children.push_back(qstr.toLocal8Bit().constData()); } } } return children; }
static void fsdestroyfid(Fid *f) { Aux *a = f->aux; if(ptype(f->qid.path) == Pinfo) freeinfo(pindex(f->qid.path)); f->omode = -1; if(! a) return; if(a->fh != -1) if(CIFSclose(Sess, a->sp, a->fh) == -1) fprint(2, "%s: close failed fh=%d %r\n", argv0, a->fh); if(a->sh != -1) if(CIFSfindclose2(Sess, a->sp, a->sh) == -1) fprint(2, "%s: findclose failed sh=%d %r\n", argv0, a->sh); if(a->path) free(a->path); if(a->cache) free(a->cache); if(a == Auxroot) Auxroot = a->next; a->prev->next = a->next; a->next->prev = a->prev; if(a->next == a->prev) Auxroot = nil; if(a) free(a); }
static void fsopen(Req *r) { int rc; FInfo fi; Aux *a = r->fid->aux; a->end = a->off = 0; a->cache = emalloc9p(max(Sess->mtu, MTU)); if(ptype(r->fid->qid.path) == Pinfo){ if(makeinfo(pindex(r->fid->qid.path)) != -1) respond(r, nil); else respond(r, "cannot generate info"); return; } if(r->fid->qid.type & QTDIR){ respond(r, nil); return; } if(Sess->caps & CAP_NT_SMBS) rc = ntcreateopen(a, mapfile(a->path), r->ifcall.mode, 0777, 0, 0, &fi); else rc = smbcreateopen(a, mapfile(a->path), r->ifcall.mode, 0777, 0, 0, &fi); if(rc == -1){ responderrstr(r); return; } respond(r, nil); }
static void fsstat(Req *r) { int rc; FInfo fi; Aux *a = r->fid->aux; if(ptype(r->fid->qid.path) == Proot) V2D(&r->d, r->fid->qid, ""); else if(ptype(r->fid->qid.path) == Pinfo) dirgeninfo(pindex(r->fid->qid.path), &r->d); else if(ptype(r->fid->qid.path) == Pshare) V2D(&r->d, r->fid->qid, a->path +1); else{ memset(&fi, 0, sizeof fi); if(Sess->caps & CAP_NT_SMBS) rc = T2queryall(Sess, a->sp, mapfile(a->path), &fi); else rc = T2querystandard(Sess, a->sp, mapfile(a->path), &fi); if(rc == -1){ responderrstr(r); return; } I2D(&r->d, a->sp, a->path, &fi); if(Billtrog == 0) upd_names(Sess, a->sp, mapfile(a->path), &r->d); } respond(r, nil); }
void unquote(char *object_str) { /* { Return string without quoted portion }*/ integer pos0,pos1,pos2,olen; vtype str1,str2; pos0 = pindex(object_str,'"'); if (pos0 > 0) { pos1 = pindex(object_str,'~'); pos2 = pindex(object_str,'|'); olen = strlen(object_str); strncpy(str1,object_str,pos1); str1[pos1] = 0; strncpy(str2,&(object_str[pos2]),olen-pos2); str2[olen-pos2] = 0; sprintf(object_str,"%s%s",str1,str2); } };
static void fsread(Req *r) { vlong n, m, got; Aux *a = r->fid->aux; char *buf = r->ofcall.data; vlong len = r->ifcall.count; vlong off = r->ifcall.offset; if(ptype(r->fid->qid.path) == Pinfo){ r->ofcall.count = readinfo(pindex(r->fid->qid.path), buf, len, off); respond(r, nil); return; } if(r->fid->qid.type & QTDIR){ dirread9p(r, dirgen, a); respond(r, nil); return; } got = 0; n = Sess->mtu -OVERHEAD; do{ if(len - got < n) n = len - got; m = CIFSread(Sess, a->sp, a->fh, off + got, buf + got, n, len); if(m != -1) got += m; } while(got < len && m >= n); r->ofcall.count = got; if(m == -1) responderrstr(r); else respond(r, nil); }