Sha256: 7bddb53b6b17e0ee608f22489dd85e6addfbd692518c13c8a96363465c3f6c38
Contents?: true
Size: 1.35 KB
Versions: 1
Compression:
Stored size: 1.35 KB
Contents
# frozen_string_literal: true module Idnx module Lib extend FFI::Library if FFI::Platform.mac? ffi_lib ["libidn2", "libidn2.0"] else ffi_lib ["libidn2.so", "libidn2.so.0"] end attach_function :idn2_check_version, [:string], :string VERSION = idn2_check_version(nil) IDN2_OK = 0 IDN2_NFC_INPUT = 1 IDN2_TRANSITIONAL = 4 IDN2_NONTRANSITIONAL = 8 FLAGS = if Gem::Version.new(VERSION) >= Gem::Version.new("0.14.0") IDN2_NFC_INPUT | IDN2_NONTRANSITIONAL else IDN2_NFC_INPUT end attach_function :idn2_lookup_ul, [:string, :pointer, :int], :int attach_function :idn2_strerror, [:int], :string attach_function :idn2_free, [:pointer], :void module_function def lookup(hostname) string_ptr = FFI::MemoryPointer.new(:pointer) result = idn2_lookup_ul(hostname, string_ptr, FLAGS) if result != IDN2_OK result = idn2_lookup_ul(hostname, string_ptr, IDN2_TRANSITIONAL) end if result != IDN2_OK string_ptr.free raise Error, "Failed to convert \"#{hostname}\" to ascii; (error: #{idn2_strerror(result)})" end ptr = string_ptr.read_pointer raise Error, "Failed to read \"#{hostname}\" to ascii" if ptr.null? ascii = ptr.read_string idn2_free(ptr) string_ptr.free ascii end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
idnx-0.0.1 | lib/idnx/idn2.rb |