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

要检查的重试宏名称的逗号分隔列表。