# HG changeset patch # User Markus Brökers # Date 1283088562 -7200 # Node ID f064cd793f8dd9f3e0bd4289368ff7e27e501953 # Parent 88d9b8bfa7a544ab090b3c411f3273c70862f30d sts: show time stamps added diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -68,6 +68,7 @@ TARGET += compliteral TARGET += getbits TARGET += fun +TARGET += sts # needs ncursesw TARGET += ncurses @@ -356,6 +357,10 @@ @echo Linking $<... @$(CC) -Wall -O2 -g -ggdb $(LDFLAGS) $< -o $@ +sts: sts.o + @echo Linking $<... + @$(CC) -Wall -O2 -lm -g -ggdb $(LDFLAGS) $< -o $@ + .PHONY: beauty clean uninstall clean: diff --git a/sts.c b/sts.c new file mode 100644 --- /dev/null +++ b/sts.c @@ -0,0 +1,69 @@ +/** + * sts.c: show time stamp + * Copyright (C) 2010 Markus Broeker + */ + +#include +#include +#include +#include +#include +#include + +void usage (char *name) +{ + printf ("Usage: %s STAMP [BOOT-STAMP]\n", name); + exit (EXIT_FAILURE); +} + +time_t parse (char *buf) +{ + time_t sec = 0; + time_t milli = 0; + double value; + + if (sscanf (buf, "%ld.%ld", &sec, &milli) != 2) { + fprintf (stderr, " sec: %ld, ", sec); + fprintf (stderr, "milli: %ld\n", milli); + } + + value = (milli / 1000000); + return sec + (time_t) (floor (value)); +} + +time_t getboottime () +{ + char buf[80]; + time_t now = time (NULL); + + FILE *f = fopen ("/proc/uptime", "r"); + if (fgets (buf, sizeof (buf), f) == NULL) { + perror ("FOPEN"); + exit (errno); + } + + fclose (f); + return now - parse (buf); +} + +int main (int argc, char **argv) +{ + time_t boot; + time_t stamp = 0; + time_t diff; + + if (argc < 2) + usage (argv[0]); + + stamp = parse (argv[1]); + + if (argc == 3) { + boot = parse (argv[2]); + } else + boot = getboottime (); + + diff = boot + stamp; + printf ("%s: %s", argv[1], ctime (&diff)); + + return EXIT_SUCCESS; +}