#!/bin/sh -ex
type sudo >/dev/null 2>&1 && sudo=sudo || sudo=
-common_packages='autoconf automake file gawk gcc-multilib git gzip libunwind8-dev make xz-utils'
+common_packages='autoconf automake faketime file gawk gcc-multilib git gzip libunwind8-dev make xz-utils'
updated=
apt_get_install()
(long long) ts.tv_sec, (long) ts.tv_nsec / 1000);
} else {
time_t local = ts.tv_sec;
- char str[sizeof("HH:MM:SS")];
+ char str[MAX(sizeof("HH:MM:SS"), sizeof(ts.tv_sec) * 3)];
+ struct tm *tm = localtime(&local);
- strftime(str, sizeof(str), "%T", localtime(&local));
+ if (tm)
+ strftime(str, sizeof(str), "%T", tm);
+ else
+ xsprintf(str, "%lld", (long long) local);
if (tflag > 1)
tprintf("%s.%06ld ",
str, (long) ts.tv_nsec / 1000);
linkat
list_sigaction_signum
llseek
+localtime
lookup_dcookie
lseek
lstat
is_linux_mips_n64 \
ksysent \
list_sigaction_signum \
+ localtime \
mmsg-silent \
mmsg_name-v \
msg_control-v \
fstat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
fstatat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
ftruncate64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
+localtime_LDADD = $(clock_LIBS) $(LDADD)
lstat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
mmap64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
mq_LDADD = $(mq_LIBS) $(LDADD)
inject-nf.test \
interactive_block.test \
ksysent.test \
+ localtime.test \
opipe.test \
options-syntax.test \
pc.test \
--- /dev/null
+/*
+ * Check handling of localtime() returning NULL in printleader().
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <assert.h>
+#include <stdio.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <asm/unistd.h>
+
+int
+main(void)
+{
+ struct timespec ts;
+ int pid;
+
+ assert(!clock_gettime(CLOCK_REALTIME, &ts));
+
+ pid = syscall(__NR_gettid);
+
+ /* We expect localtime to fail here */
+ printf("%lld.%06ld gettid() = %d\n",
+ (long long) ts.tv_sec, (long) (ts.tv_nsec / 1000), pid);
+
+ printf("%lld.%06ld +++ exited with 0 +++\n",
+ (long long) ts.tv_sec, (long) (ts.tv_nsec / 1000));
+
+ return 0;
+}
--- /dev/null
+#!/bin/sh
+#
+# Check handling of localtime() failure in printleader().
+#
+# Copyright (c) 2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/init.sh"
+
+check_prog faketime
+faketime -f +1000000000000000000x0 ../$NAME | grep -q '^100000000' \
+ || framework_skip_ 'faketime failed to fake time'
+
+STRACE="faketime -f +1000000000000000000x0 $STRACE"
+
+run_strace_match_diff -tt -a10 -e trace=gettid