Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jacobsa-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
Kirill Smelkov
jacobsa-fuse
Commits
63408f6a
Commit
63408f6a
authored
Mar 03, 2015
by
Aaron Jacobs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added an RmDir method.
parent
9f984e1a
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
63 additions
and
0 deletions
+63
-0
file_system.go
file_system.go
+30
-0
fuseutil/not_implemented_file_system.go
fuseutil/not_implemented_file_system.go
+6
-0
server.go
server.go
+27
-0
No files found.
file_system.go
View file @
63408f6a
...
...
@@ -62,6 +62,24 @@ type FileSystem interface {
ctx
context
.
Context
,
req
*
MkDirRequest
)
(
*
MkDirResponse
,
error
)
///////////////////////////////////
// Inode destruction
///////////////////////////////////
// Unlink a directory from its parent. Because directories cannot have a link
// count above one, this means the directory inode should be deleted as well
// once the kernel calls ForgetInode.
//
// The file system is responsible for checking that the directory is empty.
//
// Sample implementation in ext2: ext2_rmdir (http://goo.gl/B9QmFf)
//
// TODO(jacobsa): Add tests for the assertion about directory link counts
// above (on a real file system and on memfs).
RmDir
(
ctx
context
.
Context
,
req
*
RmDirRequest
)
(
*
RmDirResponse
,
error
)
///////////////////////////////////
// Directory handles
///////////////////////////////////
...
...
@@ -360,6 +378,18 @@ type MkDirResponse struct {
Entry
ChildInodeEntry
}
type
RmDirRequest
struct
{
Header
RequestHeader
// The ID of parent directory inode, and the name of the directory being
// removed within it.
Parent
InodeID
Name
string
}
type
RmDirResponse
struct
{
}
type
OpenDirRequest
struct
{
Header
RequestHeader
...
...
fuseutil/not_implemented_file_system.go
View file @
63408f6a
...
...
@@ -46,6 +46,12 @@ func (fs *NotImplementedFileSystem) MkDir(
return
nil
,
fuse
.
ENOSYS
}
func
(
fs
*
NotImplementedFileSystem
)
RmDir
(
ctx
context
.
Context
,
req
*
fuse
.
RmDirRequest
)
(
*
fuse
.
RmDirResponse
,
error
)
{
return
nil
,
fuse
.
ENOSYS
}
func
(
fs
*
NotImplementedFileSystem
)
OpenDir
(
ctx
context
.
Context
,
req
*
fuse
.
OpenDirRequest
)
(
*
fuse
.
OpenDirResponse
,
error
)
{
...
...
server.go
View file @
63408f6a
...
...
@@ -184,6 +184,33 @@ func (s *server) handleFuseRequest(fuseReq bazilfuse.Request) {
s
.
logger
.
Println
(
"Responding:"
,
fuseResp
)
typed
.
Respond
(
fuseResp
)
case
*
bazilfuse
.
RemoveRequest
:
// We don't yet support files.
if
!
typed
.
Dir
{
s
.
logger
.
Println
(
"Not supported for files. Returning ENOSYS."
)
typed
.
RespondError
(
ENOSYS
)
return
}
// Convert the request.
req
:=
&
RmDirRequest
{
Header
:
convertHeader
(
typed
.
Header
),
Parent
:
InodeID
(
typed
.
Header
.
Node
),
Name
:
typed
.
Name
,
}
// Call the file system.
_
,
err
:=
s
.
fs
.
RmDir
(
ctx
,
req
)
if
err
!=
nil
{
s
.
logger
.
Println
(
"Responding:"
,
err
)
typed
.
RespondError
(
err
)
return
}
// Respond successfully.
s
.
logger
.
Println
(
"Responding OK."
)
typed
.
Respond
()
case
*
bazilfuse
.
OpenRequest
:
// Directory or file?
if
typed
.
Dir
{
...
...
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