file-temp 0.1.2 → 1.0.0
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/CHANGES +4 -0
- data/README +4 -1
- data/ext/temp.c +9 -6
- data/test/tc_file_temp.rb +7 -1
- metadata +45 -38
data/CHANGES
CHANGED
data/README
CHANGED
@@ -25,6 +25,9 @@
|
|
25
25
|
Ruby's tempfile.rb is overwrought and susceptible to race conditions. This
|
26
26
|
This library uses your system's native tmpfile() or mkstemp() functions
|
27
27
|
instead of trying to handle race conditions manually via pure Ruby.
|
28
|
+
|
29
|
+
This library is also more secure because it restricts file permission via
|
30
|
+
umask() for files created with mkstemp().
|
28
31
|
|
29
32
|
= Other libraries
|
30
33
|
I am aware of Cian Synnott's ruby-stemp project. However, I don't like the
|
@@ -40,7 +43,7 @@
|
|
40
43
|
Ruby's
|
41
44
|
|
42
45
|
= Copyright
|
43
|
-
(C) 2007 Daniel J. Berger
|
46
|
+
(C) 2007-2008 Daniel J. Berger
|
44
47
|
All Rights Reserved
|
45
48
|
|
46
49
|
= Warranty
|
data/ext/temp.c
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#include <ruby.h>
|
2
2
|
#include <stdio.h>
|
3
|
+
#include <sys/stat.h>
|
3
4
|
|
4
5
|
#ifdef HAVE__SOPEN_S
|
5
6
|
#include <share.h>
|
@@ -14,7 +15,7 @@
|
|
14
15
|
#define P_tmpdir "/tmp"
|
15
16
|
#endif
|
16
17
|
|
17
|
-
#define VERSION "0.
|
18
|
+
#define VERSION "1.0.0"
|
18
19
|
|
19
20
|
VALUE cFileTemp;
|
20
21
|
|
@@ -59,16 +60,18 @@ static VALUE tempfile_init(int argc, VALUE* argv, VALUE self){
|
|
59
60
|
if(!fptr)
|
60
61
|
rb_sys_fail("tmpfile()");
|
61
62
|
#endif
|
62
|
-
|
63
63
|
v_args[0] = INT2FIX(fileno(fptr));
|
64
64
|
}
|
65
65
|
else{
|
66
|
-
int fd;
|
66
|
+
int fd, omask;
|
67
67
|
|
68
68
|
if(NIL_P(v_template))
|
69
69
|
v_template = rb_str_new2("rb_file_temp_XXXXXX");
|
70
70
|
|
71
|
+
/* Set the umask to improve security */
|
72
|
+
omask = umask(077);
|
71
73
|
fd = mkstemp(StringValuePtr(v_template));
|
74
|
+
umask(omask);
|
72
75
|
|
73
76
|
if(fd < 0)
|
74
77
|
rb_sys_fail("mkstemp()");
|
@@ -77,7 +80,7 @@ static VALUE tempfile_init(int argc, VALUE* argv, VALUE self){
|
|
77
80
|
}
|
78
81
|
|
79
82
|
/* This bit of explicitness is necessary for MS Windows */
|
80
|
-
v_args[1] = rb_str_new2("wb");
|
83
|
+
v_args[1] = rb_str_new2("wb+");
|
81
84
|
|
82
85
|
return rb_call_super(2, v_args);
|
83
86
|
}
|
@@ -105,13 +108,13 @@ void Init_temp(){
|
|
105
108
|
rb_define_method(cFileTemp, "initialize", tempfile_init, -1);
|
106
109
|
|
107
110
|
/* Singleton Methods */
|
108
|
-
rb_define_singleton_method(cFileTemp, "
|
111
|
+
rb_define_singleton_method(cFileTemp, "temp_name", tempfile_tmpnam, 0);
|
109
112
|
|
110
113
|
/* Constants */
|
111
114
|
|
112
115
|
/* ENV['P_tmpdir']: Your system's tmpdir */
|
113
116
|
rb_define_const(cFileTemp, "TMPDIR", rb_str_new2(P_tmpdir));
|
114
117
|
|
115
|
-
/* 0.1.
|
118
|
+
/* 0.1.3: The version of this library */
|
116
119
|
rb_define_const(cFileTemp, "VERSION", rb_str_new2(VERSION));
|
117
120
|
}
|
data/test/tc_file_temp.rb
CHANGED
@@ -14,7 +14,13 @@ class TC_File_Temp < Test::Unit::TestCase
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_file_temp_version
|
17
|
-
assert_equal('0.
|
17
|
+
assert_equal('1.0.0', FileTemp::VERSION)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_file_temp_threaded
|
21
|
+
threads = []
|
22
|
+
assert_nothing_raised{ 100.times{ threads << Thread.new{ FileTemp.new }}}
|
23
|
+
assert_nothing_raised{ threads.join }
|
18
24
|
end
|
19
25
|
|
20
26
|
def test_file_temp_tmpdir
|
metadata
CHANGED
@@ -1,54 +1,61 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: file-temp
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-06-06 00:00:00 -06:00
|
8
|
-
summary: An alternative way to generate tempfiles
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: djberg96@gmail.com
|
12
|
-
homepage: http://www.rubyforge.org/projects/shards
|
13
|
-
rubyforge_project: shards
|
14
|
-
description: An alternative way to generate tempfiles
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 1.8.0
|
24
|
-
version:
|
4
|
+
version: 1.0.0
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Daniel J. Berger
|
31
|
-
|
32
|
-
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-04-12 00:00:00 -06:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: An alternative way to generate tempfiles
|
17
|
+
email: djberg96@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions:
|
21
|
+
- ext/extconf.rb
|
22
|
+
extra_rdoc_files:
|
33
23
|
- CHANGES
|
34
|
-
- MANIFEST
|
35
24
|
- README
|
36
|
-
-
|
25
|
+
- MANIFEST
|
37
26
|
- ext/temp.c
|
38
|
-
|
27
|
+
files:
|
39
28
|
- test/tc_file_temp.rb
|
40
|
-
rdoc_options: []
|
41
|
-
|
42
|
-
extra_rdoc_files:
|
43
29
|
- CHANGES
|
44
|
-
- README
|
45
30
|
- MANIFEST
|
31
|
+
- Rakefile
|
32
|
+
- README
|
46
33
|
- ext/temp.c
|
47
|
-
|
34
|
+
has_rdoc: true
|
35
|
+
homepage: http://www.rubyforge.org/projects/shards
|
36
|
+
post_install_message:
|
37
|
+
rdoc_options: []
|
48
38
|
|
49
|
-
|
50
|
-
-
|
39
|
+
require_paths:
|
40
|
+
- lib
|
41
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.8.0
|
46
|
+
version:
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: "0"
|
52
|
+
version:
|
51
53
|
requirements: []
|
52
54
|
|
53
|
-
|
54
|
-
|
55
|
+
rubyforge_project: shards
|
56
|
+
rubygems_version: 1.0.1
|
57
|
+
signing_key:
|
58
|
+
specification_version: 2
|
59
|
+
summary: An alternative way to generate tempfiles
|
60
|
+
test_files:
|
61
|
+
- test/tc_file_temp.rb
|