busybox: fix setting the kernel timezone
[openwrt/svn-archive/archive.git] / package / utils / busybox / patches / 250-date-k-flag.patch
index d17d61f..111a861 100644 (file)
@@ -8,15 +8,19 @@
  //usage:     "\n"
  //usage:     "\nRecognized TIME formats:"
  //usage:     "\n      hh:mm[:ss]"
  //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"
  //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>
 +#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 */
        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)
  };
  
  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"
        /*      "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];
        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;)
        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));
                        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();
  
        if (*argv)
                bb_show_usage();
  
 +
 +              /* workaround warp_clock() on first invocation */
 +              memset(&tz, 0, sizeof(tz));
 +
 +              /* workaround warp_clock() on first invocation */
 +              memset(&tz, 0, sizeof(tz));
-+              settimeofday(NULL, &tz);
++              syscall(SYS_settimeofday, NULL, &tz);
 +
 +              memset(&tz, 0, sizeof(tz));
 +
 +              memset(&tz, 0, sizeof(tz));
-+#ifdef __USE_BSD
++#ifdef __USE_MISC
 +              tz.tz_minuteswest = -(tm_time.tm_gmtoff / 60);
 +#else
 +              tz.tz_minuteswest = -(tm_time.__tm_gmtoff / 60);
 +#endif
 +
 +              tz.tz_minuteswest = -(tm_time.tm_gmtoff / 60);
 +#else
 +              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;
 +              {
 +                      bb_perror_msg("can't set kernel time zone");
 +                      return EXIT_FAILURE;