int Read(byte[] buffer, int offset, int count) { //We have to use ReceiveMessage rather than read for fds if (Connection.SupportsUnixFileDescriptors && stream is DBus.Unix.UnixStream) { int read = 0; if (message == null) { message = ((Unix.UnixStream)stream).ReceiveMessage(); pos = 0; } //TODO: clean this up into do-while if (message != null) { while (pos < message.Read && read < count) { buffer [offset + read] = message.Message [pos]; read++; pos++; } while (read < count) { message = ((Unix.UnixStream)stream).ReceiveMessage(); pos = 0; if (message != null && message.Read >= 0) { while (pos < message.Read && read < count) { buffer [offset + read] = message.Message [pos]; read++; pos++; } } else { break; } } } return(read); } else { System.Console.WriteLine("Read(" + offset + "," + count + ")"); int read = 0; while (read < count) { int nread = stream.Read(buffer, offset + read, count - read); if (nread == 0) { break; } read += nread; } if (read > count) { throw new Exception(); } return(read); } }
int Read (byte[] buffer, int offset, int count) { //We have to use ReceiveMessage rather than read for fds if (Connection.SupportsUnixFileDescriptors && stream is DBus.Unix.UnixStream) { int read = 0; if (message == null) { message = ((Unix.UnixStream)stream).ReceiveMessage (); pos = 0; } //TODO: clean this up into do-while if (message != null) { while (pos < message.Read && read < count) { buffer [offset + read] = message.Message [pos]; read++; pos++; } while (read < count) { message = ((Unix.UnixStream)stream).ReceiveMessage (); pos = 0; if (message != null && message.Read >= 0) { while (pos < message.Read && read < count) { buffer [offset + read] = message.Message [pos]; read++; pos++; } } else { break; } } } return read; } else { System.Console.WriteLine ("Read(" + offset + "," + count + ")"); int read = 0; while (read < count) { int nread = stream.Read (buffer, offset + read, count - read); if (nread == 0) break; read += nread; } if (read > count) throw new Exception (); return read; } }