This file is indexed.

/usr/lib/ruby/vendor_ruby/ffi-rzmq/poll_items.rb is in ruby-ffi-rzmq 2.0.4-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
require 'forwardable'
require 'ostruct'

module ZMQ
  class PollItems
    include Enumerable
    extend  Forwardable

    def_delegators :@pollables, :size, :empty?

    def initialize
      @pollables  = {}
      @item_size  = LibZMQ::PollItem.size
      @item_store = nil
    end

    def address
      clean
      @item_store
    end

    def get pollable
      return unless entry = @pollables[pollable]
      clean
      pointer = @item_store + (@item_size * entry.index)
      item = ZMQ::PollItem.from_pointer(pointer)
      item.pollable = pollable
      item
    end
    alias :[] :get

    def <<(poll_item)
      @dirty = true
      @pollables[poll_item.pollable] = OpenStruct.new(:index => size, :data => poll_item)
    end
    alias :push :<<

    def delete pollable
      if @pollables.delete(pollable)
        @dirty = true
        clean
        true
      else
        false
      end
    end

    def each &blk
      clean
      @pollables.each_key do |pollable|
        yield get(pollable)
      end
    end

    def inspect
      clean
      str = ""
      each { |item| str << "ptr [#{item[:socket]}], events [#{item[:events]}], revents [#{item[:revents]}], " }
      str.chop.chop
    end

    def to_s; inspect; end

    private

    # Allocate a contiguous chunk of memory and copy over the PollItem structs
    # to this block. Note that the old +@store+ value goes out of scope so when
    # it is garbage collected that native memory should be automatically freed.
    def clean
      if @dirty
        @item_store = FFI::MemoryPointer.new @item_size, size, true

        offset = 0
        @pollables.each_with_index do |(pollable, entry), index|
          entry.index = index
          LibC.memcpy(@item_store + offset, entry.data.pointer, @item_size)
          offset += @item_size
        end

        @dirty = false
      end
    end

  end
end