我工作的Linux驱动程序,而我得到这个警告消息:奇GCC警告行为
/home/andrewm/pivot3_scsif/pivot3_scsif.c:1090: warning: ignoring return value of ‘copy_from_user’, declared with attribute warn_unused_result
的违规行为:
if (copy_from_user(tmp, buf, count) < 0)
检查copy_from_user
的声明之后,我发现它返回一个unsigned long
,所以显然比较总是失败,所以返回值不会影响比较。这部分是有道理的,但为什么海湾合作委员会也不警告这是一个签名/无符号比较的事实?这仅仅是一个编译器的特点吗?或者它是否为相同的表情避免两次警告?
包含该行的作用是:
int proc_write(struct file *f, const char __user *buf, unsigned long count, void *data)
{
char tmp[64];
long value;
struct proc_entry *entry;
if (count >= 64)
count = 64;
if (copy_from_user(tmp, buf, count) < 0)
{
printk(KERN_WARNING "pivot3_scsif: failed to read from user buffer %p\n", buf);
return (int)count;
}
tmp[count - 1] = '\0';
if (tmp[count - 2] == '\n')
tmp[count - 2] = '\0';
...
}
对64位使用gcc 4.4.1的Red Hat(一家公司的服务器上,我真的没有在升级选择)。
你可以考虑重新编译(例如用'../gcc-4.8.1/configure --prefix = $ HOME/pub')编译器升级(到GCC 4.8.1);你不需要root权限。 –
我忘了建议也'--program后缀= -4.8'为'../ GCC-4.8.1/configure' ... –