property_get / property_set

Andorid 4.1.2


system/core/libcutils/properties.c

int property_set(const char *key, const char *value)
{
    return __system_property_set(key, value);
}


int property_get(const char *key, char *value, const char *default_value)
{
    int len;


    len = __system_property_get(key, value);

    if(len > 0) {
        return len;
    }   
    
    if(default_value) {   // default value 为NULL, 刚不会对value 做任何改变
        len = strlen(default_value);
        memcpy(value, default_value, len + 1); 
    }   
    return len;
}


bionic/libc/bionic/system_properties.c

int __system_property_read(const prop_info *pi, char *name, char *value)
{
    unsigned serial, len;
    
    for(;;) {
        serial = pi->serial;
        while(SERIAL_DIRTY(serial)) {
            __futex_wait((volatile void *)&pi->serial, serial, 0); 
            serial = pi->serial;
        }   
        len = SERIAL_VALUE_LEN(serial);
        memcpy(value, pi->value, len + 1); 
        if(serial == pi->serial) {
            if(name != 0) {
                strcpy(name, pi->name);
            }   
            return len;
        }   
    }   
}

int __system_property_get(const char *name, char *value)
{
    const prop_info *pi = __system_property_find(name);

    if(pi != 0) {
        return __system_property_read(pi, 0, value);
    } else {
        value[0] = 0;
        return 0;
    }   
}
int __system_property_set(const char *key, const char *value)
{
    int err;
    int tries = 0;
    int update_seen = 0;
    prop_msg msg;


    if(key == 0) {
        __libc_android_log_print(ANDROID_LOG_ERROR, "libc", "__system_property_set error : key = 0 \n");
        return -1;
    }
    if(value == 0) value = "";
    if(strlen(key) >= PROP_NAME_MAX) {
        __libc_android_log_print(ANDROID_LOG_ERROR, "libc", "__system_property_set error : strlen(key) >= %d, key = %s\n", PROP_NAME_MAX, key);
        return -2;
    }
    if(strlen(value) >= PROP_VALUE_MAX) {
        __libc_android_log_print(ANDROID_LOG_ERROR, "libc", "__system_property_set error : strlen(value) >= %d, value = %s \n", PROP_VALUE_MAX, value);
        return -3;
    }


    memset(&msg, 0, sizeof msg);
    msg.cmd = PROP_MSG_SETPROP;
    strlcpy(msg.name, key, sizeof msg.name);
    strlcpy(msg.value, value, sizeof msg.value);


    err = send_prop_msg(&msg);
    if(err < 0) {
        return err;
    }


    return 0;
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值