brintos

brintos / linux-shallow public Read only

0
0
Text · 2.3 KiB · 20daaf1 Raw
111 lines · c
1/* Set tz value2 *              by: John Stultz <john.stultz@linaro.org>3 *              (C) Copyright Linaro 20164 *              Licensed under the GPLv25 *6 *   This program is free software: you can redistribute it and/or modify7 *   it under the terms of the GNU General Public License as published by8 *   the Free Software Foundation, either version 2 of the License, or9 *   (at your option) any later version.10 *11 *   This program is distributed in the hope that it will be useful,12 *   but WITHOUT ANY WARRANTY; without even the implied warranty of13 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the14 *   GNU General Public License for more details.15 */16 17 18#include <stdio.h>19#include <stdlib.h>20#include <time.h>21#include <sys/time.h>22#include <sys/timex.h>23#include <string.h>24#include <signal.h>25#include <unistd.h>26#include "../kselftest.h"27 28int set_tz(int min, int dst)29{30	struct timezone tz;31 32	tz.tz_minuteswest = min;33	tz.tz_dsttime = dst;34 35	return settimeofday(0, &tz);36}37 38int get_tz_min(void)39{40	struct timezone tz;41	struct timeval tv;42 43	memset(&tz, 0, sizeof(tz));44	gettimeofday(&tv, &tz);45	return tz.tz_minuteswest;46}47 48int get_tz_dst(void)49{50	struct timezone tz;51	struct timeval tv;52 53	memset(&tz, 0, sizeof(tz));54	gettimeofday(&tv, &tz);55	return tz.tz_dsttime;56}57 58int main(int argc, char **argv)59{60	int i, ret;61	int min, dst;62 63	min = get_tz_min();64	dst = get_tz_dst();65	printf("tz_minuteswest started at %i, dst at %i\n", min, dst);66 67	printf("Checking tz_minuteswest can be properly set: ");68	fflush(stdout);69	for (i = -15*60; i < 15*60; i += 30) {70		ret = set_tz(i, dst);71		ret = get_tz_min();72		if (ret != i) {73			printf("[FAILED] expected: %i got %i\n", i, ret);74			goto err;75		}76	}77	printf("[OK]\n");78 79	printf("Checking invalid tz_minuteswest values are caught: ");80	fflush(stdout);81 82	if (!set_tz(-15*60-1, dst)) {83		printf("[FAILED] %i didn't return failure!\n", -15*60-1);84		goto err;85	}86 87	if (!set_tz(15*60+1, dst)) {88		printf("[FAILED] %i didn't return failure!\n", 15*60+1);89		goto err;90	}91 92	if (!set_tz(-24*60, dst)) {93		printf("[FAILED] %i didn't return failure!\n", -24*60);94		goto err;95	}96 97	if (!set_tz(24*60, dst)) {98		printf("[FAILED] %i didn't return failure!\n", 24*60);99		goto err;100	}101 102	printf("[OK]\n");103 104	set_tz(min, dst);105	ksft_exit_pass();106 107err:108	set_tz(min, dst);109	ksft_exit_fail();110}111