! Fixes all tests
Some code has been removed. Version control is not synonymous with code storage - if you're not using it now, you probably don't have working tests and the code will be buggy anyway. Write it when you need it.
This commit is contained in:
parent
75f37c58b9
commit
1509aa8ef6
16 changed files with 164 additions and 166 deletions
|
@ -2,14 +2,23 @@ module Net
|
|||
class LDAP
|
||||
module Extensions
|
||||
module Fixnum
|
||||
#
|
||||
# to_ber
|
||||
#
|
||||
def to_ber
|
||||
"\002" + to_ber_internal
|
||||
end
|
||||
|
||||
#
|
||||
# to_ber_enumerated
|
||||
#
|
||||
def to_ber_enumerated
|
||||
"\012" + to_ber_internal
|
||||
end
|
||||
|
||||
#
|
||||
# to_ber_length_encoding
|
||||
#
|
||||
def to_ber_length_encoding
|
||||
if self <= 127
|
||||
[self].pack('C')
|
||||
|
@ -29,21 +38,24 @@ module Net
|
|||
#--
|
||||
# Called internally to BER-encode the length and content bytes of a Fixnum.
|
||||
# The caller will prepend the tag byte.
|
||||
MAX_SIZE = 0.size
|
||||
def to_ber_internal
|
||||
# PLEASE optimize this code path. It's awfully ugly and probably slow.
|
||||
# It also doesn't understand negative numbers yet.
|
||||
raise Net::BER::BerError.new( "range error in fixnum" ) unless self >= 0
|
||||
z = [self].pack("N")
|
||||
zlen = if self < 0x80
|
||||
1
|
||||
elsif self < 0x8000
|
||||
2
|
||||
elsif self < 0x800000
|
||||
3
|
||||
else
|
||||
4
|
||||
size = MAX_SIZE
|
||||
while size>1
|
||||
break if (self & (0xff << (size-1)*8)) > 0
|
||||
size -= 1
|
||||
end
|
||||
[zlen].pack("C") + z[0-zlen,zlen]
|
||||
|
||||
result = [size]
|
||||
|
||||
while size>0
|
||||
# right shift size-1 bytes, mask with 0xff
|
||||
result << ((self >> ((size-1)*8)) & 0xff)
|
||||
|
||||
size -= 1
|
||||
end
|
||||
|
||||
result.pack('C*')
|
||||
end
|
||||
private :to_ber_internal
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue