utils_android.cc revision d998b820ef2ca391cef551159dacf5afce6cff98
1fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// 2fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// Copyright (C) 2016 The Android Open Source Project 3fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// 4fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// Licensed under the Apache License, Version 2.0 (the "License"); 5fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// you may not use this file except in compliance with the License. 6fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// You may obtain a copy of the License at 7fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// 8fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// http://www.apache.org/licenses/LICENSE-2.0 9fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// 10fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// Unless required by applicable law or agreed to in writing, software 11fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// distributed under the License is distributed on an "AS IS" BASIS, 12fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// See the License for the specific language governing permissions and 14fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// limitations under the License. 15fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// 16fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 17fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo#include "update_engine/utils_android.h" 18fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 19fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo#include <cutils/properties.h> 20fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo#include <fs_mgr.h> 21fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 22fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymousing std::string; 23fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 24fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymonamespace chromeos_update_engine { 25fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 26fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymonamespace { 27fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 28fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// Open the appropriate fstab file and fallback to /fstab.device if 29fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo// that's what's being used. 30fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymostatic struct fstab* OpenFSTab() { 31d998b820ef2ca391cef551159dacf5afce6cff98Bowgo Tsai struct fstab* fstab = fs_mgr_read_fstab_default(); 32fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo if (fstab != nullptr) 33fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo return fstab; 34fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 35d998b820ef2ca391cef551159dacf5afce6cff98Bowgo Tsai fstab = fs_mgr_read_fstab_with_dt("/fstab.device"); 36fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo return fstab; 37fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo} 38fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 39fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo} // namespace 40fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 41fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymonamespace utils { 42fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 43fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymobool DeviceForMountPoint(const string& mount_point, base::FilePath* device) { 44fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo struct fstab* fstab; 45fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo struct fstab_rec* record; 46fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 47fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo fstab = OpenFSTab(); 48fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo if (fstab == nullptr) { 49fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo LOG(ERROR) << "Error opening fstab file."; 50fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo return false; 51fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo } 52fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo record = fs_mgr_get_entry_for_mount_point(fstab, mount_point.c_str()); 53fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo if (record == nullptr) { 54fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo LOG(ERROR) << "Error finding " << mount_point << " entry in fstab file."; 55fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo fs_mgr_free_fstab(fstab); 56fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo return false; 57fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo } 58fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 59fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo *device = base::FilePath(record->blk_device); 60fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo fs_mgr_free_fstab(fstab); 61fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo return true; 62fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo} 63fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 64fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo} // namespace utils 65fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo 66fb905d9b8d49f8fe41297c7aba2dd0942f1be311Alex Deymo} // namespace chromeos_update_engine 67