18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci/// Make sure (of/i2c/platform)_device_id tables are NULL terminated
38c2ecf20Sopenharmony_ci//
48c2ecf20Sopenharmony_ci// Keywords: of_table i2c_table platform_table
58c2ecf20Sopenharmony_ci// Confidence: Medium
68c2ecf20Sopenharmony_ci// Options: --include-headers
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_civirtual patch
98c2ecf20Sopenharmony_civirtual context
108c2ecf20Sopenharmony_civirtual org
118c2ecf20Sopenharmony_civirtual report
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci@depends on context@
148c2ecf20Sopenharmony_ciidentifier var, arr;
158c2ecf20Sopenharmony_ciexpression E;
168c2ecf20Sopenharmony_ci@@
178c2ecf20Sopenharmony_ci(
188c2ecf20Sopenharmony_cistruct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
198c2ecf20Sopenharmony_ci	...,
208c2ecf20Sopenharmony_ci	{
218c2ecf20Sopenharmony_ci	.var = E,
228c2ecf20Sopenharmony_ci*	}
238c2ecf20Sopenharmony_ci};
248c2ecf20Sopenharmony_ci|
258c2ecf20Sopenharmony_cistruct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
268c2ecf20Sopenharmony_ci	...,
278c2ecf20Sopenharmony_ci*	{ ..., E, ... },
288c2ecf20Sopenharmony_ci};
298c2ecf20Sopenharmony_ci)
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci@depends on patch@
328c2ecf20Sopenharmony_ciidentifier var, arr;
338c2ecf20Sopenharmony_ciexpression E;
348c2ecf20Sopenharmony_ci@@
358c2ecf20Sopenharmony_ci(
368c2ecf20Sopenharmony_cistruct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
378c2ecf20Sopenharmony_ci	...,
388c2ecf20Sopenharmony_ci	{
398c2ecf20Sopenharmony_ci	.var = E,
408c2ecf20Sopenharmony_ci-	}
418c2ecf20Sopenharmony_ci+	},
428c2ecf20Sopenharmony_ci+	{ }
438c2ecf20Sopenharmony_ci};
448c2ecf20Sopenharmony_ci|
458c2ecf20Sopenharmony_cistruct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
468c2ecf20Sopenharmony_ci	...,
478c2ecf20Sopenharmony_ci	{ ..., E, ... },
488c2ecf20Sopenharmony_ci+	{ },
498c2ecf20Sopenharmony_ci};
508c2ecf20Sopenharmony_ci)
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci@r depends on org || report@
538c2ecf20Sopenharmony_ciposition p1;
548c2ecf20Sopenharmony_ciidentifier var, arr;
558c2ecf20Sopenharmony_ciexpression E;
568c2ecf20Sopenharmony_ci@@
578c2ecf20Sopenharmony_ci(
588c2ecf20Sopenharmony_cistruct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
598c2ecf20Sopenharmony_ci	...,
608c2ecf20Sopenharmony_ci	{
618c2ecf20Sopenharmony_ci	.var = E,
628c2ecf20Sopenharmony_ci	}
638c2ecf20Sopenharmony_ci	@p1
648c2ecf20Sopenharmony_ci};
658c2ecf20Sopenharmony_ci|
668c2ecf20Sopenharmony_cistruct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
678c2ecf20Sopenharmony_ci	...,
688c2ecf20Sopenharmony_ci	{ ..., E, ... }
698c2ecf20Sopenharmony_ci	@p1
708c2ecf20Sopenharmony_ci};
718c2ecf20Sopenharmony_ci)
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ci@script:python depends on org@
748c2ecf20Sopenharmony_cip1 << r.p1;
758c2ecf20Sopenharmony_ciarr << r.arr;
768c2ecf20Sopenharmony_ci@@
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_cicocci.print_main(arr,p1)
798c2ecf20Sopenharmony_ci
808c2ecf20Sopenharmony_ci@script:python depends on report@
818c2ecf20Sopenharmony_cip1 << r.p1;
828c2ecf20Sopenharmony_ciarr << r.arr;
838c2ecf20Sopenharmony_ci@@
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_cimsg = "%s is not NULL terminated at line %s" % (arr, p1[0].line)
868c2ecf20Sopenharmony_cicoccilib.report.print_report(p1[0],msg)
87