rsense-core 0.5.6 → 0.5.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,406 @@
1
+ require_relative './tmpdir'
2
+
3
+ class Tempfile
4
+ include Dir::Tmpname
5
+
6
+ ##% self.atime(String or IO) -> Time
7
+ def self.atime(filename) Time.new end
8
+ ##% self.basename(String, ?String) -> String
9
+ def self.basename(filename, suffix = '') '' end
10
+ ##% self.blockdev?(String or IO) -> Boolean
11
+ def self.blockdev?(path) BOOLEAN end
12
+ ##% self.chardev?(String or IO) -> Boolean
13
+ def self.chardev?(path) BOOLEAN end
14
+ ##% self.chmod(Integer, *String) -> Integer
15
+ def self.chmod(mode, *filename) 0 end
16
+ ##% self.chown(Integer, Integer, *String) -> Integer
17
+ def self.chown(owner, group, *filename) 0 end
18
+ ##% self.ctime(String or IO) -> Time
19
+ def self.ctime(filename) Time.new end
20
+ ##% self.delete(*String) -> Integer
21
+ def self.delete(*filename) 0 end
22
+ ##% self.unlink(*String) -> Integer
23
+ def self.unlink(*filename) 0 end
24
+ ##% self.directory?(String or IO) -> Boolean
25
+ def self.directory?(path) BOOLEAN end
26
+ ##% self.dirname(String) -> String
27
+ def self.dirname(filename) '' end
28
+ ##% self.executable?(String or IO) ->Boolean
29
+ def self.executable?(path) BOOLEAN end
30
+ ##% self.executable_real?(String or IO) ->Boolean
31
+ def self.executable_real?(path) BOOLEAN end
32
+ ##% self.exist?(String or IO) -> Boolean
33
+ def self.exist?(path) BOOLEAN end
34
+ ##% self.exists?(String or IO) -> Boolean
35
+ def self.exists?(path) BOOLEAN end
36
+ ##% self.expand_path(String, ?String) -> String
37
+ def self.expand_path(path, default_dir = '.') '' end
38
+ ##% self.extname(String) -> String
39
+ def self.extname(filename) '' end
40
+ ##% self.file?(String or IO) -> Boolean
41
+ def self.file?(path) BOOLEAN end
42
+ ##% self.fnmatch(String, String, ?Integer) -> Boolean
43
+ def self.fnmatch(pattern, path, flags = 0) BOOLEAN end
44
+ ##% self.fnmatch?(String, String, ?Integer) -> Boolean
45
+ def self.fnmatch?(pattern, path, flags = 0) BOOLEAN end
46
+ ##% self.ftype(String) -> String
47
+ def self.ftype(filename) '' end
48
+ ##% self.grpowned?(String or IO) -> Boolean
49
+ def self.grpowned?(filename) BOOLEAN end
50
+ ##% self.identical?(String or IO, String or IO) -> Boolean
51
+ def self.identical?(filename1, filename2) BOOLEAN end
52
+ ##% self.join(*String) -> String
53
+ def self.join(*item) '' end
54
+ ##% self.lchmod(Integer, *String) -> Integer
55
+ def self.lchmod(mode, *filename) 0 end
56
+ ##% self.lchown(Integer, Integer, *String) -> Integer
57
+ def self.lchown(owner, group, *filename) 0 end
58
+ ##% self.link(String, String) -> Integer
59
+ def self.link(old, new) 0 end
60
+ ##% self.lstat(String) -> File::Stat
61
+ def self.lstat(filename) File::Stat.new('') end
62
+ ##% self.mtime(String or IO) -> Time
63
+ def self.mtime(filename) Time.new end
64
+
65
+ ##% self.open(String or Integer, ?a, ?Integer) -> File
66
+ ##% self.open(String or Integer, ?a, ?Integer) {File -> a} -> a
67
+ def self.open(path, mode = 'r', perm = 0666) File.new('') end
68
+ ##% self.owned?(String or IO) -> Boolean
69
+ def self.owned?(path) BOOLEAN end
70
+ ##% self.pipe?(String or IO) -> Boolean
71
+ def self.pipe?(path) BOOLEAN end
72
+ ##% self.readable?(String or IO) -> Boolean
73
+ def self.readable?(path) BOOLEAN end
74
+ ##% self.readable_real?(String or IO) -> Boolean
75
+ def self.readable_real?(path) BOOLEAN end
76
+ ##% self.readlink(String) -> String
77
+ def self.readlink(path) '' end
78
+ ##% self.rename(String, String) -> Integer
79
+ def self.rename(from, to) 0 end
80
+ ##% self.setgid?(String or IO) -> Boolean
81
+ def self.setgid?(path) BOOLEAN end
82
+ ##% self.setuid?(String or IO) -> Boolean
83
+ def self.setuid?(path) BOOLEAN end
84
+ ##% self.size(String or IO) -> Integer
85
+ def self.size(path) 0 end
86
+ ##% self.size?(String or IO) -> Boolean
87
+ def self.size?(path) BOOLEAN end
88
+ ##% self.socket?(String or IO) -> Boolean
89
+ def self.socket?(path) BOOLEAN end
90
+ ##% self.split(String) -> (String, String)
91
+ def self.split(pathname) ['', ''] end
92
+ ##% self.stat(String) -> File::Stat
93
+ def self.stat(filename) File::Stat.new('') end
94
+ ##% self.sticky?(String or IO) -> Boolean
95
+ def self.sticky?(path) BOOLEAN end
96
+ ##% self.symlink(String, String) -> Integer
97
+ def self.symlink(old, new) 0 end
98
+ ##% self.symlink?(String or IO) -> Boolean
99
+ def self.symlinky?(path) BOOLEAN end
100
+ ##% self.truncate(String, Integer) -> Integer
101
+ def self.truncate(path, length) 0 end
102
+ ##% self.umask(?Integer) -> Integer
103
+ def self.umask(umask = 0) 0 end
104
+ ##% self.utime(Time or Integer, Time or Integer, *String) -> Integer
105
+ def self.utime(atime, mtime, *filename) 0 end
106
+ ##% self.writable?(String or IO) -> Boolean
107
+ def self.writable?(path) BOOLEAN end
108
+ ##% self.writable_real?(String or IO) -> Boolean
109
+ def self.writable_real?(path) BOOLEAN end
110
+ ##% self.zero?(String or IO) -> Boolean
111
+ def self.zero?(path) BOOLEAN end
112
+
113
+ ##% atime() -> Time
114
+ def atime() Time.new end
115
+ ##% chmod(Integer) -> Integer
116
+ def chmod(mode) 0 end
117
+ ##% chown(Integer, Integer) -> Integer
118
+ def chown(owner, group) 0 end
119
+ ##% ctime() -> Time
120
+ def ctime() Time.new end
121
+ ##% flock(Integer) -> Integer or FalseClass
122
+ def flock(operation) 0 || false end
123
+ ##% lstat() -> File::Stat
124
+ def lstat() File::Stat.new('') end
125
+ ##% mtime() -> Time
126
+ def mtime() Time.new end
127
+ ##% path() -> String
128
+ def path() '' end
129
+ ##% truncate(Integer) -> Integer
130
+ def truncate(length) 0 end
131
+
132
+
133
+ ##% self.for_fd(Integer, ?a) -> IO
134
+ def self.for_fd(fd, mode = 'r') IO.new(0) end
135
+ ##% self.open(Integer, ?a) -> IO
136
+ ##% self.open(Integer, ?a) {IO -> b} -> b
137
+ def self.open(fd, mode = 'r') IO.new(0) end
138
+ ##% self.foreach(String, ?String) {String -> ?} -> nil
139
+ ##% self.foreach(String, ?String) -> Enumerator<nil, String>
140
+ def self.foreach(path, rs = $/) yield ''; nil end
141
+ ##% self.pipe() -> (IO, IO)
142
+ def self.pipe() [IO.new(0), IO.new(0)] end
143
+ ##% self.popen(String, ?a) -> IO
144
+ ##% self.popen(String, ?a) {IO -> b} -> b
145
+ def self.popen(command, mode = 'r') IO.new(0) end
146
+ ##% self.read(String, ?Integer, ?Integer) -> String
147
+ def self.read(path, length = nil, offset = 0) '' end
148
+ ##% self.readlines(String, ?String) -> Array<String>
149
+ def self.readlines(path, rs = $/) [''] end
150
+ ##% self.select(Array<IO>, ?Array<IO>, ?Array<IO>, ?Integer) -> (Array<IO>, Array<IO>, Array<IO>)
151
+ def self.select(reads, writes = [], excepts = [], timeout = nil) [[IO.new(0)], [IO.new(0)], [IO.new(0)]] end
152
+ ##% self.sysopen(String, ?a, ?Integer) -> Integer
153
+ def self.sysopen(path, mode = 'r', perm = 0666) 0 end
154
+
155
+ ##% "<<"(a) -> self
156
+ def <<(object) self end
157
+ ##% binmode() -> self
158
+ def binmode() self end
159
+ ##% bytes() -> Enumerator<self, Fixnum>
160
+ def bytes() Enumerator.new end
161
+ ##% each_char() {Fixnum -> ?} -> self
162
+ ##% each_char() -> Enumerator<self, Fixnum>
163
+ def each_char() yield 0; self end
164
+ alias :chars :each_char
165
+ ##% clone() -> IO
166
+ def clone() self end
167
+ alias :dup :clone
168
+ ##% close() -> nil
169
+ def close() end
170
+ ##% close_read() -> nil
171
+ def close_read() end
172
+ ##% close_write() -> nil
173
+ def close_write() end
174
+ ##% closed?() -> Boolean
175
+ def closed?() BOOLEAN end
176
+ ##% each(?String) {String -> ?} -> self
177
+ ##% each(?String) -> Enumerator<self, String>
178
+ def each(rs = $/) yield ''; self end
179
+ alias :each_line :each
180
+ ##% each_byte() {Fixnum -> ?} -> self
181
+ ##% each_byte() -> Enumerator<self, Fixnum>
182
+ def each_byte() yield 0; self end
183
+ ##% eof() -> Boolean
184
+ def eof() BOOLEAN end
185
+ alias :eof? :eof
186
+ ##% fcntl(Integer, ?(Integer or String or Boolean)) -> Integer
187
+ def fcntl(cmd, arg = 0) 0 end
188
+ ##% fileno() -> Integer
189
+ def fileno() 0 end
190
+ alias :to_i :fileno
191
+ ##% flush() -> self
192
+ def flush() self end
193
+ ##% fsync() -> Integer
194
+ def fsync() 0 end
195
+ ##% getbyte() -> Fixnum
196
+ def getbyte() 0 end
197
+ ##% getc() -> Fixnum
198
+ def getc() 0 end
199
+ ##% gets(?String) -> String
200
+ def gets(rs = $/) '' end
201
+ ##% ioctl(Integer, ?(Integer or String or Boolean)) -> Integer
202
+ def ioctl(cmd, arg = 0) 0 end
203
+ ##% isatty() -> Boolean
204
+ def isatty() BOOLEAN end
205
+ alias :tty? :isatty
206
+ ##% lineno() -> Integer
207
+ def lineno() 0 end
208
+ ##% lineno=(Integer) -> nil
209
+ def lineno=(number) end
210
+ ##% lines(?String) -> Enumerator<self, String>
211
+ def lines(rs = $/) Enumerator.new end
212
+ ##% pid() -> Integer
213
+ def pid() 0 end
214
+ ##% pos() -> Integer
215
+ alias :tell :pos
216
+ ##% pos=(Integer) -> Integer
217
+ def pos=(n) end
218
+ ##% print(*a) -> nil
219
+ def print(*arg) end
220
+ ##% printf(String, *a) -> nil
221
+ def printf(format, *arg) end
222
+ ##% putc<c | c <= Integer>(c) -> c
223
+ def putc(ch) ch end
224
+ ##% puts(*a) -> nil
225
+ def puts(*obj) end
226
+ ##% read(?Integer, ?String) -> String
227
+ def read(length = nil, outbuf = '') '' end
228
+ ##% read_nonblock(Integer, ?String) -> String
229
+ def read_nonblock(maxlen, outbuf = '') '' end
230
+ ##% readbyte() -> Fixnum
231
+ def readbyte() 0 end
232
+ ##% readchar() -> Fixnum
233
+ def readchar() 0 end
234
+ ##% readline(?String) -> String
235
+ def readline(rs = $/) '' end
236
+ ##% readlines(?String) -> Array<String>
237
+ def readlines(rs = $/) [''] end
238
+ ##% readpartial(?Integer, ?String) -> String
239
+ def readpartial(maxlen, outbuf = '') '' end
240
+ ##% reopen(IO) -> self
241
+ ##% reopen(String, ?a) -> self
242
+ def reopen(*) self end
243
+ ##% rewind() -> Integer
244
+ def rewind() 0 end
245
+ ##% seek(Integer, ?Fixnum) -> Fixnum
246
+ def seek(offset, whence = IO::SEEK_SET) 0 end
247
+ ##% stat() -> File::Stat
248
+ def stat() File::Stat.new('') end
249
+ ##% sync() -> Boolean
250
+ def sync() BOOLEAN end
251
+ ##% sync=(Boolean) -> Boolean
252
+ def sync=(newstate) newstate end
253
+ ##% sysread(Integer, ?String) -> String
254
+ def sysread(maxlen, outbuf = '') '' end
255
+ ##% sysseek(Integer, ?Fixnum) -> Fixnum
256
+ def sysseek(offset, whence = IO::SEEK_SET) 0 end
257
+ ##% syswrite(a) -> Integer
258
+ def syswrite(string) 0 end
259
+ ##% to_io() -> self
260
+ def to_io() self end
261
+ ##% ungetc(a) -> nil
262
+ def ungetc(char) end
263
+
264
+ ##% write(a) -> Integer
265
+ def write(str)
266
+ 0
267
+ end
268
+
269
+ ##% write_nonblock(a) -> Integer
270
+ def write_nonblock(str) 0 end
271
+
272
+ def open
273
+ @tmpfile.close if @tmpfile
274
+ @tmpfile = File.open(@tmpname, @mode, @opts)
275
+ @data[1] = @tmpfile
276
+ __setobj__(@tmpfile)
277
+ end
278
+
279
+ def _close # :nodoc:
280
+ begin
281
+ @tmpfile.close if @tmpfile
282
+ ensure
283
+ @tmpfile = nil
284
+ @data[1] = nil if @data
285
+ end
286
+ end
287
+ protected :_close
288
+
289
+ def close(unlink_now=false)
290
+ if unlink_now
291
+ close!
292
+ else
293
+ _close
294
+ end
295
+ end
296
+
297
+ def close!
298
+ _close
299
+ unlink
300
+ end
301
+
302
+ def unlink
303
+ return unless @tmpname
304
+ begin
305
+ File.unlink(@tmpname)
306
+ rescue Errno::ENOENT
307
+ rescue Errno::EACCES
308
+ return
309
+ end
310
+
311
+ @data[0] = @data[1] = nil
312
+ @tmpname = nil
313
+ ObjectSpace.undefine_finalizer(self)
314
+ end
315
+ alias delete unlink
316
+
317
+ def path
318
+ @tmpname
319
+ end
320
+
321
+ def size
322
+ if @tmpfile
323
+ @tmpfile.flush
324
+ @tmpfile.stat.size
325
+ elsif @tmpname
326
+ File.size(@tmpname)
327
+ else
328
+ 0
329
+ end
330
+ end
331
+ alias length size
332
+
333
+ def inspect
334
+ "#<#{self.class}:#{path}>"
335
+ end
336
+
337
+ class Remover
338
+ def initialize(data)
339
+ @pid = $$
340
+ @data = data
341
+ end
342
+
343
+ def call(*args)
344
+ return if @pid != $$
345
+
346
+ path, tmpfile = *@data
347
+
348
+ STDERR.print "removing ", path, "..." if $DEBUG
349
+
350
+ tmpfile.close if tmpfile
351
+
352
+ if path
353
+ begin
354
+ File.unlink(path)
355
+ rescue Errno::ENOENT
356
+ end
357
+ end
358
+
359
+ STDERR.print "done\n" if $DEBUG
360
+ end
361
+ end
362
+
363
+
364
+ class << self
365
+ def open(*args)
366
+ tempfile = new(*args)
367
+
368
+ if block_given?
369
+ begin
370
+ yield(tempfile)
371
+ ensure
372
+ tempfile.close
373
+ end
374
+ else
375
+ tempfile
376
+ end
377
+ end
378
+ end
379
+
380
+ end
381
+
382
+ def Tempfile.create(basename, *rest)
383
+ tmpfile = nil
384
+ Dir::Tmpname.create(basename, *rest) do |tmpname, n, opts|
385
+ mode = File::RDWR|File::CREAT|File::EXCL
386
+ perm = 0600
387
+ if opts
388
+ mode |= opts.delete(:mode) || 0
389
+ opts[:perm] = perm
390
+ perm = nil
391
+ else
392
+ opts = perm
393
+ end
394
+ tmpfile = File.open(tmpname, mode, opts)
395
+ end
396
+ if block_given?
397
+ begin
398
+ yield tmpfile
399
+ ensure
400
+ tmpfile.close if !tmpfile.closed?
401
+ File.unlink tmpfile
402
+ end
403
+ else
404
+ tmpfile
405
+ end
406
+ end
@@ -0,0 +1,130 @@
1
+ #
2
+ # tmpdir - retrieve temporary directory path
3
+ #
4
+ # $Id: tmpdir.rb 40825 2013-05-19 03:10:21Z ktsj $
5
+ #
6
+
7
+ require_relative './fileutils'
8
+
9
+ class Dir
10
+
11
+ @@systmpdir ||= '/tmp'
12
+
13
+ def Dir::tmpdir
14
+ "/tmp"
15
+ end
16
+
17
+ # Dir.mktmpdir creates a temporary directory.
18
+ #
19
+ # The directory is created with 0700 permission.
20
+ # Application should not change the permission to make the temporary directory accessible from other users.
21
+ #
22
+ # The prefix and suffix of the name of the directory is specified by
23
+ # the optional first argument, <i>prefix_suffix</i>.
24
+ # - If it is not specified or nil, "d" is used as the prefix and no suffix is used.
25
+ # - If it is a string, it is used as the prefix and no suffix is used.
26
+ # - If it is an array, first element is used as the prefix and second element is used as a suffix.
27
+ #
28
+ # Dir.mktmpdir {|dir| dir is ".../d..." }
29
+ # Dir.mktmpdir("foo") {|dir| dir is ".../foo..." }
30
+ # Dir.mktmpdir(["foo", "bar"]) {|dir| dir is ".../foo...bar" }
31
+ #
32
+ # The directory is created under Dir.tmpdir or
33
+ # the optional second argument <i>tmpdir</i> if non-nil value is given.
34
+ #
35
+ # Dir.mktmpdir {|dir| dir is "#{Dir.tmpdir}/d..." }
36
+ # Dir.mktmpdir(nil, "/var/tmp") {|dir| dir is "/var/tmp/d..." }
37
+ #
38
+ # If a block is given,
39
+ # it is yielded with the path of the directory.
40
+ # The directory and its contents are removed
41
+ # using FileUtils.remove_entry before Dir.mktmpdir returns.
42
+ # The value of the block is returned.
43
+ #
44
+ # Dir.mktmpdir {|dir|
45
+ # # use the directory...
46
+ # open("#{dir}/foo", "w") { ... }
47
+ # }
48
+ #
49
+ # If a block is not given,
50
+ # The path of the directory is returned.
51
+ # In this case, Dir.mktmpdir doesn't remove the directory.
52
+ #
53
+ # dir = Dir.mktmpdir
54
+ # begin
55
+ # # use the directory...
56
+ # open("#{dir}/foo", "w") { ... }
57
+ # ensure
58
+ # # remove the directory.
59
+ # FileUtils.remove_entry dir
60
+ # end
61
+ #
62
+ def Dir.mktmpdir(prefix_suffix=nil, *rest)
63
+ path = Tmpname.create(prefix_suffix || "d", *rest) {|n| mkdir(n, 0700)}
64
+ if block_given?
65
+ begin
66
+ yield path
67
+ ensure
68
+ stat = File.stat(File.dirname(path))
69
+ if stat.world_writable? and !stat.sticky?
70
+ raise ArgumentError, "parent directory is world writable but not sticky"
71
+ end
72
+ FileUtils.remove_entry path
73
+ end
74
+ else
75
+ path
76
+ end
77
+ end
78
+
79
+ module Tmpname # :nodoc:
80
+ module_function
81
+
82
+ def tmpdir
83
+ Dir.tmpdir
84
+ end
85
+
86
+ def make_tmpname(prefix_suffix, n)
87
+ case prefix_suffix
88
+ when String
89
+ prefix = prefix_suffix
90
+ suffix = ""
91
+ when Array
92
+ prefix = prefix_suffix[0]
93
+ suffix = prefix_suffix[1]
94
+ else
95
+ raise ArgumentError, "unexpected prefix_suffix: #{prefix_suffix.inspect}"
96
+ end
97
+ t = Time.now.strftime("%Y%m%d")
98
+ path = "#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
99
+ path << "-#{n}" if n
100
+ path << suffix
101
+ end
102
+
103
+ def create(basename, *rest)
104
+ if opts = Hash.try_convert(rest[-1])
105
+ opts = opts.dup if rest.pop.equal?(opts)
106
+ max_try = opts.delete(:max_try)
107
+ opts = [opts]
108
+ else
109
+ opts = []
110
+ end
111
+ tmpdir, = *rest
112
+ if $SAFE > 0 and tmpdir.tainted?
113
+ tmpdir = '/tmp'
114
+ else
115
+ tmpdir ||= tmpdir()
116
+ end
117
+ n = nil
118
+ begin
119
+ path = File.join(tmpdir, make_tmpname(basename, n))
120
+ yield(path, n, *opts)
121
+ rescue Errno::EEXIST
122
+ n ||= 0
123
+ n += 1
124
+ retry if !max_try or n < max_try
125
+ raise "cannot generate temporary name using `#{basename}' under `#{tmpdir}'"
126
+ end
127
+ path
128
+ end
129
+ end
130
+ end