Changeset 331 for EcnlProtoTool/trunk/mrbgems/mruby-io/mrblib/io.rb
- Timestamp:
- Jan 21, 2018, 12:10:09 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/mrbgems/mruby-io/mrblib/io.rb
r321 r331 124 124 str = string.is_a?(String) ? string : string.to_s 125 125 return str.size unless str.size > 0 126 126 if 0 < @buf.length 127 # reset real pos ignore buf 128 seek(pos, SEEK_SET) 129 end 127 130 len = syswrite(str) 128 if len != -1 129 @pos += len 130 return len 131 end 132 133 raise IOError 131 len 134 132 end 135 133 … … 152 150 def pos 153 151 raise IOError if closed? 154 @pos152 sysseek(0, SEEK_CUR) - @buf.length 155 153 end 156 154 alias_method :tell, :pos … … 166 164 def seek(i, whence = SEEK_SET) 167 165 raise IOError if closed? 168 @pos =sysseek(i, whence)166 sysseek(i, whence) 169 167 @buf = '' 170 168 0 … … 178 176 def ungetc(substr) 179 177 raise TypeError.new "expect String, got #{substr.class}" unless substr.is_a?(String) 180 @pos -= substr.size181 178 if @buf.empty? 182 179 @buf = substr.dup … … 187 184 end 188 185 189 def read(length = nil )186 def read(length = nil, outbuf = "") 190 187 unless length.nil? 191 188 unless length.is_a? Fixnum … … 201 198 202 199 array = [] 203 start_pos = @pos204 200 while 1 205 201 begin 206 202 _read_buf 207 rescue EOFError => e203 rescue EOFError 208 204 array = nil if array.empty? and (not length.nil?) and length != 0 209 205 break 210 206 end 211 207 212 if length && (@pos - start_pos + @buf.size) >= length213 len = length - (@pos - start_pos)214 array.push @buf[0, len]215 @ pos += len216 @buf = @buf[len, @buf.size - len]217 break 208 if length 209 consume = (length <= @buf.size) ? length : @buf.size 210 array.push @buf[0, consume] 211 @buf = @buf[consume, @buf.size - consume] 212 length -= consume 213 break if length == 0 218 214 else 219 215 array.push @buf 220 @pos += @buf.size221 216 @buf = '' 222 217 end 223 218 end 224 219 225 array && array.join 220 if array.nil? 221 outbuf.replace("") 222 nil 223 else 224 outbuf.replace(array.join) 225 end 226 226 end 227 227 … … 246 246 247 247 array = [] 248 start_pos = @pos249 248 while 1 250 249 begin 251 250 _read_buf 252 rescue EOFError => e251 rescue EOFError 253 252 array = nil if array.empty? 254 253 break 255 254 end 256 255 257 if limit && (@pos - start_pos + @buf.size) >= limit 258 len = limit - (@pos - start_pos) 259 array.push @buf[0, len] 260 @pos += len 261 @buf = @buf[len, @buf.size - len] 256 if limit && limit <= @buf.size 257 array.push @buf[0, limit] 258 @buf = @buf[limit, @buf.size - limit] 262 259 break 263 260 elsif idx = @buf.index(rs) 264 261 len = idx + rs.size 265 262 array.push @buf[0, len] 266 @pos += len267 263 @buf = @buf[len, @buf.size - len] 268 264 break 269 265 else 270 266 array.push @buf 271 @pos += @buf.size272 267 @buf = '' 273 268 end … … 282 277 begin 283 278 readline(*args) 284 rescue EOFError => e279 rescue EOFError 285 280 nil 286 281 end … … 291 286 c = @buf[0] 292 287 @buf = @buf[1, @buf.size] 293 @pos += 1294 288 c 295 289 end … … 298 292 begin 299 293 readchar 300 rescue EOFError => e294 rescue EOFError 301 295 nil 302 296 end
Note:
See TracChangeset
for help on using the changeset viewer.