xref: /haiku/src/apps/haikudepot/util/DataIOUtils.cpp (revision f290b766707b386d72e2eaadd35cc3d999405077)
1 /*
2  * Copyright 2018, Andrew Lindesay <apl@lindesay.co.nz>.
3  * All rights reserved. Distributed under the terms of the MIT License.
4  */
5 #include "DataIOUtils.h"
6 
7 
8 #define BUFFER_SIZE 1024
9 
10 
11 status_t
12 DataIOUtils::Copy(BDataIO* target, BDataIO* source, size_t size)
13 {
14 	status_t result = B_OK;
15 	uint8 buffer[BUFFER_SIZE];
16 
17 	while (size > 0 && result == B_OK) {
18 		size_t sizeToRead = size;
19 		size_t sizeRead = 0;
20 
21 		if (sizeToRead > BUFFER_SIZE)
22 			sizeToRead = BUFFER_SIZE;
23 
24 		result = source->ReadExactly(buffer, sizeToRead, &sizeRead);
25 
26 		if (result == B_OK)
27 			result = target->WriteExactly(buffer, sizeRead);
28 
29 		size -= sizeRead;
30 	}
31 
32 	return result;
33 }