meta-stx: re-name and re-org to align with upstream
[pti/rtp.git] / meta-starlingx / meta-stx-integ / recipes-core / systemd / files / 0900-inject-milisec-in-syslog-date.patch
diff --git a/meta-starlingx/meta-stx-integ/recipes-core/systemd/files/0900-inject-milisec-in-syslog-date.patch b/meta-starlingx/meta-stx-integ/recipes-core/systemd/files/0900-inject-milisec-in-syslog-date.patch
new file mode 100644 (file)
index 0000000..4a768fa
--- /dev/null
@@ -0,0 +1,76 @@
+From 5ef6dbb951246912ba021f9e2edacd0f9e7619e6 Mon Sep 17 00:00:00 2001
+From: "Sar Ashki, Babak" <Babak.SarAshki@windriver.com>
+Date: Sat, 29 Feb 2020 12:48:57 -0800
+Subject: [PATCH] inject milisec in syslog date
+
+From stx.3.0: 0231aba5cdcb96b15106591acfff280159050366
+---
+ src/journal/journald-syslog.c | 45 +++++++++++++++++++++++++++++++----
+ 1 file changed, 40 insertions(+), 5 deletions(-)
+
+diff --git a/src/journal/journald-syslog.c b/src/journal/journald-syslog.c
+index a60a259bc4..0036750353 100644
+--- a/src/journal/journald-syslog.c
++++ b/src/journal/journald-syslog.c
+@@ -25,6 +25,44 @@
+ /* Warn once every 30s if we missed syslog message */
+ #define WARN_FORWARD_SYSLOG_MISSED_USEC (30 * USEC_PER_SEC)
++/*  internal function that builds a formatted time str of the
++ *  tv parameter into the passed buffer. (ie Nov  7 16:28:38.109)
++ *  If tv is NULL, then the clock function is used to build the formatted time
++ *  returns (same as snprintf) - number of characters written to buffer.
++ */
++static int formatSyslogDate(char * buffer, int bufLen, const struct timeval *tv) {
++  struct timeval tv_tmp;
++  long int millisec;
++  char tmpbuf[64];
++  struct tm *tm;
++  time_t t;
++
++  if (!tv) {
++      // no timeval input so get time data from clock
++      usec_t now_usec  = now(CLOCK_REALTIME);
++      time_t now_sec = ((time_t) now_usec / USEC_PER_SEC);
++      long int now_fraction_secs = now_usec % USEC_PER_SEC;
++      tv_tmp.tv_sec = now_sec;
++      tv_tmp.tv_usec = now_fraction_secs;
++      tv = &tv_tmp;
++  }
++
++  t = tv->tv_sec;
++  tm = localtime(&t);
++  if (!tm)
++     return 0;
++
++  // format time to the second granularity - ie Nov  7 16:28:38
++  if (strftime(tmpbuf,sizeof(tmpbuf),"%h %e %T", tm) <= 0)
++     return 0;
++
++  millisec = tv->tv_usec / 1000;
++  // now append millisecond granularity (ie Nov  7 16:28:38.109) to
++  // the formatted string.
++  return snprintf(buffer, bufLen, "%s.%03lu", tmpbuf, millisec);
++}
++
++
+ static void forward_syslog_iovec(Server *s, const struct iovec *iovec, unsigned n_iovec, const struct ucred *ucred, const struct timeval *tv) {
+         static const union sockaddr_union sa = {
+@@ -133,11 +171,8 @@ void server_forward_syslog(Server *s, int priority, const char *identifier, cons
+         iovec[n++] = IOVEC_MAKE_STRING(header_priority);
+         /* Second: timestamp */
+-        t = tv ? tv->tv_sec : ((time_t) (now(CLOCK_REALTIME) / USEC_PER_SEC));
+-        if (!localtime_r(&t, &tm))
+-                return;
+-        if (strftime(header_time, sizeof(header_time), "%h %e %T ", &tm) <= 0)
+-                return;
++      if (formatSyslogDate(header_time, sizeof(header_time), tv) <=0 )
++              return;
+         iovec[n++] = IOVEC_MAKE_STRING(header_time);
+         /* Third: identifier and PID */
+-- 
+2.23.0
+