VTS: kselftest rtctest am: 7b7fc39a3b am: 9be42dbeca am: 22ad13f4c1 am: 243ec140aa

Original change: https://android-review.googlesource.com/c/platform/external/linux-kselftest/+/1416090

Change-Id: If8582263ec09e7330aa002c4dca93fd7f725820d
diff --git a/tools/testing/selftests/rtc/rtctest.c b/tools/testing/selftests/rtc/rtctest.c
index 92c4035..44cd1b6 100644
--- a/tools/testing/selftests/rtc/rtctest.c
+++ b/tools/testing/selftests/rtc/rtctest.c
@@ -5,11 +5,13 @@
  * Copyright (c) 2018 Alexandre Belloni <alexandre.belloni@bootlin.com>
  */
 
+#include <dirent.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <linux/rtc.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <sys/ioctl.h>
 #include <sys/time.h>
 #include <sys/types.h>
@@ -23,6 +25,25 @@
 
 static char *rtc_file = "/dev/rtc0";
 
+/* Returns 1 if file matching /dev/rtc* is found, else 0. */
+static int has_rtc(void)
+{
+	DIR *dev_dir;
+	struct dirent *dir;
+
+	dev_dir = opendir("/dev");
+	if (!dev_dir)
+		return 0;
+	while ((dir = readdir(dev_dir))) {
+		if (!strncmp(dir->d_name, "rtc", 3)) {
+			closedir(dev_dir);
+			return 1;
+		}
+	}
+	closedir(dev_dir);
+	return 0;
+}
+
 FIXTURE(rtc) {
 	int fd;
 };
@@ -40,6 +61,9 @@
 	int rc;
 	struct rtc_time rtc_tm;
 
+	if (!has_rtc())
+		return;
+
 	/* Read the RTC time/date */
 	rc = ioctl(self->fd, RTC_RD_TIME, &rtc_tm);
 	ASSERT_NE(-1, rc);