本文整理汇总了Golang中code/google/com/p/goplan9/plan9.Fcall.Wqid方法的典型用法代码示例。如果您正苦于以下问题:Golang Fcall.Wqid方法的具体用法?Golang Fcall.Wqid怎么用?Golang Fcall.Wqid使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类code/google/com/p/goplan9/plan9.Fcall
的用法示例。
在下文中一共展示了Fcall.Wqid方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: walk
func (c *ClientConn) walk(fc *plan9.Fcall) *plan9.Fcall {
fc.Type = plan9.Rwalk
fref, has := c.fidRef(fc.Fid)
if !has {
return c.invalidFidErr(fc)
}
if _, has := c.fidRef(fc.Newfid); has {
return c.fidUsedErr(fc)
}
current := fref.Path
for idx, name := range fc.Wname {
var ft FileType
if current == 0 {
return c.fileNotFoundErr(fc)
}
if ff, ok := c.explorer.(FileFinder); ok {
f, err := ff.FindInDir(current, name)
if err != nil {
return c.unexpectedErr(fc, err)
}
current = f.Path
} else {
childs, err := c.explorer.ListDir(current)
if err != nil {
return c.unexpectedErr(fc, err)
}
idx, have := childs.FindExact(name)
if !have {
return c.fileNotFoundErr(fc)
}
current = childs[idx].Path
}
ref, err := c.createFileRef(current, ft, 0)
if err != nil {
return c.unexpectedErr(fc, err)
}
fc.Wqid = append(fc.Wqid, ref.Qid)
// if the last match isn't a directory, there is no need to find
// another part of the path
//
// so, just break here
if ft == FTFILE && idx != len(fc.Wname)-1 {
return c.fileNotFoundErr(fc)
}
}
if len(fc.Wqid) == 0 {
// newfid and fid will map to the same file
if fc.Newfid != fc.Fid {
c.bindFid(fc.Newfid, fref.Path)
}
} else {
// make a bind between the last qid and the new fid
c.bindFid(fc.Newfid, fc.Wqid[len(fc.Wqid)-1].Path)
}
return fc
}