On 1 March 2011 19:58, Graham Whelan <[email protected]> wrote:
> On 1 March 2011 18:29, Jürg Billeter <[email protected]> wrote:
>> On Tue, 2011-03-01 at 18:21 +0000, Graham Whelan wrote:
>>> I'm trying to copy a file using GLib.InputStream and GLib.OutputStream
>>> but the copied file ends up corrupted.
>>>
>>> Sample code:
>>>
>>> uint8 buffer[4096];
>>> size_t read;
>>> while (true) {
>>> read = input.read (buffer);
>>> if (read > 0) {
>>> output.write (buffer);
>>
>> This should work with slicing:
>>
>> output.write (buffer[0:read]);
>>
>> Jürg
>>
>>
>
> Thanks for the quick response.
>
> I've just tried your suggestion with valac 0.11.5 and 0.11.6 but it
> doesn't work. Looking at the generated C code, Vala is still passing
> the full length of the array and not the length of the slice.
>
> So:
> output.write (buffer[0:read]);
>
> becomes:
> g_output_stream_write ((GOutputStream*) output, buffer + 0, (gsize)
> 4096, NULL, &_inner_error_);
>
> Graham
>
I've managed to get this to work by using a variable rather than
fixed-size array.
The sample code becomes:
uint8[] buffer = new uint8[4096];
size_t read;
while(true) {
read = input.read(buffer);
if (read > 0) {
output.write (buffer[0:read]);
} else {
break;
}
}
With a fixed-size array the slice operation doesn't work. Is this a bug?
Thanks for the help,
Graham
_______________________________________________
vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list