1/* 2 * Copyright 2018-2023, Andrew Lindesay <apl@lindesay.co.nz>. 3 * All rights reserved. Distributed under the terms of the MIT License. 4 */ 5#ifndef DATA_IO_UTILS_H 6#define DATA_IO_UTILS_H 7 8 9#include <DataIO.h> 10 11 12class DataIOUtils { 13public: 14 static status_t CopyAll(BDataIO* target, BDataIO* source); 15}; 16 17 18/*! This is a data source (read only) that is restricted to a certain size. An 19 example of where this is used is with reading out the data from a tar 20 stream. The tar logic knows how long the data is and so is able to provide 21 a client this constrained view of the data that is only able to read a 22 constrained quantity of data from the delegate data source. This prevents 23 overflow reads from the tar file. 24*/ 25 26class ConstraintedDataIO : public BDataIO { 27public: 28 ConstraintedDataIO(BDataIO* delegate, 29 size_t limit); 30 virtual ~ConstraintedDataIO(); 31 32 virtual ssize_t Read(void* buffer, size_t size); 33 virtual ssize_t Write(const void* buffer, size_t size); 34 35 virtual status_t Flush(); 36 37private: 38 BDataIO* fDelegate; 39 size_t fLimit; 40}; 41 42 43class Base64DecodingDataIO : public BDataIO { 44public: 45 Base64DecodingDataIO(BDataIO* delegate, 46 char char62 = '+', char char63 = '/'); 47 virtual ~Base64DecodingDataIO(); 48 49 virtual ssize_t Read(void* buffer, size_t size); 50 virtual ssize_t Write(const void* buffer, size_t size); 51 52 virtual status_t Flush(); 53 54private: 55 status_t _ReadSingleByte(void* buffer); 56 status_t _CharToInt(uint8 ch, uint8* value); 57 58private: 59 BDataIO* fDelegate; 60 char fChar62; 61 char fChar63; 62 63 uint8 fNextByteAssembly; 64 uint8 fNextByteAssemblyBits; 65}; 66 67 68#endif // DATA_IO_UTILS_H 69