Index: runtime/bin/socket_stream.dart |
diff --git a/runtime/bin/socket_stream.dart b/runtime/bin/socket_stream.dart |
index 195186b6b035ce76cdc045517e55a148cab9e42f..af8c8aaa594664b6e6cf537bea6f8701ef21fe41 100644 |
--- a/runtime/bin/socket_stream.dart |
+++ b/runtime/bin/socket_stream.dart |
@@ -107,12 +107,13 @@ class SocketOutputStream implements OutputStream { |
_socket.errorHandler = _errorHandler; |
} |
- bool write(List<int> buffer) { |
- return _write(buffer, 0, buffer.length, false); |
+ bool write(List<int> buffer, [bool copyBuffer = true]) { |
+ return _write(buffer, 0, buffer.length, copyBuffer); |
} |
bool writeFrom(List<int> buffer, [int offset = 0, int len]) { |
- return _write(buffer, offset, (len == null) ? buffer.length : len, true); |
+ return _write( |
+ buffer, offset, (len == null) ? buffer.length - offset : len, true); |
} |
void close() { |
@@ -149,7 +150,6 @@ class SocketOutputStream implements OutputStream { |
bool _write(List<int> buffer, int offset, int len, bool copyBuffer) { |
if (_closing || _closed) throw new StreamException("Stream closed"); |
- if (len == null) len = buffer.length; |
int bytesWritten = 0; |
if (_pendingWrites.isEmpty()) { |
// If nothing is buffered write as much as possible and buffer |
@@ -159,12 +159,14 @@ class SocketOutputStream implements OutputStream { |
} |
// Place remaining data on the pending writes queue. |
+ int notWrittenOffset = offset + bytesWritten; |
if (copyBuffer) { |
List<int> newBuffer = |
- buffer.getRange(offset + bytesWritten, buffer.length); |
+ buffer.getRange(notWrittenOffset, len - bytesWritten); |
_pendingWrites.add(newBuffer); |
} else { |
- _pendingWrites.add(buffer, bytesWritten); |
+ assert(offset + len = buffer.length); |
+ _pendingWrites.add(buffer, notWrittenOffset); |
} |
} |