[PATCH 12/17] last: add --since time spec option

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The --since and --until options are companions often needed together.

Signed-off-by: Sami Kerola <kerolasa@xxxxxx>
---
 login-utils/last.c | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/login-utils/last.c b/login-utils/last.c
index df78436..c23469e 100644
--- a/login-utils/last.c
+++ b/login-utils/last.c
@@ -426,8 +426,9 @@ static void __attribute__((__noreturn__)) usage(FILE *out)
 	fputs(_(" -i, --ip             display IP numbers in numbers-and-dots notation\n"), out);
 	fputs(_(" -n, --limit <number> how many lines to show\n"), out);
 	fputs(_(" -R, --nohostname     don't display the hostname field\n"), out);
-	fputs(_(" -t, --until <YYYYMMDDHHMMSS>  display the state of the specified time\n"), out);
-	fputs(_(" -p, --present <YYYYMMDDHHMMSS>  display who where present at the specified time\n"), out);
+	fputs(_(" -s, --since <time>   display the lines since the specified time\n"), out);
+	fputs(_(" -t, --until <time>   display the lines until the specified time\n"), out);
+	fputs(_(" -p, --present <time> display who where present at the specified time\n"), out);
 	fputs(_(" -w, --fullnames      display full user and domain names\n"), out);
 	fputs(_(" -x, --system         display system shutdown entries and run level changes\n"), out);
 
@@ -480,7 +481,7 @@ static time_t parsetm(char *ts)
 }
 
 static void process_wtmp_file(char *ufile, int lastb, int extended,
-			      time_t until, time_t present)
+			      time_t since, time_t until, time_t present)
 {
 	FILE *fp;		/* Filepointer of wtmp file */
 
@@ -549,6 +550,9 @@ static void process_wtmp_file(char *ufile, int lastb, int extended,
 		if (uread(fp, &ut, &quit) != 1)
 			break;
 
+		if (since && ut.ut_time < since)
+			continue;
+
 		if (until && until < ut.ut_time)
 			continue;
 
@@ -734,7 +738,8 @@ int main(int argc, char **argv)
 	int lastb = 0;		/* Is this 'lastb' ? */
 	int extended = 0;	/* Lots of info. */
 
-	time_t until = 0;	/* at what time to stop parsing the file */
+	time_t since = 0;	/* at what time to start displaying the file */
+	time_t until = 0;	/* at what time to stop displaying the file */
 	time_t present = 0;	/* who where present at time_t */
 	usec_t p;
 
@@ -745,6 +750,7 @@ int main(int argc, char **argv)
 	      { "nohostname", no_argument,       NULL, 'R' },
 	      { "version",    no_argument,       NULL, 'V' },
 	      { "hostlast",   no_argument,       NULL, 'a' },
+	      { "since",      required_argument, NULL, 's' },
 	      { "until",      required_argument, NULL, 't' },
 	      { "present",    required_argument, NULL, 'p' },
 	      { "system",     no_argument,       NULL, 'x' },
@@ -761,7 +767,7 @@ int main(int argc, char **argv)
 	atexit(close_stdout);
 
 	while ((c = getopt_long(argc, argv,
-			"hVf:n:RxadFit:p:0123456789w", long_opts, NULL)) != -1) {
+			"hVf:n:RxadFit:p:s:0123456789w", long_opts, NULL)) != -1) {
 		switch(c) {
 		case 'h':
 			usage(stdout);
@@ -803,6 +809,14 @@ int main(int argc, char **argv)
 				errx(EXIT_FAILURE, _("invalid time value \"%s\""), optarg);
 			present = (time_t) (p / 1000000);
 			break;
+		case 's':
+			since = parsetm(optarg);
+			if (since != (time_t) -1)
+				break;
+			if (parse_timestamp(optarg, &p) < 0)
+				errx(EXIT_FAILURE, _("invalid time value \"%s\""), optarg);
+			since = (time_t) (p / 1000000);
+			break;
 		case 't':
 			until = parsetm(optarg);
 			if (until != (time_t) -1)
@@ -844,7 +858,7 @@ int main(int argc, char **argv)
 	}
 
 	for (i = 0; i < altc; i++) {
-		process_wtmp_file(altv[i], lastb, extended, until, present);
+		process_wtmp_file(altv[i], lastb, extended, since, until, present);
 		free(altv[i]);
 	}
 	free(altv);
-- 
1.8.4

--
To unsubscribe from this list: send the line "unsubscribe util-linux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux