1fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry/*
2fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * Copyright (C) 2008 The Android Open Source Project
3fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * All rights reserved.
4fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry *
5fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * Redistribution and use in source and binary forms, with or without
6fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * modification, are permitted provided that the following conditions
7fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * are met:
8fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry *  * Redistributions of source code must retain the above copyright
9fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry *    notice, this list of conditions and the following disclaimer.
10fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry *  * Redistributions in binary form must reproduce the above copyright
11fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry *    notice, this list of conditions and the following disclaimer in
12fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry *    the documentation and/or other materials provided with the
13fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry *    distribution.
14fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry *
15fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry * SUCH DAMAGE.
27fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry */
28fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry
29cbc80ba9d839675a0c4891e2ab33f39ba51b04b2Elliott Hughes#pragma once
30fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry
31fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry#include "contexts.h"
32fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry
33fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherrystruct PrefixNode;
34fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherryclass ContextListNode;
35fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry
36fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherryclass ContextsSplit : public Contexts {
37fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry public:
38fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry  virtual ~ContextsSplit() override {
39fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry  }
40fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry
41e275d6d72db1868056a204e8483a7346a28cb8d6Tom Cherry  virtual bool Initialize(bool writable, const char* filename, bool* fsetxattr_failed) override;
42fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry  virtual prop_area* GetPropAreaForName(const char* name) override;
43f76bbf5384c0504b165168f51ccadfb605ccb2afTom Cherry  virtual prop_area* GetSerialPropArea() override {
44f76bbf5384c0504b165168f51ccadfb605ccb2afTom Cherry    return serial_prop_area_;
45f76bbf5384c0504b165168f51ccadfb605ccb2afTom Cherry  }
46fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry  virtual void ForEach(void (*propfn)(const prop_info* pi, void* cookie), void* cookie) override;
47fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry  virtual void ResetAccess() override;
48fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry  virtual void FreeAndUnmap() override;
49fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry
50fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry private:
51f76bbf5384c0504b165168f51ccadfb605ccb2afTom Cherry  bool MapSerialPropertyArea(bool access_rw, bool* fsetxattr_failed);
52fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry  bool InitializePropertiesFromFile(const char* filename);
53fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry  bool InitializeProperties();
54fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry
55fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry  PrefixNode* prefixes_ = nullptr;
56fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry  ContextListNode* contexts_ = nullptr;
57f76bbf5384c0504b165168f51ccadfb605ccb2afTom Cherry  prop_area* serial_prop_area_ = nullptr;
58e275d6d72db1868056a204e8483a7346a28cb8d6Tom Cherry  const char* filename_ = nullptr;
59fd44b9f8d89ce4f33ff39d7f340a5ed08029d21cTom Cherry};
60