Module: ICU::Lib::Util

Defined in:
lib/ffi-icu/lib/util.rb

Class Method Summary collapse

Class Method Details

.read_null_terminated_array_of_strings(pointer) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
# File 'lib/ffi-icu/lib/util.rb', line 4

def self.read_null_terminated_array_of_strings(pointer)
  offset = 0
  result = []

  until (ptr = pointer.get_pointer(offset)).null?
    result << ptr.read_string
    offset += FFI::Pointer.size
  end

  result
end

.read_string_buffer(length) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/ffi-icu/lib/util.rb', line 16

def self.read_string_buffer(length)
  attempts = 0

  begin
    result = FFI::MemoryPointer.new(:char, length)
    Lib.check_error { |status| length = yield result, status }
  rescue BufferOverflowError
    attempts += 1
    retry if attempts < 2
    raise BufferOverflowError, "needed: #{length}"
  end

  result.read_string(length)
end

.read_uchar_buffer(length) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/ffi-icu/lib/util.rb', line 31

def self.read_uchar_buffer(length)
  attempts = 0

  begin
    result = UCharPointer.new(length)
    Lib.check_error { |status| length = yield result, status }
  rescue BufferOverflowError
    attempts += 1
    retry if attempts < 2
    raise BufferOverflowError, "needed: #{length}"
  end

  result.string(length)
end