Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
go-fuse
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Levin Zimmermann
go-fuse
Commits
1e1606d8
Commit
1e1606d8
authored
Aug 14, 2010
by
Ivan Krasin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
FileSystem.List added
parent
84e8a52b
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
25 additions
and
5 deletions
+25
-5
fuse/fuse.go
fuse/fuse.go
+20
-5
fuse/fuse_test.go
fuse/fuse_test.go
+5
-0
No files found.
fuse/fuse.go
View file @
1e1606d8
...
@@ -14,6 +14,7 @@ const (
...
@@ -14,6 +14,7 @@ const (
)
)
type
FileSystem
interface
{
type
FileSystem
interface
{
List
(
parent
string
)
(
names
[]
string
,
code
Error
,
err
os
.
Error
)
Lookup
(
parent
,
filename
string
)
(
out
*
Attr
,
code
Error
,
err
os
.
Error
)
Lookup
(
parent
,
filename
string
)
(
out
*
Attr
,
code
Error
,
err
os
.
Error
)
GetAttr
(
h
*
InHeader
,
in
*
GetAttrIn
)
(
out
*
AttrOut
,
code
Error
,
err
os
.
Error
)
GetAttr
(
h
*
InHeader
,
in
*
GetAttrIn
)
(
out
*
AttrOut
,
code
Error
,
err
os
.
Error
)
}
}
...
@@ -429,7 +430,12 @@ func (m *manager) openDir(req *managerRequest) (resp *managerResponse) {
...
@@ -429,7 +430,12 @@ func (m *manager) openDir(req *managerRequest) (resp *managerResponse) {
h
.
nodeId
=
req
.
nodeId
h
.
nodeId
=
req
.
nodeId
h
.
req
=
make
(
chan
*
dirRequest
,
1
)
h
.
req
=
make
(
chan
*
dirRequest
,
1
)
m
.
dirHandles
[
h
.
fh
]
=
h
m
.
dirHandles
[
h
.
fh
]
=
h
go
readDirRoutine
(
m
.
client
,
h
.
req
)
dir
,
ok
:=
m
.
nodes
[
req
.
nodeId
]
if
!
ok
{
resp
.
err
=
os
.
NewError
(
fmt
.
Sprintf
(
"Can't find an entry with nodeId = %d"
,
req
.
nodeId
))
return
}
go
readDirRoutine
(
dir
,
m
.
fs
,
m
.
client
,
h
.
req
)
resp
.
fh
=
h
.
fh
resp
.
fh
=
h
.
fh
return
return
}
}
...
@@ -488,11 +494,20 @@ func (m *manager) lookup(req *managerRequest) (resp *managerResponse) {
...
@@ -488,11 +494,20 @@ func (m *manager) lookup(req *managerRequest) (resp *managerResponse) {
return
return
}
}
func
readDirRoutine
(
c
*
managerClient
,
requests
chan
*
dirRequest
)
{
func
readDirRoutine
(
dir
string
,
fs
FileSystem
,
c
*
managerClient
,
requests
chan
*
dirRequest
)
{
defer
close
(
requests
)
defer
close
(
requests
)
dirs
:=
[]
string
{
"lala111"
,
"bb"
,
"ddddd"
}
dir
=
path
.
Clean
(
dir
)
names
,
code
,
err
:=
fs
.
List
(
dir
)
i
:=
uint64
(
0
)
i
:=
uint64
(
0
)
for
req
:=
range
requests
{
for
req
:=
range
requests
{
if
err
!=
nil
{
req
.
resp
<-
&
dirResponse
{
nil
,
err
}
return
}
if
code
!=
OK
{
req
.
resp
<-
&
dirResponse
{
nil
,
os
.
NewError
(
fmt
.
Sprintf
(
"fs.List returned code: %d"
,
code
))}
return
}
if
req
.
offset
!=
i
{
if
req
.
offset
!=
i
{
fmt
.
Printf
(
"readDirRoutine: i = %v, changing offset to %v
\n
"
,
i
,
req
.
offset
)
fmt
.
Printf
(
"readDirRoutine: i = %v, changing offset to %v
\n
"
,
i
,
req
.
offset
)
i
=
req
.
offset
i
=
req
.
offset
...
@@ -500,9 +515,9 @@ func readDirRoutine(c *managerClient, requests chan *dirRequest) {
...
@@ -500,9 +515,9 @@ func readDirRoutine(c *managerClient, requests chan *dirRequest) {
if
req
.
isClose
{
if
req
.
isClose
{
return
return
}
}
if
i
<
uint64
(
len
(
dir
s
))
{
if
i
<
uint64
(
len
(
name
s
))
{
entry
:=
new
(
dirEntry
)
entry
:=
new
(
dirEntry
)
entry
.
name
=
dir
s
[
i
]
entry
.
name
=
name
s
[
i
]
lookupResp
:=
c
.
lookup
(
req
.
nodeId
,
entry
.
name
)
lookupResp
:=
c
.
lookup
(
req
.
nodeId
,
entry
.
name
)
if
lookupResp
.
err
!=
nil
{
if
lookupResp
.
err
!=
nil
{
req
.
resp
<-
&
dirResponse
{
nil
,
lookupResp
.
err
}
req
.
resp
<-
&
dirResponse
{
nil
,
lookupResp
.
err
}
...
...
fuse/fuse_test.go
View file @
1e1606d8
...
@@ -30,6 +30,11 @@ func (fs *testFuse) Lookup(parent, filename string) (out *Attr, code Error, err
...
@@ -30,6 +30,11 @@ func (fs *testFuse) Lookup(parent, filename string) (out *Attr, code Error, err
return
return
}
}
func
(
fs
*
testFuse
)
List
(
dir
string
)
(
names
[]
string
,
code
Error
,
err
os
.
Error
)
{
names
=
[]
string
{
"a1"
,
"b2"
,
"caaaaa"
}
return
}
func
errorHandler
(
errors
chan
os
.
Error
)
{
func
errorHandler
(
errors
chan
os
.
Error
)
{
for
err
:=
range
errors
{
for
err
:=
range
errors
{
log
.
Stderr
(
"MountPoint.errorHandler: "
,
err
)
log
.
Stderr
(
"MountPoint.errorHandler: "
,
err
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment