1*288bf522SAndroid Build Coastguard Worker /* 2*288bf522SAndroid Build Coastguard Worker * Copyright (C) 2015 The Android Open Source Project 3*288bf522SAndroid Build Coastguard Worker * 4*288bf522SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*288bf522SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*288bf522SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*288bf522SAndroid Build Coastguard Worker * 8*288bf522SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*288bf522SAndroid Build Coastguard Worker * 10*288bf522SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*288bf522SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*288bf522SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*288bf522SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*288bf522SAndroid Build Coastguard Worker * limitations under the License. 15*288bf522SAndroid Build Coastguard Worker */ 16*288bf522SAndroid Build Coastguard Worker 17*288bf522SAndroid Build Coastguard Worker #include <new> 18*288bf522SAndroid Build Coastguard Worker #include <memory> 19*288bf522SAndroid Build Coastguard Worker #include <fstream> 20*288bf522SAndroid Build Coastguard Worker #include <iostream> 21*288bf522SAndroid Build Coastguard Worker #include <fec/io.h> 22*288bf522SAndroid Build Coastguard Worker 23*288bf522SAndroid Build Coastguard Worker using namespace std; 24*288bf522SAndroid Build Coastguard Worker const unsigned bufsize = 2 * 1024 * FEC_BLOCKSIZE; 25*288bf522SAndroid Build Coastguard Worker main(int argc,char ** argv)26*288bf522SAndroid Build Coastguard Workerint main(int argc, char **argv) 27*288bf522SAndroid Build Coastguard Worker { 28*288bf522SAndroid Build Coastguard Worker if (argc != 3) { 29*288bf522SAndroid Build Coastguard Worker cerr << "usage: " << argv[0] << " input output" << endl; 30*288bf522SAndroid Build Coastguard Worker return 1; 31*288bf522SAndroid Build Coastguard Worker } 32*288bf522SAndroid Build Coastguard Worker 33*288bf522SAndroid Build Coastguard Worker unique_ptr<uint8_t[]> buffer(new (nothrow) uint8_t[bufsize]); 34*288bf522SAndroid Build Coastguard Worker 35*288bf522SAndroid Build Coastguard Worker if (!buffer) { 36*288bf522SAndroid Build Coastguard Worker cerr << "failed to allocate buffer" << endl; 37*288bf522SAndroid Build Coastguard Worker return 1; 38*288bf522SAndroid Build Coastguard Worker } 39*288bf522SAndroid Build Coastguard Worker 40*288bf522SAndroid Build Coastguard Worker fec::io input(argv[1]); 41*288bf522SAndroid Build Coastguard Worker 42*288bf522SAndroid Build Coastguard Worker if (!input) { 43*288bf522SAndroid Build Coastguard Worker return 1; 44*288bf522SAndroid Build Coastguard Worker } 45*288bf522SAndroid Build Coastguard Worker 46*288bf522SAndroid Build Coastguard Worker ofstream output(argv[2], ios::binary | ios::trunc); 47*288bf522SAndroid Build Coastguard Worker 48*288bf522SAndroid Build Coastguard Worker if (!output) { 49*288bf522SAndroid Build Coastguard Worker cerr << "failed to open " << argv[2] << endl; 50*288bf522SAndroid Build Coastguard Worker return 1; 51*288bf522SAndroid Build Coastguard Worker } 52*288bf522SAndroid Build Coastguard Worker 53*288bf522SAndroid Build Coastguard Worker ssize_t count; 54*288bf522SAndroid Build Coastguard Worker 55*288bf522SAndroid Build Coastguard Worker do { 56*288bf522SAndroid Build Coastguard Worker count = input.read(buffer.get(), bufsize); 57*288bf522SAndroid Build Coastguard Worker 58*288bf522SAndroid Build Coastguard Worker if (count == -1) { 59*288bf522SAndroid Build Coastguard Worker return 1; 60*288bf522SAndroid Build Coastguard Worker } else if (count > 0) { 61*288bf522SAndroid Build Coastguard Worker output.write(reinterpret_cast<const char *>(buffer.get()), count); 62*288bf522SAndroid Build Coastguard Worker 63*288bf522SAndroid Build Coastguard Worker if (!output) { 64*288bf522SAndroid Build Coastguard Worker cerr << "write" << endl; 65*288bf522SAndroid Build Coastguard Worker return 1; 66*288bf522SAndroid Build Coastguard Worker } 67*288bf522SAndroid Build Coastguard Worker } 68*288bf522SAndroid Build Coastguard Worker } while (count > 0); 69*288bf522SAndroid Build Coastguard Worker 70*288bf522SAndroid Build Coastguard Worker return 0; 71*288bf522SAndroid Build Coastguard Worker } 72