私は、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
を返したことがわかりました。明らかに比較は常に失敗するため、戻り値は比較に影響しません。その部分は理にかなっていますが、なぜgccは署名付き/符号なし比較であるという事実について警告していませんか?それは単なるコンパイラ特有なのでしょうか?それとも同じ表現に対して警告を2回もしないのですか?行を含む
機能は次のとおりです。
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ビットのRed Hat上のgcc 4.4.1を使用して(会社のサーバー上で、私は本当にアップグレードの選択肢を持っていません)。
コンパイルをGCC 4.8.1にアップグレードすることを考えてみましょう(例えば、 '../gcc-4.8.1/configure --prefix = $ HOME/pub'を使って)。そのためのルート権限は必要ありません。 –
' -/gcc-4.8.1/configure'のために' --program-suffix = -4.8'を提案するのを忘れた... –