busybox: fix setting the kernel timezone
authorJo-Philipp Wich <jo@mein.io>
Thu, 31 Mar 2016 13:26:42 +0000 (15:26 +0200)
committerJo-Philipp Wich <jo@mein.io>
Thu, 31 Mar 2016 13:26:42 +0000 (15:26 +0200)
The settimeofday() syscall wrapper provided by musl filters out the timezone
argument, breaking the ability to set the kernel timezone through the function.

Adjust busybox patch to issue the syscall directly in order to circumvent the
problem.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
package/utils/busybox/patches/250-date-k-flag.patch

index f0dab26898a2f8be1633c06dc665e31ababe7693..111a86156fdd3c0e411d04388b65f4ccf8ee672b 100644 (file)
@@ -8,15 +8,19 @@
  //usage:     "\n"
  //usage:     "\nRecognized TIME formats:"
  //usage:     "\n      hh:mm[:ss]"
-@@ -138,6 +139,7 @@
+@@ -138,9 +139,8 @@
  //usage:       "Wed Apr 12 18:52:41 MDT 2000\n"
  
  #include "libbb.h"
+-#if ENABLE_FEATURE_DATE_NANO
+-# include <sys/syscall.h>
+-#endif
 +#include <sys/time.h>
- #if ENABLE_FEATURE_DATE_NANO
- # include <sys/syscall.h>
- #endif
-@@ -148,8 +150,9 @@ enum {
++#include <sys/syscall.h>
+ enum {
+       OPT_RFC2822   = (1 << 0), /* R */
+@@ -148,8 +148,9 @@ enum {
        OPT_UTC       = (1 << 2), /* u */
        OPT_DATE      = (1 << 3), /* d */
        OPT_REFERENCE = (1 << 4), /* r */
@@ -28,7 +32,7 @@
  };
  
  static void maybe_set_utc(int opt)
-@@ -167,12 +170,15 @@ static const char date_longopts[] ALIGN1
+@@ -167,12 +168,15 @@ static const char date_longopts[] ALIGN1
        /*      "universal\0" No_argument       "u" */
                "date\0"      Required_argument "d"
                "reference\0" Required_argument "r"
@@ -44,7 +48,7 @@
        struct timespec ts;
        struct tm tm_time;
        char buf_fmt_dt2str[64];
-@@ -187,7 +193,7 @@ int date_main(int argc UNUSED_PARAM, cha
+@@ -187,7 +191,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;)
@@ -53,7 +57,7 @@
                        IF_FEATURE_DATE_ISOFMT("I::D:"),
                        &date_str, &date_str, &filename
                        IF_FEATURE_DATE_ISOFMT(, &isofmt_arg, &fmt_str2dt));
-@@ -244,6 +250,31 @@ int date_main(int argc UNUSED_PARAM, cha
+@@ -244,6 +248,31 @@ int date_main(int argc UNUSED_PARAM, cha
        if (*argv)
                bb_show_usage();
  
@@ -64,7 +68,7 @@
 +
 +              /* workaround warp_clock() on first invocation */
 +              memset(&tz, 0, sizeof(tz));
-+              settimeofday(NULL, &tz);
++              syscall(SYS_settimeofday, NULL, &tz);
 +
 +              memset(&tz, 0, sizeof(tz));
 +#ifdef __USE_MISC
@@ -73,7 +77,7 @@
 +              tz.tz_minuteswest = -(tm_time.__tm_gmtoff / 60);
 +#endif
 +
-+              if (settimeofday(NULL, &tz))
++              if (syscall(SYS_settimeofday, NULL, &tz))
 +              {
 +                      bb_perror_msg("can't set kernel time zone");
 +                      return EXIT_FAILURE;