xref: /aosp_15_r20/system/extras/libfec/test/test_read.cpp (revision 288bf5226967eb3dac5cce6c939ccc2a7f2b4fe5)
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 Worker int 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