您的位置:首页 > 其它

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

2014-08-28 17:36 501 查看
/** 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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: