1*d83cc019SAndroid Build Coastguard Worker// Semantic patch for common patterns and their replacement by igt 2*d83cc019SAndroid Build Coastguard Worker// infrastructure and macros. Please run with 3*d83cc019SAndroid Build Coastguard Worker// 4*d83cc019SAndroid Build Coastguard Worker// spatch --sp-file lib/igt.cocci --in-place tests/*.c 5*d83cc019SAndroid Build Coastguard Worker// 6*d83cc019SAndroid Build Coastguard Worker// on your new testcase. 7*d83cc019SAndroid Build Coastguard Worker 8*d83cc019SAndroid Build Coastguard Worker 9*d83cc019SAndroid Build Coastguard Worker// Replace open-coded augmented igt_assert/skip/require with macro versions 10*d83cc019SAndroid Build Coastguard Worker@@ 11*d83cc019SAndroid Build Coastguard Workerexpression Ec; 12*d83cc019SAndroid Build Coastguard Workerexpression list[n] Ep; 13*d83cc019SAndroid Build Coastguard Worker@@ 14*d83cc019SAndroid Build Coastguard Worker- if (Ec) { 15*d83cc019SAndroid Build Coastguard Worker( 16*d83cc019SAndroid Build Coastguard Worker- igt_warn( Ep ); 17*d83cc019SAndroid Build Coastguard Worker| 18*d83cc019SAndroid Build Coastguard Worker- igt_info( Ep ); 19*d83cc019SAndroid Build Coastguard Worker| 20*d83cc019SAndroid Build Coastguard Worker- igt_debug( Ep ); 21*d83cc019SAndroid Build Coastguard Worker) 22*d83cc019SAndroid Build Coastguard Worker- igt_fail(...); 23*d83cc019SAndroid Build Coastguard Worker- } 24*d83cc019SAndroid Build Coastguard Worker+ igt_fail_on_f(Ec, Ep); 25*d83cc019SAndroid Build Coastguard Worker@@ 26*d83cc019SAndroid Build Coastguard Workerexpression Ec; 27*d83cc019SAndroid Build Coastguard Worker@@ 28*d83cc019SAndroid Build Coastguard Worker- if (Ec) { 29*d83cc019SAndroid Build Coastguard Worker- igt_fail(...); 30*d83cc019SAndroid Build Coastguard Worker- } 31*d83cc019SAndroid Build Coastguard Worker+ igt_fail_on(Ec); 32*d83cc019SAndroid Build Coastguard Worker@@ 33*d83cc019SAndroid Build Coastguard Workerexpression Ec; 34*d83cc019SAndroid Build Coastguard Workerexpression list[n] Ep; 35*d83cc019SAndroid Build Coastguard Worker@@ 36*d83cc019SAndroid Build Coastguard Worker- if (Ec) { 37*d83cc019SAndroid Build Coastguard Worker- igt_skip(Ep); 38*d83cc019SAndroid Build Coastguard Worker- } 39*d83cc019SAndroid Build Coastguard Worker+ igt_skip_on_f(Ec, Ep); 40*d83cc019SAndroid Build Coastguard Worker@@ 41*d83cc019SAndroid Build Coastguard Workerexpression Ec; 42*d83cc019SAndroid Build Coastguard Workerexpression list[n] Ep; 43*d83cc019SAndroid Build Coastguard Worker@@ 44*d83cc019SAndroid Build Coastguard Worker- if (Ec) { 45*d83cc019SAndroid Build Coastguard Worker- igt_warn(Ep); 46*d83cc019SAndroid Build Coastguard Worker- } 47*d83cc019SAndroid Build Coastguard Worker+ igt_warn_on_f(Ec, Ep); 48*d83cc019SAndroid Build Coastguard Worker 49*d83cc019SAndroid Build Coastguard Worker// Enforce use of logging functions 50*d83cc019SAndroid Build Coastguard Worker@@ 51*d83cc019SAndroid Build Coastguard Workerexpression list[n] Ep; 52*d83cc019SAndroid Build Coastguard Worker@@ 53*d83cc019SAndroid Build Coastguard Worker-fprintf(stderr, Ep); 54*d83cc019SAndroid Build Coastguard Worker+igt_warn(Ep); 55*d83cc019SAndroid Build Coastguard Worker@@ 56*d83cc019SAndroid Build Coastguard Workerexpression E; 57*d83cc019SAndroid Build Coastguard Worker@@ 58*d83cc019SAndroid Build Coastguard Worker-perror(E); 59*d83cc019SAndroid Build Coastguard Worker+igt_warn(E); 60*d83cc019SAndroid Build Coastguard Worker@@ 61*d83cc019SAndroid Build Coastguard Workerexpression list[n] Ep; 62*d83cc019SAndroid Build Coastguard Worker@@ 63*d83cc019SAndroid Build Coastguard Worker-fprintf(stdout, Ep); 64*d83cc019SAndroid Build Coastguard Worker+igt_info(Ep); 65*d83cc019SAndroid Build Coastguard Worker@@ 66*d83cc019SAndroid Build Coastguard Workerexpression list[n] Ep; 67*d83cc019SAndroid Build Coastguard Worker@@ 68*d83cc019SAndroid Build Coastguard Worker-printf(Ep); 69*d83cc019SAndroid Build Coastguard Worker+igt_info(Ep); 70*d83cc019SAndroid Build Coastguard Worker 71*d83cc019SAndroid Build Coastguard Worker// No abort for tests, really. Should only be used for internal library checks 72*d83cc019SAndroid Build Coastguard Worker// in lib/* 73*d83cc019SAndroid Build Coastguard Worker@@ 74*d83cc019SAndroid Build Coastguard Worker@@ 75*d83cc019SAndroid Build Coastguard Worker-abort(); 76*d83cc019SAndroid Build Coastguard Worker+igt_fail(IGT_EXIT_FAILURE); 77*d83cc019SAndroid Build Coastguard Worker 78*d83cc019SAndroid Build Coastguard Worker@@ 79*d83cc019SAndroid Build Coastguard Workeriterator name for_each_pipe; 80*d83cc019SAndroid Build Coastguard Workerigt_display_t *display; 81*d83cc019SAndroid Build Coastguard Workerexpression pipe; 82*d83cc019SAndroid Build Coastguard Worker@@ 83*d83cc019SAndroid Build Coastguard Worker- for (pipe = 0; pipe < igt_display_get_n_pipes(display); pipe++) { 84*d83cc019SAndroid Build Coastguard Worker+ for_each_pipe (display, pipe) { 85*d83cc019SAndroid Build Coastguard Worker... 86*d83cc019SAndroid Build Coastguard Worker} 87*d83cc019SAndroid Build Coastguard Worker 88*d83cc019SAndroid Build Coastguard Worker// Tests really shouldn't use plain assert! 89*d83cc019SAndroid Build Coastguard Worker@@ 90*d83cc019SAndroid Build Coastguard Workerexpression E; 91*d83cc019SAndroid Build Coastguard Worker@@ 92*d83cc019SAndroid Build Coastguard Worker- assert(E); 93*d83cc019SAndroid Build Coastguard Worker+ igt_assert(E); 94*d83cc019SAndroid Build Coastguard Worker 95*d83cc019SAndroid Build Coastguard Worker// Replace open-coded igt_swap() 96*d83cc019SAndroid Build Coastguard Worker@@ 97*d83cc019SAndroid Build Coastguard Workertype T; 98*d83cc019SAndroid Build Coastguard WorkerT a, b, tmp; 99*d83cc019SAndroid Build Coastguard Worker@@ 100*d83cc019SAndroid Build Coastguard Worker- tmp = a; 101*d83cc019SAndroid Build Coastguard Worker- a = b; 102*d83cc019SAndroid Build Coastguard Worker- b = tmp; 103*d83cc019SAndroid Build Coastguard Worker+ igt_swap(a, b); 104*d83cc019SAndroid Build Coastguard Worker 105*d83cc019SAndroid Build Coastguard Worker// Replace open-coded min() 106*d83cc019SAndroid Build Coastguard Worker@@ 107*d83cc019SAndroid Build Coastguard Workerexpression a; 108*d83cc019SAndroid Build Coastguard Workerexpression b; 109*d83cc019SAndroid Build Coastguard Worker@@ 110*d83cc019SAndroid Build Coastguard Worker( 111*d83cc019SAndroid Build Coastguard Worker- ((a) < (b) ? (a) : (b)) 112*d83cc019SAndroid Build Coastguard Worker+ min(a, b) 113*d83cc019SAndroid Build Coastguard Worker| 114*d83cc019SAndroid Build Coastguard Worker- ((a) <= (b) ? (a) : (b)) 115*d83cc019SAndroid Build Coastguard Worker+ min(a, b) 116*d83cc019SAndroid Build Coastguard Worker) 117*d83cc019SAndroid Build Coastguard Worker 118*d83cc019SAndroid Build Coastguard Worker// Replace open-coded max() 119*d83cc019SAndroid Build Coastguard Worker@@ 120*d83cc019SAndroid Build Coastguard Workerexpression a; 121*d83cc019SAndroid Build Coastguard Workerexpression b; 122*d83cc019SAndroid Build Coastguard Worker@@ 123*d83cc019SAndroid Build Coastguard Worker( 124*d83cc019SAndroid Build Coastguard Worker- ((a) > (b) ? (a) : (b)) 125*d83cc019SAndroid Build Coastguard Worker+ max(a, b) 126*d83cc019SAndroid Build Coastguard Worker| 127*d83cc019SAndroid Build Coastguard Worker- ((a) >= (b) ? (a) : (b)) 128*d83cc019SAndroid Build Coastguard Worker+ max(a, b) 129*d83cc019SAndroid Build Coastguard Worker) 130*d83cc019SAndroid Build Coastguard Worker 131*d83cc019SAndroid Build Coastguard Worker// drm_open_any always returns a valid file descriptor 132*d83cc019SAndroid Build Coastguard Worker@@ 133*d83cc019SAndroid Build Coastguard Workerexpression a; 134*d83cc019SAndroid Build Coastguard Worker@@ 135*d83cc019SAndroid Build Coastguard Workera = drm_open_any(); 136*d83cc019SAndroid Build Coastguard Worker( 137*d83cc019SAndroid Build Coastguard Worker- igt_assert(a >= 0); 138*d83cc019SAndroid Build Coastguard Worker| 139*d83cc019SAndroid Build Coastguard Worker- if (a < 0) { 140*d83cc019SAndroid Build Coastguard Worker- ... 141*d83cc019SAndroid Build Coastguard Worker- return ...; 142*d83cc019SAndroid Build Coastguard Worker- } 143*d83cc019SAndroid Build Coastguard Worker) 144*d83cc019SAndroid Build Coastguard Worker 145*d83cc019SAndroid Build Coastguard Worker// Use comparison macros instead of raw igt_assert when possible 146*d83cc019SAndroid Build Coastguard Worker@@ 147*d83cc019SAndroid Build Coastguard Workertypedef uint32_t; 148*d83cc019SAndroid Build Coastguard Workeruint32_t E1, E2; 149*d83cc019SAndroid Build Coastguard Workerint E3, E4; 150*d83cc019SAndroid Build Coastguard Worker@@ 151*d83cc019SAndroid Build Coastguard Worker( 152*d83cc019SAndroid Build Coastguard Worker- igt_assert(E1 == E2); 153*d83cc019SAndroid Build Coastguard Worker+ igt_assert_eq_u32(E1, E2); 154*d83cc019SAndroid Build Coastguard Worker| 155*d83cc019SAndroid Build Coastguard Worker- igt_assert(E1 != E2); 156*d83cc019SAndroid Build Coastguard Worker+ igt_assert_neq_u32(E1, E2); 157*d83cc019SAndroid Build Coastguard Worker| 158*d83cc019SAndroid Build Coastguard Worker- igt_assert(E1 <= E2); 159*d83cc019SAndroid Build Coastguard Worker+ igt_assert_lte_u32(E1, E2); 160*d83cc019SAndroid Build Coastguard Worker| 161*d83cc019SAndroid Build Coastguard Worker- igt_assert(E1 < E2); 162*d83cc019SAndroid Build Coastguard Worker+ igt_assert_lt_u32(E1, E2); 163*d83cc019SAndroid Build Coastguard Worker| 164*d83cc019SAndroid Build Coastguard Worker- igt_assert(E1 >= E2); 165*d83cc019SAndroid Build Coastguard Worker+ igt_assert_lte_u32(E2, E1); 166*d83cc019SAndroid Build Coastguard Worker| 167*d83cc019SAndroid Build Coastguard Worker- igt_assert(E1 > E2); 168*d83cc019SAndroid Build Coastguard Worker+ igt_assert_lt_u32(E2, E1); 169*d83cc019SAndroid Build Coastguard Worker| 170*d83cc019SAndroid Build Coastguard Worker- igt_assert(E3 == E4); 171*d83cc019SAndroid Build Coastguard Worker+ igt_assert_eq(E3, E4); 172*d83cc019SAndroid Build Coastguard Worker| 173*d83cc019SAndroid Build Coastguard Worker- igt_assert(E3 != E4); 174*d83cc019SAndroid Build Coastguard Worker+ igt_assert_neq(E3, E4); 175*d83cc019SAndroid Build Coastguard Worker| 176*d83cc019SAndroid Build Coastguard Worker- igt_assert(E3 <= E4); 177*d83cc019SAndroid Build Coastguard Worker+ igt_assert_lte(E3, E4); 178*d83cc019SAndroid Build Coastguard Worker| 179*d83cc019SAndroid Build Coastguard Worker- igt_assert(E3 < E4); 180*d83cc019SAndroid Build Coastguard Worker+ igt_assert_lt(E3, E4); 181*d83cc019SAndroid Build Coastguard Worker| 182*d83cc019SAndroid Build Coastguard Worker- igt_assert(E3 >= E4); 183*d83cc019SAndroid Build Coastguard Worker+ igt_assert_lte(E4, E3); 184*d83cc019SAndroid Build Coastguard Worker| 185*d83cc019SAndroid Build Coastguard Worker- igt_assert(E3 > E4); 186*d83cc019SAndroid Build Coastguard Worker+ igt_assert_lt(E4, E3); 187*d83cc019SAndroid Build Coastguard Worker) 188*d83cc019SAndroid Build Coastguard Worker 189*d83cc019SAndroid Build Coastguard Worker// avoid unused-result warnings when compiling with _FORTIFY_SOURCE defined 190*d83cc019SAndroid Build Coastguard Worker@@ 191*d83cc019SAndroid Build Coastguard Workeridentifier func =~ "^(read|write)$"; 192*d83cc019SAndroid Build Coastguard Workerexpression list[2] E; 193*d83cc019SAndroid Build Coastguard Workerexpression size; 194*d83cc019SAndroid Build Coastguard Worker@@ 195*d83cc019SAndroid Build Coastguard Worker-func(E, size); 196*d83cc019SAndroid Build Coastguard Worker+igt_assert_eq(func(E, size), size); 197*d83cc019SAndroid Build Coastguard Worker 198*d83cc019SAndroid Build Coastguard Worker@@ 199*d83cc019SAndroid Build Coastguard Workerexpression ptr, size, nmemb, stream; 200*d83cc019SAndroid Build Coastguard Worker@@ 201*d83cc019SAndroid Build Coastguard Worker-fread(ptr, size, nmemb, stream); 202*d83cc019SAndroid Build Coastguard Worker+igt_assert_eq(fread(ptr, size, nmemb, stream), nmemb); 203*d83cc019SAndroid Build Coastguard Worker 204*d83cc019SAndroid Build Coastguard Worker@@ 205*d83cc019SAndroid Build Coastguard Workerexpression list E; 206*d83cc019SAndroid Build Coastguard Worker@@ 207*d83cc019SAndroid Build Coastguard Worker-fgets(E); 208*d83cc019SAndroid Build Coastguard Worker+igt_assert(fgets(E) != NULL); 209*d83cc019SAndroid Build Coastguard Worker 210*d83cc019SAndroid Build Coastguard Worker@@ 211*d83cc019SAndroid Build Coastguard Workeridentifier func =~ "^v?asprintf$"; 212*d83cc019SAndroid Build Coastguard Workerexpression list E; 213*d83cc019SAndroid Build Coastguard Worker@@ 214*d83cc019SAndroid Build Coastguard Worker-func(E); 215*d83cc019SAndroid Build Coastguard Worker+igt_assert_neq(func(E), -1); 216*d83cc019SAndroid Build Coastguard Worker 217*d83cc019SAndroid Build Coastguard Worker// replace open-coded do_ioctl 218*d83cc019SAndroid Build Coastguard Worker@@ 219*d83cc019SAndroid Build Coastguard Workerexpression a, b, c, e; 220*d83cc019SAndroid Build Coastguard Worker@@ 221*d83cc019SAndroid Build Coastguard Worker( 222*d83cc019SAndroid Build Coastguard Worker-do_or_die(drmIoctl(a, b, c)); 223*d83cc019SAndroid Build Coastguard Worker+do_ioctl(a, b, c); 224*d83cc019SAndroid Build Coastguard Worker| 225*d83cc019SAndroid Build Coastguard Worker-igt_assert(drmIoctl(a, b, c) == 0); 226*d83cc019SAndroid Build Coastguard Worker+do_ioctl(a, b, c); 227*d83cc019SAndroid Build Coastguard Worker| 228*d83cc019SAndroid Build Coastguard Worker-igt_assert(drmIoctl(a, b, c) == -1 && errno == e); 229*d83cc019SAndroid Build Coastguard Worker+do_ioctl_err(a, b, c, e); 230*d83cc019SAndroid Build Coastguard Worker| 231*d83cc019SAndroid Build Coastguard Worker-igt_assert(drmIoctl(a, b, c) < 0 && errno == e); 232*d83cc019SAndroid Build Coastguard Worker+do_ioctl_err(a, b, c, e); 233*d83cc019SAndroid Build Coastguard Worker) 234