rfuse 1.0.4.RC0 → 1.0.4.RC1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ext/rfuse/rfuse.c +24 -8
- data/lib/rfuse/version.rb +1 -1
- data/spec/xattr_spec.rb +4 -2
- metadata +3 -3
data/ext/rfuse/rfuse.c
CHANGED
|
@@ -815,7 +815,8 @@ static VALUE unsafe_read(VALUE *args)
|
|
|
815
815
|
VALUE res;
|
|
816
816
|
|
|
817
817
|
res = rb_funcall3(args[0],rb_intern("read"),5,&args[1]);
|
|
818
|
-
|
|
818
|
+
//TODO If res does not implement to_str then you'll get an exception here that
|
|
819
|
+
//is hard to debug
|
|
819
820
|
return StringValue(res);
|
|
820
821
|
}
|
|
821
822
|
|
|
@@ -1006,14 +1007,14 @@ static int rf_setxattr(const char *path,const char *name,
|
|
|
1006
1007
|
@param [String] name
|
|
1007
1008
|
|
|
1008
1009
|
@return [String] attribute value
|
|
1009
|
-
@raise [Errno] Errno::
|
|
1010
|
+
@raise [Errno] Errno::ENOATTR if attribute does not exist
|
|
1010
1011
|
|
|
1011
1012
|
*/
|
|
1012
1013
|
static VALUE unsafe_getxattr(VALUE *args)
|
|
1013
1014
|
{
|
|
1014
1015
|
VALUE res;
|
|
1015
1016
|
res = rb_funcall3(args[0],rb_intern("getxattr"),3,&args[1]);
|
|
1016
|
-
|
|
1017
|
+
//TODO - exception won't should that we're calling getxattr
|
|
1017
1018
|
return StringValue(res);
|
|
1018
1019
|
}
|
|
1019
1020
|
|
|
@@ -1023,7 +1024,8 @@ static int rf_getxattr(const char *path,const char *name,char *buf,
|
|
|
1023
1024
|
VALUE args[4];
|
|
1024
1025
|
VALUE res;
|
|
1025
1026
|
int error = 0;
|
|
1026
|
-
|
|
1027
|
+
long length;
|
|
1028
|
+
|
|
1027
1029
|
struct fuse_context *ctx=fuse_get_context();
|
|
1028
1030
|
init_context_path_args(args,ctx,path);
|
|
1029
1031
|
|
|
@@ -1036,7 +1038,12 @@ static int rf_getxattr(const char *path,const char *name,char *buf,
|
|
|
1036
1038
|
}
|
|
1037
1039
|
else
|
|
1038
1040
|
{
|
|
1039
|
-
|
|
1041
|
+
length = rb_strcpy(res,buf,size);
|
|
1042
|
+
if (buf != NULL && length > (long) size)
|
|
1043
|
+
}
|
|
1044
|
+
return -ERANGE;
|
|
1045
|
+
}
|
|
1046
|
+
return length;
|
|
1040
1047
|
}
|
|
1041
1048
|
}
|
|
1042
1049
|
|
|
@@ -1066,16 +1073,25 @@ static int rf_listxattr(const char *path,char *buf, size_t size)
|
|
|
1066
1073
|
VALUE args[3];
|
|
1067
1074
|
VALUE res;
|
|
1068
1075
|
int error = 0;
|
|
1076
|
+
long length;
|
|
1069
1077
|
|
|
1070
1078
|
struct fuse_context *ctx=fuse_get_context();
|
|
1071
1079
|
init_context_path_args(args,ctx,path);
|
|
1072
1080
|
|
|
1073
1081
|
res=rb_protect((VALUE (*)())unsafe_listxattr,(VALUE) args,&error);
|
|
1074
1082
|
|
|
1075
|
-
if (error)
|
|
1083
|
+
if (error)
|
|
1084
|
+
{
|
|
1076
1085
|
return -(return_error(ENOENT));
|
|
1077
|
-
}
|
|
1078
|
-
|
|
1086
|
+
}
|
|
1087
|
+
else
|
|
1088
|
+
{
|
|
1089
|
+
length = rb_strcpy(res,buf,size);
|
|
1090
|
+
if (buf != NULL && length > (long) size)
|
|
1091
|
+
{
|
|
1092
|
+
return -ERANGE;
|
|
1093
|
+
}
|
|
1094
|
+
return length;
|
|
1079
1095
|
}
|
|
1080
1096
|
}
|
|
1081
1097
|
|
data/lib/rfuse/version.rb
CHANGED
data/spec/xattr_spec.rb
CHANGED
|
@@ -14,12 +14,14 @@ describe RFuse::Fuse do
|
|
|
14
14
|
"1"
|
|
15
15
|
when "user.two"
|
|
16
16
|
"2"
|
|
17
|
+
when "user.large"
|
|
18
|
+
"x" * 1000
|
|
17
19
|
else
|
|
18
20
|
""
|
|
19
21
|
end
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
mockfs.stub(:listxattr).with(anything(),"/myfile").and_return([ "user.one","user.two" ])
|
|
24
|
+
mockfs.stub(:listxattr).with(anything(),"/myfile").and_return([ "user.one","user.two","user.large" ])
|
|
23
25
|
mockfs.should_receive(:setxattr).with(anything(),"/myfile","user.three","updated",anything())
|
|
24
26
|
mockfs.should_receive(:removexattr).with(anything(),"/myfile","user.one")
|
|
25
27
|
|
|
@@ -29,7 +31,7 @@ describe RFuse::Fuse do
|
|
|
29
31
|
xattr = Xattr.new("#{mountpoint}/myfile")
|
|
30
32
|
xattr.list.should include("user.one")
|
|
31
33
|
xattr.list.should include("user.two")
|
|
32
|
-
xattr.list.size.should ==
|
|
34
|
+
xattr.list.size.should == 3
|
|
33
35
|
|
|
34
36
|
xattr['user.one'].should == "1"
|
|
35
37
|
xattr['user.two'].should == "2"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rfuse
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.4.
|
|
4
|
+
version: 1.0.4.RC1
|
|
5
5
|
prerelease: 6
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-12-
|
|
12
|
+
date: 2013-12-16 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rake
|
|
@@ -170,7 +170,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
170
170
|
version: '0'
|
|
171
171
|
segments:
|
|
172
172
|
- 0
|
|
173
|
-
hash:
|
|
173
|
+
hash: 3887867623874537565
|
|
174
174
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
175
|
none: false
|
|
176
176
|
requirements:
|