cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

setdate.c (1732B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/* Real Time Clock Driver Test
      3 *	by: Benjamin Gaignard (benjamin.gaignard@linaro.org)
      4 *
      5 * To build
      6 *	gcc rtctest_setdate.c -o rtctest_setdate
      7 */
      8
      9#include <stdio.h>
     10#include <linux/rtc.h>
     11#include <sys/ioctl.h>
     12#include <sys/time.h>
     13#include <sys/types.h>
     14#include <fcntl.h>
     15#include <unistd.h>
     16#include <stdlib.h>
     17#include <errno.h>
     18
     19static const char default_time[] = "00:00:00";
     20
     21int main(int argc, char **argv)
     22{
     23	int fd, retval;
     24	struct rtc_time new, current;
     25	const char *rtc, *date;
     26	const char *time = default_time;
     27
     28	switch (argc) {
     29	case 4:
     30		time = argv[3];
     31		/* FALLTHROUGH */
     32	case 3:
     33		date = argv[2];
     34		rtc = argv[1];
     35		break;
     36	default:
     37		fprintf(stderr, "usage: rtctest_setdate <rtcdev> <DD-MM-YYYY> [HH:MM:SS]\n");
     38		return 1;
     39	}
     40
     41	fd = open(rtc, O_RDONLY);
     42	if (fd == -1) {
     43		perror(rtc);
     44		exit(errno);
     45	}
     46
     47	sscanf(date, "%d-%d-%d", &new.tm_mday, &new.tm_mon, &new.tm_year);
     48	new.tm_mon -= 1;
     49	new.tm_year -= 1900;
     50	sscanf(time, "%d:%d:%d", &new.tm_hour, &new.tm_min, &new.tm_sec);
     51
     52	fprintf(stderr, "Test will set RTC date/time to %d-%d-%d, %02d:%02d:%02d.\n",
     53		new.tm_mday, new.tm_mon + 1, new.tm_year + 1900,
     54		new.tm_hour, new.tm_min, new.tm_sec);
     55
     56	/* Write the new date in RTC */
     57	retval = ioctl(fd, RTC_SET_TIME, &new);
     58	if (retval == -1) {
     59		perror("RTC_SET_TIME ioctl");
     60		close(fd);
     61		exit(errno);
     62	}
     63
     64	/* Read back */
     65	retval = ioctl(fd, RTC_RD_TIME, &current);
     66	if (retval == -1) {
     67		perror("RTC_RD_TIME ioctl");
     68		exit(errno);
     69	}
     70
     71	fprintf(stderr, "\n\nCurrent RTC date/time is %d-%d-%d, %02d:%02d:%02d.\n",
     72		current.tm_mday, current.tm_mon + 1, current.tm_year + 1900,
     73		current.tm_hour, current.tm_min, current.tm_sec);
     74
     75	close(fd);
     76	return 0;
     77}