| diff --git a/Makefile.in b/Makefile.in |
| index 6f41217..ee8f40c 100644 |
| --- a/Makefile.in |
| +++ b/Makefile.in |
| @@ -1,4 +1,4 @@ |
| -# Makefile.in generated by automake 1.11 from Makefile.am. |
| +# Makefile.in generated by automake 1.11.1 from Makefile.am. |
| # @configure_input@ |
| |
| # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, |
| @@ -488,7 +488,8 @@ distdir: $(DISTFILES) |
| fi; \ |
| done |
| -test -n "$(am__skip_mode_fix)" \ |
| - || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ |
| + || find "$(distdir)" -type d ! -perm -755 \ |
| + -exec chmod u+rwx,go+rx {} \; -o \ |
| ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ |
| ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ |
| ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ |
| @@ -532,17 +533,17 @@ dist dist-all: distdir |
| distcheck: dist |
| case '$(DIST_ARCHIVES)' in \ |
| *.tar.gz*) \ |
| - GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ |
| + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ |
| *.tar.bz2*) \ |
| - bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ |
| + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ |
| *.tar.lzma*) \ |
| - unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ |
| + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ |
| *.tar.xz*) \ |
| xz -dc $(distdir).tar.xz | $(am__untar) ;;\ |
| *.tar.Z*) \ |
| uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ |
| *.shar.gz*) \ |
| - GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ |
| + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ |
| *.zip*) \ |
| unzip $(distdir).zip ;;\ |
| esac |
| diff --git a/configure b/configure |
| index f25c412..3b328b7 100755 |
| --- a/configure |
| +++ b/configure |
| @@ -4837,6 +4837,54 @@ else |
| fi |
| |
| |
| +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 |
| +$as_echo_n "checking for clock_gettime in -lrt... " >&6; } |
| +if test "${ac_cv_lib_rt_clock_gettime+set}" = set; then : |
| + $as_echo_n "(cached) " >&6 |
| +else |
| + ac_check_lib_save_LIBS=$LIBS |
| +LIBS="-lrt $LIBS" |
| +cat confdefs.h - <<_ACEOF >conftest.$ac_ext |
| +/* end confdefs.h. */ |
| + |
| +/* Override any GCC internal prototype to avoid an error. |
| + Use char because int might match the return type of a GCC |
| + builtin and then its argument prototype would still apply. */ |
| +#ifdef __cplusplus |
| +extern "C" |
| +#endif |
| +char clock_gettime (); |
| +int |
| +main () |
| +{ |
| +return clock_gettime (); |
| + ; |
| + return 0; |
| +} |
| +_ACEOF |
| +if ac_fn_c_try_link "$LINENO"; then : |
| + ac_cv_lib_rt_clock_gettime=yes |
| +else |
| + ac_cv_lib_rt_clock_gettime=no |
| +fi |
| +rm -f core conftest.err conftest.$ac_objext \ |
| + conftest$ac_exeext conftest.$ac_ext |
| +LIBS=$ac_check_lib_save_LIBS |
| +fi |
| +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 |
| +$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; } |
| +if test "x$ac_cv_lib_rt_clock_gettime" = x""yes; then : |
| + cat >>confdefs.h <<_ACEOF |
| +#define HAVE_LIBRT 1 |
| +_ACEOF |
| + |
| + LIBS="-lrt $LIBS" |
| + |
| +else |
| + as_fn_error "Could not find librt" "$LINENO" 5 |
| +fi |
| + |
| + |
| |
| ac_config_files="$ac_config_files Makefile" |
| |
| diff --git a/configure.ac b/configure.ac |
| index d611b38..583cf97 100644 |
| --- a/configure.ac |
| +++ b/configure.ac |
| @@ -24,6 +24,8 @@ LIBS="$LIBS -lsocket -lnsl"; break],[AC_MSG_ERROR([Could not find socket library |
| fi |
| AC_CHECK_FUNC([getaddrinfo],,[AC_MSG_ERROR([Could not find getaddrinfo library function])]) |
| |
| +AC_CHECK_LIB(rt, clock_gettime, , [AC_MSG_ERROR([Could not find librt])]) |
| + |
| dnl AC_CHECK_HEADER(X11/X.h,[],[AC_MSG_ERROR([Could not find X11/X.h])]) |
| dnl AC_CHECK_HEADER(X11/Xlib.h,[],[AC_MSG_ERROR([Could not find X11/Xlib.h])]) |
| dnl AC_CHECK_HEADER(X11/extensions/security.h,[],[AC_MSG_ERROR([Could not find X11/extensions/secruity.h])],[#include <X11/Xlib.h>]) |
| diff --git a/main.c b/main.c |
| index b6b27a6..a8e1725 100644 |
| --- a/main.c |
| +++ b/main.c |
| @@ -45,6 +45,7 @@ bool denyallextensions = false; |
| bool interactive = false; |
| bool print_timestamps = false; |
| bool print_reltimestamps = false; |
| +bool print_uptime = false; |
| static bool buffered = false; |
| size_t maxshownlistlen = SIZE_MAX; |
| |
| @@ -390,7 +391,7 @@ char *strndup(const char *str,size_t n) { |
| } |
| #endif |
| |
| -enum {LO_DEFAULT=0, LO_TIMESTAMPS, LO_RELTIMESTAMPS, LO_VERSION, LO_HELP}; |
| +enum {LO_DEFAULT=0, LO_TIMESTAMPS, LO_RELTIMESTAMPS, LO_UPTIME, LO_VERSION, LO_HELP}; |
| static int long_only_option = 0; |
| static const struct option longoptions[] = { |
| {"display", required_argument, NULL, 'd'}, |
| @@ -412,6 +413,7 @@ static const struct option longoptions[] = { |
| {"version", no_argument, &long_only_option, LO_VERSION}, |
| {"timestamps", no_argument, &long_only_option, LO_TIMESTAMPS}, |
| {"relative-timestamps", no_argument, &long_only_option, LO_RELTIMESTAMPS}, |
| + {"uptime", no_argument, &long_only_option, LO_UPTIME}, |
| {NULL, 0, NULL, 0} |
| }; |
| |
| @@ -526,6 +528,9 @@ argv[0]); |
| case LO_RELTIMESTAMPS: |
| print_reltimestamps = true; |
| break; |
| + case LO_UPTIME: |
| + print_uptime = true; |
| + break; |
| } |
| break; |
| case ':': |
| diff --git a/parse.c b/parse.c |
| index 8bdd363..b808766 100644 |
| --- a/parse.c |
| +++ b/parse.c |
| @@ -27,6 +27,7 @@ |
| #include <string.h> |
| #include <stdlib.h> |
| #include <sys/select.h> |
| +#include <time.h> |
| #include <unistd.h> |
| |
| #include "xtrace.h" |
| @@ -46,6 +47,7 @@ static inline unsigned int padded(unsigned int s) { |
| static void startline(struct connection *c, enum package_direction d, const char *format, ...) { |
| va_list ap; |
| struct timeval tv; |
| + struct timespec ts; |
| |
| if( (print_timestamps || print_reltimestamps) |
| && gettimeofday(&tv, NULL) == 0 ) { |
| @@ -60,6 +62,10 @@ static void startline(struct connection *c, enum package_direction d, const char |
| (unsigned int)((tt - c->starttime)%1000)); |
| } |
| } |
| + if( print_uptime && clock_gettime(CLOCK_MONOTONIC, &ts ) == 0 ) { |
| + fprintf(out, "%lu.%03u ", (unsigned long)ts.tv_sec, |
| + (unsigned int)(ts.tv_nsec/1000000)); |
| + } |
| va_start(ap, format); |
| fprintf(out, "%03d:%c:", c->id, (d == TO_SERVER)?'<':'>'); |
| vfprintf(out, format, ap); |
| @@ -1749,4 +1755,3 @@ const struct extension *find_extension(const uint8_t *name,size_t len) { |
| |
| return NULL; |
| } |
| - |
| diff --git a/xtrace.h b/xtrace.h |
| index 95a725a..1c9bd4a 100644 |
| --- a/xtrace.h |
| +++ b/xtrace.h |
| @@ -46,6 +46,7 @@ extern bool denyallextensions; |
| extern size_t maxshownlistlen; |
| extern bool print_timestamps; |
| extern bool print_reltimestamps; |
| +extern bool print_uptime; |
| |
| #ifdef __GNUC__ |
| #define UNUSED __attribute__ ((unused)) |