1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /*
18  * Read configuration files in the OTA package to determine which files, if any, will trigger errors.
19  *
20  * OTA packages can be modified to trigger errors by adding a top-level
21  * directory called .libotafault, which may optionally contain up to three
22  * files called READ, WRITE, and FSYNC. Each one of these optional files
23  * contains the name of a single file on the device disk which will cause
24  * an IO error on the first call of the appropriate I/O action to that file.
25  *
26  * Example:
27  * ota.zip
28  *   <normal package contents>
29  *   .libotafault
30  *     WRITE
31  *
32  * If the contents of the file WRITE were /system/build.prop, the first write
33  * action to /system/build.prop would fail with EIO. Note that READ and
34  * FSYNC files are absent, so these actions will not cause an error.
35  */
36 
37 #ifndef _UPDATER_OTA_IO_CFG_H_
38 #define _UPDATER_OTA_IO_CFG_H_
39 
40 #include <string>
41 
42 #include <stdbool.h>
43 
44 #include "minzip/Zip.h"
45 
46 #define OTAIO_BASE_DIR ".libotafault"
47 #define OTAIO_READ "READ"
48 #define OTAIO_WRITE "WRITE"
49 #define OTAIO_FSYNC "FSYNC"
50 #define OTAIO_CACHE "CACHE"
51 
52 /*
53  * Initialize libotafault by providing a reference to the OTA package.
54  */
55 void ota_io_init(ZipArchive* za);
56 
57 /*
58  * Return true if a config file is present for the given IO type.
59  */
60 bool should_fault_inject(const char* io_type);
61 
62 /*
63  * Return true if an EIO should occur on the next hit to /cache/saved.file
64  * instead of the next hit to the specified file.
65  */
66 bool should_hit_cache();
67 
68 /*
69  * Return the name of the file that should cause an error for the
70  * given IO type.
71  */
72 std::string fault_fname(const char* io_type);
73 
74 #endif
75