android-comparison-in-temp-failure-retry¶
诊断在 TEMP_FAILURE_RETRY
宏的参数中放置不正确的比较操作。这种用法在大多数情况下都是不正确的,并且常常会默默地破坏 TEMP_FAILURE_RETRY
宏的目的。
为了方便理解,TEMP_FAILURE_RETRY
是 由 glibc 和 Bionic 提供的便利宏。其目的是反复运行系统调用,直到成功,或者由于除被中断以外的其他原因失败。
示例错误用法如下
char cs[1];
while (TEMP_FAILURE_RETRY(read(STDIN_FILENO, cs, sizeof(cs)) != 0)) {
// Do something with cs.
}
因为 TEMP_FAILURE_RETRY 会检查比较结果是否为 -1
,如果是,则重试。
如果遇到这种情况,修复方法很简单:将比较操作移出 TEMP_FAILURE_RETRY
参数,如下所示
char cs[1];
while (TEMP_FAILURE_RETRY(read(STDIN_FILENO, cs, sizeof(cs))) != 0) {
// Do something with cs.
}
选项¶
- RetryMacros¶
要检查的重试宏名称的逗号分隔列表。