|
1 | | -/* |
2 | | - * Copyright (C) 2008 The Android Open Source Project |
3 | | - * All rights reserved. |
4 | | - * |
5 | | - * Redistribution and use in source and binary forms, with or without |
6 | | - * modification, are permitted provided that the following conditions |
7 | | - * are met: |
8 | | - * * Redistributions of source code must retain the above copyright |
9 | | - * notice, this list of conditions and the following disclaimer. |
10 | | - * * Redistributions in binary form must reproduce the above copyright |
11 | | - * notice, this list of conditions and the following disclaimer in |
12 | | - * the documentation and/or other materials provided with the |
13 | | - * distribution. |
14 | | - * |
15 | | - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
16 | | - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
17 | | - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
18 | | - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
19 | | - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
20 | | - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
21 | | - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS |
22 | | - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
23 | | - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
24 | | - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
25 | | - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
26 | | - * SUCH DAMAGE. |
27 | | - */ |
28 | | - |
29 | | -#pragma once |
30 | | - |
31 | | -#include <sys/cdefs.h> |
32 | | -#include <stdint.h> |
33 | | - |
34 | | -#ifndef _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ |
35 | | -#error you should #include <sys/system_properties.h> instead |
36 | | -#endif |
37 | | - |
38 | 1 | #include <sys/system_properties.h> |
39 | | - |
40 | | -__BEGIN_DECLS |
41 | | - |
42 | | -/** |
43 | | - * Reads the global serial number of the system properties _area_. |
44 | | - * |
45 | | - * Called to predict if a series of cached __system_property_find() |
46 | | - * objects will have seen __system_property_serial() values change. |
47 | | - * Also aids the converse, as changes in the global serial can |
48 | | - * also be used to predict if a failed __system_property_find() |
49 | | - * could in turn now find a new object; thus preventing the |
50 | | - * cycles of effort to poll __system_property_find(). |
51 | | - * |
52 | | - * Typically called at beginning of a cache cycle to signal if _any_ possible |
53 | | - * changes have occurred since last. If there is, one may check each individual |
54 | | - * __system_property_serial() to confirm dirty, or __system_property_find() |
55 | | - * to check if the property now exists. If a call to __system_property_add() |
56 | | - * or __system_property_update() has completed between two calls to |
57 | | - * __system_property_area_serial() then the second call will return a larger |
58 | | - * value than the first call. Beware of race conditions as changes to the |
59 | | - * properties are not atomic, the main value of this call is to determine |
60 | | - * whether the expensive __system_property_find() is worth retrying to see if |
61 | | - * a property now exists. |
62 | | - * |
63 | | - * Returns the serial number on success, -1 on error. |
64 | | - */ |
65 | | -uint32_t __system_property_area_serial(void); |
66 | | - |
67 | | -/** |
68 | | - * Reads the serial number of a specific system property previously returned by |
69 | | - * __system_property_find(). This is a cheap way to check whether a system |
70 | | - * property has changed or not. |
71 | | - * |
72 | | - * Returns the serial number on success, -1 on error. |
73 | | - */ |
74 | | -uint32_t __system_property_serial(const prop_info* _Nonnull __pi); |
75 | | - |
76 | | -// |
77 | | -// libc implementation detail. |
78 | | -// |
79 | | - |
80 | | -/** |
81 | | - * Initializes the system properties area in read-only mode. |
82 | | - * |
83 | | - * This is called automatically during libc initialization, |
84 | | - * so user code should never need to call this. |
85 | | - * |
86 | | - * Returns 0 on success, -1 otherwise. |
87 | | - */ |
88 | | -int __system_properties_init(void); |
89 | | - |
90 | | -// |
91 | | -// init implementation details. |
92 | | -// |
93 | | - |
94 | | -#define PROP_SERVICE_NAME "property_service" |
95 | | -#define PROP_SERVICE_FOR_SYSTEM_NAME "property_service_for_system" |
96 | | -#define PROP_DIRNAME "/dev/__properties__" |
97 | | - |
98 | | -// Messages sent to init. |
99 | | -#define PROP_MSG_SETPROP 1 |
100 | | -#define PROP_MSG_SETPROP2 0x00020001 |
101 | | - |
102 | | -// Status codes returned by init (but not passed from libc to the caller). |
103 | | -#define PROP_SUCCESS 0 |
104 | | -#define PROP_ERROR_READ_CMD 0x0004 |
105 | | -#define PROP_ERROR_READ_DATA 0x0008 |
106 | | -#define PROP_ERROR_READ_ONLY_PROPERTY 0x000B |
107 | | -#define PROP_ERROR_INVALID_NAME 0x0010 |
108 | | -#define PROP_ERROR_INVALID_VALUE 0x0014 |
109 | | -#define PROP_ERROR_PERMISSION_DENIED 0x0018 |
110 | | -#define PROP_ERROR_INVALID_CMD 0x001B |
111 | | -#define PROP_ERROR_HANDLE_CONTROL_MESSAGE 0x0020 |
112 | | -#define PROP_ERROR_SET_FAILED 0x0024 |
113 | | - |
114 | | -/** |
115 | | - * Initializes the area to be used to store properties. |
116 | | - * |
117 | | - * Can only be done by the process that has write access to the property area, |
118 | | - * typically init. |
119 | | - * |
120 | | - * See __system_properties_init() for the equivalent for all other processes. |
121 | | - */ |
122 | | -int __system_property_area_init(void); |
123 | | - |
124 | | -/** |
125 | | - * Adds a new system property. |
126 | | - * Can only be done by the process that has write access to the property area -- |
127 | | - * typically init -- which must handle sequencing to ensure that only one property is |
128 | | - * updated at a time. |
129 | | - * |
130 | | - * Returns 0 on success, -1 if the property area is full. |
131 | | - */ |
132 | | -int __system_property_add(const char* _Nonnull __name, unsigned int __name_length, const char* _Nonnull __value, unsigned int __value_length); |
133 | | - |
134 | | -/** |
135 | | - * Updates the value of a system property returned by __system_property_find(). |
136 | | - * Can only be done by the process that has write access to the property area -- |
137 | | - * typically init -- which must handle sequencing to ensure that only one property is |
138 | | - * updated at a time. |
139 | | - * |
140 | | - * Returns 0 on success, -1 if the parameters are incorrect. |
141 | | - */ |
142 | | -int __system_property_update(prop_info* _Nonnull __pi, const char* _Nonnull __value, unsigned int __value_length); |
143 | | - |
144 | | -/** |
145 | | - * Reloads the system properties from disk. |
146 | | - * Not intended for use by any apps except the Zygote. |
147 | | - * Should only be called from the main thread. |
148 | | - * |
149 | | - * Pointers received from functions such as __system_property_find() |
150 | | - * may be invalidated by calls to this function. |
151 | | - * |
152 | | - * Returns 0 on success, -1 otherwise. |
153 | | - * |
154 | | - * Available since API level 35. |
155 | | - */ |
156 | | -int __system_properties_zygote_reload(void) __INTRODUCED_IN(35); |
157 | | - |
158 | | -// |
159 | | -// Deprecated functions. |
160 | | -// |
161 | | - |
162 | | -/** Deprecated: use __system_property_wait instead. */ |
163 | | -uint32_t __system_property_wait_any(uint32_t __old_serial); |
164 | | - |
165 | | -/** |
166 | | - * Deprecated: previously for testing, but now that SystemProperties is its own |
167 | | - * testable class, there is never a reason to call this function and its |
168 | | - * implementation simply returns -1. |
169 | | - */ |
170 | | -int __system_property_set_filename(const char* __unused __filename); |
171 | | - |
172 | | -__END_DECLS |
0 commit comments