brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.4 KiB · 46e30ab Raw
181 lines · cpp
1// RUN: %check_clang_tidy %s android-cloexec-open %t2 3#define O_RDWR 14#define O_EXCL 25#define __O_CLOEXEC 36#define O_CLOEXEC __O_CLOEXEC7#define TEMP_FAILURE_RETRY(exp) \8  ({                            \9    int _rc;                    \10    do {                        \11      _rc = (exp);              \12    } while (_rc == -1);        \13  })14 15extern "C" int open(const char *fn, int flags, ...);16extern "C" int open64(const char *fn, int flags, ...);17extern "C" int openat(int dirfd, const char *pathname, int flags, ...);18 19void a() {20  open("filename", O_RDWR);21  // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: 'open' should use O_CLOEXEC where possible [android-cloexec-open]22  // CHECK-FIXES: open("filename", O_RDWR | O_CLOEXEC);23  TEMP_FAILURE_RETRY(open("filename", O_RDWR));24  // CHECK-MESSAGES: :[[@LINE-1]]:45: warning: 'open' should use O_CLOEXEC where25  // CHECK-FIXES: TEMP_FAILURE_RETRY(open("filename", O_RDWR | O_CLOEXEC));26  open("filename", O_RDWR | O_EXCL);27  // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: 'open' should use O_CLOEXEC where28  // CHECK-FIXES: open("filename", O_RDWR | O_EXCL | O_CLOEXEC);29  TEMP_FAILURE_RETRY(open("filename", O_RDWR | O_EXCL));30  // CHECK-MESSAGES: :[[@LINE-1]]:54: warning: 'open' should use O_CLOEXEC where31  // CHECK-FIXES: TEMP_FAILURE_RETRY(open("filename", O_RDWR | O_EXCL | O_CLOEXEC));32}33 34void b() {35  open64("filename", O_RDWR);36  // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: 'open64' should use O_CLOEXEC where possible [android-cloexec-open]37  // CHECK-FIXES: open64("filename", O_RDWR | O_CLOEXEC);38  TEMP_FAILURE_RETRY(open64("filename", O_RDWR));39  // CHECK-MESSAGES: :[[@LINE-1]]:47: warning: 'open64' should use O_CLOEXEC where40  // CHECK-FIXES: TEMP_FAILURE_RETRY(open64("filename", O_RDWR | O_CLOEXEC));41  open64("filename", O_RDWR | O_EXCL);42  // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: 'open64' should use O_CLOEXEC where43  // CHECK-FIXES: open64("filename", O_RDWR | O_EXCL | O_CLOEXEC);44  TEMP_FAILURE_RETRY(open64("filename", O_RDWR | O_EXCL));45  // CHECK-MESSAGES: :[[@LINE-1]]:56: warning: 'open64' should use O_CLOEXEC where46  // CHECK-FIXES: TEMP_FAILURE_RETRY(open64("filename", O_RDWR | O_EXCL | O_CLOEXEC));47}48 49void c() {50  openat(0, "filename", O_RDWR);51  // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: 'openat' should use O_CLOEXEC where possible [android-cloexec-open]52  // CHECK-FIXES: openat(0, "filename", O_RDWR | O_CLOEXEC);53  TEMP_FAILURE_RETRY(openat(0, "filename", O_RDWR));54  // CHECK-MESSAGES: :[[@LINE-1]]:50: warning: 'openat' should use O_CLOEXEC where55  // CHECK-FIXES: TEMP_FAILURE_RETRY(openat(0, "filename", O_RDWR | O_CLOEXEC));56  openat(0, "filename", O_RDWR | O_EXCL);57  // CHECK-MESSAGES: :[[@LINE-1]]:40: warning: 'openat' should use O_CLOEXEC where58  // CHECK-FIXES: openat(0, "filename", O_RDWR | O_EXCL | O_CLOEXEC);59  TEMP_FAILURE_RETRY(openat(0, "filename", O_RDWR | O_EXCL));60  // CHECK-MESSAGES: :[[@LINE-1]]:59: warning: 'openat' should use O_CLOEXEC where61  // CHECK-FIXES: TEMP_FAILURE_RETRY(openat(0, "filename", O_RDWR | O_EXCL | O_CLOEXEC));62}63 64void f() {65  open("filename", 3);66  // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: 'open' should use O_CLOEXEC where possible [android-cloexec-open]67  // CHECK-FIXES: open("filename", 3 | O_CLOEXEC);68  TEMP_FAILURE_RETRY(open("filename", 3));69  // CHECK-MESSAGES: :[[@LINE-1]]:40: warning: 'open' should use O_CLOEXEC where70  // CHECK-FIXES: TEMP_FAILURE_RETRY(open("filename", 3 | O_CLOEXEC));71  open64("filename", 3);72  // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: 'open64' should use O_CLOEXEC where possible [android-cloexec-open]73  // CHECK-FIXES: open64("filename", 3 | O_CLOEXEC);74  TEMP_FAILURE_RETRY(open64("filename", 3));75  // CHECK-MESSAGES: :[[@LINE-1]]:42: warning: 'open64' should use O_CLOEXEC where76  // CHECK-FIXES: TEMP_FAILURE_RETRY(open64("filename", 3 | O_CLOEXEC));77  openat(0, "filename", 3);78  // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: 'openat' should use O_CLOEXEC where possible [android-cloexec-open]79  // CHECK-FIXES: openat(0, "filename", 3 | O_CLOEXEC);80  TEMP_FAILURE_RETRY(openat(0, "filename", 3));81  // CHECK-MESSAGES: :[[@LINE-1]]:45: warning: 'openat' should use O_CLOEXEC where82  // CHECK-FIXES: TEMP_FAILURE_RETRY(openat(0, "filename", 3 | O_CLOEXEC));83 84  int flag = 3;85  open("filename", flag);86  // CHECK-MESSAGES-NOT: warning:87  TEMP_FAILURE_RETRY(open("filename", flag));88  // CHECK-MESSAGES-NOT: warning:89  open64("filename", flag);90  // CHECK-MESSAGES-NOT: warning:91  TEMP_FAILURE_RETRY(open64("filename", flag));92  // CHECK-MESSAGES-NOT: warning:93  openat(0, "filename", flag);94  // CHECK-MESSAGES-NOT: warning:95  TEMP_FAILURE_RETRY(openat(0, "filename", flag));96  // CHECK-MESSAGES-NOT: warning:97}98 99namespace i {100int open(const char *pathname, int flags, ...);101int open64(const char *pathname, int flags, ...);102int openat(int dirfd, const char *pathname, int flags, ...);103 104void d() {105  open("filename", O_RDWR);106  // CHECK-MESSAGES-NOT: warning:107  TEMP_FAILURE_RETRY(open("filename", O_RDWR));108  // CHECK-MESSAGES-NOT: warning:109  open64("filename", O_RDWR);110  // CHECK-MESSAGES-NOT: warning:111  TEMP_FAILURE_RETRY(open64("filename", O_RDWR));112  // CHECK-MESSAGES-NOT: warning:113  openat(0, "filename", O_RDWR);114  // CHECK-MESSAGES-NOT: warning:115  TEMP_FAILURE_RETRY(openat(0, "filename", O_RDWR));116  // CHECK-MESSAGES-NOT: warning:117}118 119} // namespace i120 121void e() {122  open("filename", O_CLOEXEC);123  // CHECK-MESSAGES-NOT: warning:124  TEMP_FAILURE_RETRY(open("filename", O_CLOEXEC));125  // CHECK-MESSAGES-NOT: warning:126  open("filename", O_RDWR | O_CLOEXEC);127  // CHECK-MESSAGES-NOT: warning:128  TEMP_FAILURE_RETRY(open("filename", O_RDWR | O_CLOEXEC));129  // CHECK-MESSAGES-NOT: warning:130  open("filename", O_RDWR | O_CLOEXEC | O_EXCL);131  // CHECK-MESSAGES-NOT: warning:132  TEMP_FAILURE_RETRY(open("filename", O_RDWR | O_CLOEXEC | O_EXCL));133  // CHECK-MESSAGES-NOT: warning:134  open64("filename", O_CLOEXEC);135  // CHECK-MESSAGES-NOT: warning:136  TEMP_FAILURE_RETRY(open64("filename", O_CLOEXEC));137  // CHECK-MESSAGES-NOT: warning:138  open64("filename", O_RDWR | O_CLOEXEC);139  // CHECK-MESSAGES-NOT: warning:140  TEMP_FAILURE_RETRY(open64("filename", O_RDWR | O_CLOEXEC));141  // CHECK-MESSAGES-NOT: warning:142  open64("filename", O_RDWR | O_CLOEXEC | O_EXCL);143  // CHECK-MESSAGES-NOT: warning:144  TEMP_FAILURE_RETRY(open64("filename", O_RDWR | O_CLOEXEC | O_EXCL));145  // CHECK-MESSAGES-NOT: warning:146  openat(0, "filename", O_CLOEXEC);147  // CHECK-MESSAGES-NOT: warning:148  TEMP_FAILURE_RETRY(openat(0, "filename", O_CLOEXEC));149  // CHECK-MESSAGES-NOT: warning:150  openat(0, "filename", O_RDWR | O_CLOEXEC);151  // CHECK-MESSAGES-NOT: warning:152  TEMP_FAILURE_RETRY(openat(0, "filename", O_RDWR | O_CLOEXEC));153  // CHECK-MESSAGES-NOT: warning:154  openat(0, "filename", O_RDWR | O_CLOEXEC | O_EXCL);155  // CHECK-MESSAGES-NOT: warning:156  TEMP_FAILURE_RETRY(openat(0, "filename", O_RDWR | O_CLOEXEC | O_EXCL));157  // CHECK-MESSAGES-NOT: warning:158}159 160class G {161public:162  int open(const char *pathname, int flags, ...);163  int open64(const char *pathname, int flags, ...);164  int openat(int dirfd, const char *pathname, int flags, ...);165 166  void h() {167    open("filename", O_RDWR);168    // CHECK-MESSAGES-NOT: warning:169    TEMP_FAILURE_RETRY(open("filename", O_RDWR));170    // CHECK-MESSAGES-NOT: warning:171    open64("filename", O_RDWR);172    // CHECK-MESSAGES-NOT: warning:173    TEMP_FAILURE_RETRY(open64("filename", O_RDWR));174    // CHECK-MESSAGES-NOT: warning:175    openat(0, "filename", O_RDWR);176    // CHECK-MESSAGES-NOT: warning:177    TEMP_FAILURE_RETRY(openat(0, "filename", O_RDWR));178    // CHECK-MESSAGES-NOT: warning:179  }180};181