| 1 | // RUN: %check_clang_tidy %s android-cloexec-creat %t |
| 2 | |
| 3 | typedef int mode_t; |
| 4 | |
| 5 | extern "C" int creat(const char *path, mode_t, ...); |
| 6 | extern "C" int create(const char *path, mode_t, ...); |
| 7 | |
| 8 | void f() { |
| 9 | creat(path: "filename" , 0); |
| 10 | // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: prefer open() to creat() because open() allows O_CLOEXEC [android-cloexec-creat] |
| 11 | // CHECK-FIXES: open ("filename", O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0); |
| 12 | create(path: "filename" , 0); |
| 13 | // CHECK-MESSAGES-NOT: warning: |
| 14 | mode_t mode = 0755; |
| 15 | creat(path: "filename" , mode); |
| 16 | // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: |
| 17 | // CHECK-FIXES: open ("filename", O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, mode); |
| 18 | } |
| 19 | |
| 20 | namespace i { |
| 21 | int creat(const char *path, mode_t, ...); |
| 22 | void g() { |
| 23 | creat(path: "filename" , 0); |
| 24 | // CHECK-MESSAGES-NOT: warning: |
| 25 | } |
| 26 | } // namespace i |
| 27 | |
| 28 | class C { |
| 29 | public: |
| 30 | int creat(const char *path, mode_t, ...); |
| 31 | void h() { |
| 32 | creat(path: "filename" , 0); |
| 33 | // CHECK-MESSAGES-NOT: warning: |
| 34 | } |
| 35 | }; |
| 36 | |