xref: /OK3568_Linux_fs/external/mpp/osal/android/os_env.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright 2015 Rockchip Electronics Co. LTD
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Licensed under the Apache License, Version 2.0 (the "License");
5*4882a593Smuzhiyun  * you may not use this file except in compliance with the License.
6*4882a593Smuzhiyun  * You may obtain a copy of the License at
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  *      http://www.apache.org/licenses/LICENSE-2.0
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * Unless required by applicable law or agreed to in writing, software
11*4882a593Smuzhiyun  * distributed under the License is distributed on an "AS IS" BASIS,
12*4882a593Smuzhiyun  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4882a593Smuzhiyun  * See the License for the specific language governing permissions and
14*4882a593Smuzhiyun  * limitations under the License.
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #if defined(__ANDROID__)
18*4882a593Smuzhiyun #include <stdio.h>
19*4882a593Smuzhiyun #include <stdlib.h>
20*4882a593Smuzhiyun #include <errno.h>
21*4882a593Smuzhiyun #include "os_env.h"
22*4882a593Smuzhiyun #include <sys/system_properties.h>
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun /*
25*4882a593Smuzhiyun  * NOTE: __system_property_set only available after android-21
26*4882a593Smuzhiyun  * So the library should compiled on latest ndk
27*4882a593Smuzhiyun  */
28*4882a593Smuzhiyun 
os_get_env_u32(const char * name,RK_U32 * value,RK_U32 default_value)29*4882a593Smuzhiyun RK_S32 os_get_env_u32(const char *name, RK_U32 *value, RK_U32 default_value)
30*4882a593Smuzhiyun {
31*4882a593Smuzhiyun     char prop[PROP_VALUE_MAX + 1];
32*4882a593Smuzhiyun     int len = __system_property_get(name, prop);
33*4882a593Smuzhiyun     if (len > 0) {
34*4882a593Smuzhiyun         char *endptr;
35*4882a593Smuzhiyun         int base = (prop[0] == '0' && prop[1] == 'x') ? (16) : (10);
36*4882a593Smuzhiyun         errno = 0;
37*4882a593Smuzhiyun         *value = strtoul(prop, &endptr, base);
38*4882a593Smuzhiyun         if (errno || (prop == endptr)) {
39*4882a593Smuzhiyun             errno = 0;
40*4882a593Smuzhiyun             *value = default_value;
41*4882a593Smuzhiyun         }
42*4882a593Smuzhiyun     } else {
43*4882a593Smuzhiyun         *value = default_value;
44*4882a593Smuzhiyun     }
45*4882a593Smuzhiyun     return 0;
46*4882a593Smuzhiyun }
47*4882a593Smuzhiyun 
os_get_env_str(const char * name,const char ** value,const char * default_value)48*4882a593Smuzhiyun RK_S32 os_get_env_str(const char *name, const char **value, const char *default_value)
49*4882a593Smuzhiyun {
50*4882a593Smuzhiyun     // use unsigned char to avoid warnning
51*4882a593Smuzhiyun     static unsigned char env_str[2][PROP_VALUE_MAX + 1];
52*4882a593Smuzhiyun     static RK_U32 env_idx = 0;
53*4882a593Smuzhiyun     char *prop = (char *)env_str[env_idx];
54*4882a593Smuzhiyun     int len = __system_property_get(name, prop);
55*4882a593Smuzhiyun     if (len > 0) {
56*4882a593Smuzhiyun         *value  = prop;
57*4882a593Smuzhiyun         env_idx = !env_idx;
58*4882a593Smuzhiyun     } else {
59*4882a593Smuzhiyun         *value = default_value;
60*4882a593Smuzhiyun     }
61*4882a593Smuzhiyun     return 0;
62*4882a593Smuzhiyun }
63*4882a593Smuzhiyun 
os_set_env_u32(const char * name,RK_U32 value)64*4882a593Smuzhiyun RK_S32 os_set_env_u32(const char *name, RK_U32 value)
65*4882a593Smuzhiyun {
66*4882a593Smuzhiyun     char buf[PROP_VALUE_MAX + 1 + 2];
67*4882a593Smuzhiyun     snprintf(buf, sizeof(buf) - 1, "0x%x", value);
68*4882a593Smuzhiyun     int len = __system_property_set(name, buf);
69*4882a593Smuzhiyun     return (len) ? (0) : (-1);
70*4882a593Smuzhiyun }
71*4882a593Smuzhiyun 
os_set_env_str(const char * name,char * value)72*4882a593Smuzhiyun RK_S32 os_set_env_str(const char *name, char *value)
73*4882a593Smuzhiyun {
74*4882a593Smuzhiyun     int len = __system_property_set(name, value);
75*4882a593Smuzhiyun     return (len) ? (0) : (-1);
76*4882a593Smuzhiyun }
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun #endif
79