var got_delimiter = false
loop
- var i = istream.read_char
- var c: Char
+ var c = istream.read_char
- if i < 0 then
+ if c == null then
if got_row then
row.add value.to_s
return row
return null
end
end
- c = i.ascii
if c == format.delimiter then
if got_delimiter and unescaped == 0 then
end
# Read all bytes until the delimiter.
loop
- i = istream.read_char
- assert not_eof: i >= 0 else
+ c = istream.read_char
+ assert not_eof: c != null else
sys.stderr.write "Unexpected end of file before the end of a delimited value.\n"
end
- c = i.ascii
if c == format.delimiter then break
value.add c
end
locator.column_number += 1
end
- last_char = input.read_char
- if last_char < 0 then
+ var s = input.read_byte
+ if s == null then
+ last_char = -1
return
end
+ last_char = s
# XML 1.0 end-of-line handling
# Note: Regardless the XML version, any EOL defined by the
# recommandation MUST be reported as a single LINE FEED.
if was_cr and last_char == '\n'.ascii then
# EOL already reported. => Skip this byte.
- last_char = input.read_char
+ s = input.read_byte
+ if s == null then s = -1
+ last_char = s
end
was_cr = last_char == '\r'.ascii
if was_cr then
private fun unpad_message do
var fin = false
while not fin do
- var fst_char = client.read_char
- var snd_char = client.read_char
+ var fst_byte = client.read_byte
+ var snd_byte = client.read_byte
+ if fst_byte == null or snd_byte == null then
+ last_error = new IOError("Error: bad frame")
+ client.close
+ return
+ end
# First byte in msg is formatted this way :
# |(fin - 1bit)|(RSV1 - 1bit)|(RSV2 - 1bit)|(RSV3 - 1bit)|(opcode - 4bits)
# fin = Flag indicating if current frame is the last one
# %x9 denotes a ping
# %xA denotes a pong
# %xB-F are reserved for further control frames
- var fin_flag = fst_char.bin_and(128)
+ var fin_flag = fst_byte.bin_and(128)
if fin_flag != 0 then fin = true
- var opcode = fst_char.bin_and(15)
+ var opcode = fst_byte.bin_and(15)
if opcode == 9 then
_buffer.add(138.ascii)
_buffer.add('\0')
# |(mask - 1bit)|(payload length - 7 bits)
# As specified, if the payload length is 126 or 127
# The next 16 or 64 bits contain an extended payload length
- var mask_flag = snd_char.bin_and(128)
- var len = snd_char.bin_and(127)
+ var mask_flag = snd_byte.bin_and(128)
+ var len = snd_byte.bin_and(127)
var payload_ext_len = 0
if len == 126 then
- payload_ext_len = client.read_char.lshift(8)
- payload_ext_len += client.read_char
+ var tmp = client.read(2)
+ if tmp.length != 2 then
+ last_error = new IOError("Error: received interrupted frame")
+ client.close
+ return
+ end
+ payload_ext_len = tmp[1].ascii + tmp[0].ascii.lshift(8)
else if len == 127 then
# 64 bits for length are not supported,
# only the last 32 will be interpreted as a Nit Integer
- for i in [0..4[ do client.read_char
- payload_ext_len = client.read_char.lshift(24)
- payload_ext_len += client.read_char.lshift(16)
- payload_ext_len += client.read_char.lshift(8)
- payload_ext_len += client.read_char
+ var tmp = client.read(8)
+ if tmp.length != 8 then
+ last_error = new IOError("Error: received interrupted frame")
+ client.close
+ return
+ end
+ for pos in [0 .. tmp.length[ do
+ var i = tmp[pos].ascii
+ payload_ext_len += i.lshift(8 * (7 - pos))
+ end
end
if mask_flag != 0 then
if payload_ext_len != 0 then