阅读俄罗斯方块代码时碰到几个不太理解的地方解决思路

阅读俄罗斯方块代码时碰到几个不太理解的地方
char cfgfilename[80] = CONFIG_FILENAME;

#if UNIX
#define CONFIG_FILENAME ".vitetris"
#else
#define CONFIG_FILENAME "vitetris.cfg"
#endif
 

void setcfgfilename(const char *argv0)
{
#ifdef UNIX
struct passwd *pwd;
const char *s = getenv("HOME");

if (!s && (pwd = getpwuid(getuid())))

s = pwd->pw_dir;
if (s && strlen(s)+strlen(CONFIG_FILENAME) < 79) //就是if 的判断条件和后边的执行语句不明白是什么意思 {  
strcpy(cfgfilename, s); 
strcat(cfgfilename, "/"CONFIG_FILENAME);
}
#else
int n = strlen(argv0);
do n--;
while (n>=0 && argv0[n] !='\\' && argv0[n] !='/');//这个do while语句也让人有点费解
if (n>=0 && n+strlen(CONFIG_FILENAME) < 79) {
strncpy(cfgfilename, argv0, n+1);
cfgfilename[n+1] = '\0';
strcat(cfgfilename, CONFIG_FILENAME);
}
#endif
}



strcpy(cfgfilename, s);
strcat(cfgfilename, "/"CONFIG_FILENAME);


strncpy(cfgfilename, argv0, n+1);
cfgfilename[n+1] = '\0';
strcat(cfgfilename, CONFIG_FILENAME);这两个判断语句的执行语句分别有什么作用呢

------解决方案--------------------
if (s && strlen(s)+strlen(CONFIG_FILENAME) < 79) //就是if 的判断条件和后边的执行语句不明白是什么意思 {
strcpy(cfgfilename, s); 
strcat(cfgfilename, "/"CONFIG_FILENAME);
}
判断s是否为NULL以及是否会越界
可以用""""来把几个字符串连接起来为一个字符串
如:"/""abcd"为"/abcd"
------解决方案--------------------
void setcfgfilename(const char *argv0)
名字意思不是挺清楚的啊,设置配置文件名字。
cfgfilename 估计就是要给别的地方用的配置文件 带路径的配置文件名。

strncpy(cfgfilename, argv0, n+1); 这个不就是 把输入的参数 argv0 copy 到上面的字符串。八成是个路径。 
cfgfilename[n+1] = '\0';
strcat(cfgfilename, CONFIG_FILENAME); 这里把配置文件名接上去而已。