ADB源代码中的宏定义

时间:2013-08-29 23:49:45

标签: android c linux adb

我正在阅读Android 4.0的ADB源代码。我现在正在阅读的文件是system / core / adb / sysdeps.h。有一件事我无法理解:

static __inline__  int  adb_write(int  fd, const void*  buf, size_t  len)
{
    return write(fd, buf, len);
}
#undef   write
#define  write  ___xxx_write

最后一行是什么意思?什么是“___ xxx_write”?

1 个答案:

答案 0 :(得分:0)

他们包装了POSIX write() API调用,然后将write重新定义为未定义的符号,因此无法在程序中使用它。他们想确保开发人员改用adb_write()

如果使用的C库已经定义了#undef write宏,则#define write确保随后的write不会收到“重新定义”警告。

6年前,adb_write()只不过是Unix上的write()。最近,错误代码被包装以进行特殊处理,从而证明了此技术的价值。

static __inline__ int adb_write(borrowed_fd fd, const void* buf, size_t len) {
    return TEMP_FAILURE_RETRY(write(fd.get(), buf, len));
}
#undef   write
#define  write  ___xxx_write

来自https://android.googlesource.com/platform/system/core/+/e7f014da9c49c56367ae2dc3ba53c5dda3814c45/adb/sysdeps.h#499