|
在UBOOT1.1.6代码中有如下代码
int getenv_r (char *name, char *buf, unsigned len)
{
int i, nxt;
for (i=0; env_get_char(i) != '\0'; i=nxt+1) {
int val, n;
for (nxt=i; env_get_char(nxt) != '\0'; ++nxt) {
if (nxt >= CFG_ENV_SIZE) {
return (-1);
}
}
if ((val=envmatch((uchar *)name, i)) < 0)
continue;
/* found; copy out */
n = 0;
while ((len > n++) && (*buf++ = env_get_char(val++)) != '\0')
;
if (len == n)
*buf = '\0';
return (n);
}
return (-1);
}
问题1:
如果外循环FOR实现遍历default_environment[],内循环FOR实现检测是否超出环境变量的大小,
内循环FOR和外循环FOR中的变量int i ,nxt 是重叠的,如果内循环执行完毕,那nxt应该=8(default_environment[],定义了9个字符串,最后一个是0),那再执行外循环FORfor (i=0; env_get_char(i) != '\0'; i=nxt+1), 那 i=nxt+1=8+1=9, env_get_char(i) != '\0'是否就会超出default_environment[],
问题2
static int
envmatch (uchar *s1, int i2)
{
while (*s1 == env_get_char(i2++))
if (*s1++ == '=')
return(i2);
if (*s1 == '\0' && env_get_char(i2-1) == '=')
return(i2);
return(-1);
}
if (*s1++ == '=') '='在这里起什么作用,有网上的资料说是 = 前的字符串,这个 = 是否有特殊的用法?
请高手能够给予解答,能否详细解释int getenv_r (char *name, char *buf, unsigned len)
及相关子函数。谢谢! |
|