diff options
Diffstat (limited to 'package/busybox')
| -rw-r--r-- | package/busybox/Makefile | 2 | ||||
| -rw-r--r-- | package/busybox/patches/911-date-k-flag.patch | 83 | 
2 files changed, 84 insertions, 1 deletions
diff --git a/package/busybox/Makefile b/package/busybox/Makefile index 7770a538e..2a92d5731 100644 --- a/package/busybox/Makefile +++ b/package/busybox/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk  PKG_NAME:=busybox  PKG_VERSION:=1.19.3 -PKG_RELEASE:=7 +PKG_RELEASE:=8  PKG_FLAGS:=essential  PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 diff --git a/package/busybox/patches/911-date-k-flag.patch b/package/busybox/patches/911-date-k-flag.patch new file mode 100644 index 000000000..c4f6db4db --- /dev/null +++ b/package/busybox/patches/911-date-k-flag.patch @@ -0,0 +1,83 @@ +--- a/coreutils/date.c ++++ b/coreutils/date.c +@@ -123,6 +123,7 @@ + //usage:	IF_FEATURE_DATE_ISOFMT( + //usage:     "\n	-D FMT		Use FMT for -d TIME conversion" + //usage:	) ++//usage:     "\n	-k		Set Kernel timezone from localtime and exit" + //usage:     "\n" + //usage:     "\nRecognized TIME formats:" + //usage:     "\n	hh:mm[:ss]" +@@ -135,6 +136,7 @@ + //usage:       "Wed Apr 12 18:52:41 MDT 2000\n" +  + #include "libbb.h" ++#include <sys/time.h> + #if ENABLE_FEATURE_DATE_NANO + # include <sys/syscall.h> + #endif +@@ -145,8 +147,9 @@ enum { + 	OPT_UTC       = (1 << 2), /* u */ + 	OPT_DATE      = (1 << 3), /* d */ + 	OPT_REFERENCE = (1 << 4), /* r */ +-	OPT_TIMESPEC  = (1 << 5) * ENABLE_FEATURE_DATE_ISOFMT, /* I */ +-	OPT_HINT      = (1 << 6) * ENABLE_FEATURE_DATE_ISOFMT, /* D */ ++	OPT_KERNELTZ  = (1 << 5), /* k */ ++	OPT_TIMESPEC  = (1 << 6) * ENABLE_FEATURE_DATE_ISOFMT, /* I */ ++	OPT_HINT      = (1 << 7) * ENABLE_FEATURE_DATE_ISOFMT, /* D */ + }; +  + static void maybe_set_utc(int opt) +@@ -164,12 +167,15 @@ static const char date_longopts[] ALIGN1 + 	/*	"universal\0" No_argument       "u" */ + 		"date\0"      Required_argument "d" + 		"reference\0" Required_argument "r" ++		"set-kernel-tz\0" No_argument   "k" + 		; + #endif +  + int date_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; + int date_main(int argc UNUSED_PARAM, char **argv) + { ++	time_t tt; ++	struct timezone tz; + 	struct timespec ts; + 	struct tm tm_time; + 	char buf_fmt_dt2str[64]; +@@ -184,7 +190,7 @@ int date_main(int argc UNUSED_PARAM, cha + 	opt_complementary = "d--s:s--d" + 		IF_FEATURE_DATE_ISOFMT(":R--I:I--R"); + 	IF_LONG_OPTS(applet_long_options = date_longopts;) +-	opt = getopt32(argv, "Rs:ud:r:" ++	opt = getopt32(argv, "Rs:ud:r:k" + 			IF_FEATURE_DATE_ISOFMT("I::D:"), + 			&date_str, &date_str, &filename + 			IF_FEATURE_DATE_ISOFMT(, &isofmt_arg, &fmt_str2dt)); +@@ -241,6 +247,27 @@ int date_main(int argc UNUSED_PARAM, cha + 	if (*argv) + 		bb_show_usage(); +  ++	/* Setting of kernel timezone was requested */ ++	if (opt & OPT_KERNELTZ) { ++		tt = time(NULL); ++		localtime_r(&tt, &tm_time); ++ ++		/* workaround warp_clock() on first invocation */ ++		memset(&tz, 0, sizeof(tz)); ++		settimeofday(NULL, &tz); ++ ++		memset(&tz, 0, sizeof(tz)); ++		tz.tz_minuteswest = -(tm_time.tm_gmtoff / 60); ++ ++		if (settimeofday(NULL, &tz)) ++		{ ++			bb_perror_msg("can't set kernel time zone"); ++			return EXIT_FAILURE; ++		} ++ ++		return EXIT_SUCCESS; ++	} ++ + 	/* Now we have parsed all the information except the date format + 	 * which depends on whether the clock is being set or read */ +   | 
