Sha256: 19366dc4552e072300f39b0ebdeaeebfea9594cdb9e9941c8b747c5dfe3a1536

Contents?: true

Size: 1.1 KB

Versions: 8

Compression:

Stored size: 1.1 KB

Contents

module Find

  def find(*paths)
    block_given? or return enum_for(__method__, *paths)

    fs_encoding = Encoding.find("filesystem")

    paths.collect!{|d| raise Errno::ENOENT unless File.exist?(d); d.dup}.each do |path|
      enc = path.encoding == Encoding::US_ASCII ? fs_encoding : path.encoding
      ps = [path]
      while file = ps.shift
        catch(:prune) do
          yield file.dup.taint
          begin
            s = File.lstat(file)
          rescue Errno::ENOENT, Errno::EACCES, Errno::ENOTDIR, Errno::ELOOP, Errno::ENAMETOOLONG
            next
          end
          if s.directory? then
            begin
              fs = Dir.entries(file, encoding: enc)
            rescue Errno::ENOENT, Errno::EACCES, Errno::ENOTDIR, Errno::ELOOP, Errno::ENAMETOOLONG
              next
            end
            fs.sort!
            fs.reverse_each {|f|
              next if f == "." or f == ".."
              f = File.join(file, f)
              ps.unshift f.untaint
            }
          end
        end
      end
    end
    nil
  end

  def prune
    throw :prune
  end

  module_function :find, :prune
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
rsense-core-0.6.6 stubs/1.8/find.rb
rsense-core-0.6.5 stubs/1.8/find.rb
rsense-core-0.6.4 stubs/1.8/find.rb
rsense-core-0.6.2 stubs/1.8/find.rb
rsense-core-0.6.1 stubs/1.8/find.rb
rsense-core-0.6.0 stubs/1.8/find.rb
rsense-core-0.5.9 stubs/1.8/find.rb
rsense-core-0.5.8 stubs/1.8/find.rb