指针的灵活使用(分析Device tree案例)

转载于 :  http://blog.csdn.net/zengxianyang/article/details/50732929

 

/** Checks if the given "compat" string matches one of the strings in
 * the device's "compatible" property
 */

int of_device_is_compatible(const struct device_node *device,

const char *compat)
{
const char* cp;
int cplen, l;


cp = of_get_property(device, "compatible", &cplen);
if (cp == NULL)
return 0;
while (cplen > 0) {
if (of_compat_cmp(cp, compat, strlen(compat)) == 0)
return 1;
l = strlen(cp) + 1;
cp += l;
cplen -= l;
}


return 0;

}

 

其中of_get_propert()函数的实现:

/*
 * Find a property with a given name for a given node
 * and return the value.
 */
const void *of_get_property(const struct device_node *np, const char *name,
int *lenp)
{
struct property *pp = of_find_property(np, name, lenp);


return pp ? pp->value : NULL;
}

其中property结构为:

struct property {
char *name;
int length;
void *value;
struct property *next;
unsigned long _flags;
unsigned int unique_id;
};

 

其中为什么of_device_is_compatible()函数为什么要执行语句:cp += l;

原因有两个:

1,of_get_property()函数的返回值类型是void *;

2,strlen(cp) + 1的含义为:读取cp指针所指向的一片数据区,遇到'/0',结束读值;即总长度为实际长度加‘/0’结束符,+1.

posted on 2017-01-27 19:46  Red_Point  阅读(291)  评论(0编辑  收藏  举报

导航