summaryrefslogtreecommitdiff
path: root/commands
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2022-11-14 16:54:37 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2022-11-14 16:54:37 +0100
commit66544641b2dd00c37e16d8e1ac39a34ec4e57cb8 (patch)
treee6da99bd0d182f7f49a5c414425a4d40265274d4 /commands
parent5f41ca465e2afae789ac76faa8dcfbac849b4ff9 (diff)
parenta4b49c69c3ad1cf0e92943921a699fbe586b5706 (diff)
downloadbarebox-66544641b2dd00c37e16d8e1ac39a34ec4e57cb8.tar.gz
Merge branch 'for-next/misc'
Diffstat (limited to 'commands')
-rw-r--r--commands/Kconfig27
-rw-r--r--commands/Makefile2
-rw-r--r--commands/stat.c62
-rw-r--r--commands/uptime.c82
4 files changed, 173 insertions, 0 deletions
diff --git a/commands/Kconfig b/commands/Kconfig
index 9894ecb9aa..a59616ad14 100644
--- a/commands/Kconfig
+++ b/commands/Kconfig
@@ -947,6 +947,20 @@ config CMD_LS
-C column format (opposite of long format)
-R list subdirectories recursively
+config CMD_STAT
+ tristate
+ prompt "stat"
+ select PRINTF_UUID
+ help
+ Display file status
+
+ Usage: stat [-L] [FILEDIR...]
+
+ Display status information about the specified files or directories.
+
+ Options:
+ -L follow symlinks
+
config CMD_MD5SUM
tristate
select COMPILE_HASH
@@ -2275,6 +2289,19 @@ config CMD_TIME
Note: This command depends on COMMAND being interruptible,
otherwise the timer may overrun resulting in incorrect results
+config CMD_UPTIME
+ bool "uptime"
+ help
+ uptime - Tell how long barebox has been running
+
+ Usage: uptime [-n]
+
+ This command formats the number of elapsed nanoseconds
+ as measured with the current clocksource.
+
+ Options:
+ -n output elapsed time in nanoseconds
+
config CMD_STATE
tristate
depends on STATE
diff --git a/commands/Makefile b/commands/Makefile
index 068fbb32da..cac1d4f253 100644
--- a/commands/Makefile
+++ b/commands/Makefile
@@ -26,6 +26,7 @@ obj-$(CONFIG_CMD_POWEROFF) += poweroff.o
obj-$(CONFIG_CMD_GO) += go.o
obj-$(CONFIG_CMD_PARTITION) += partition.o
obj-$(CONFIG_CMD_LS) += ls.o
+obj-$(CONFIG_CMD_STAT) += stat.o
obj-$(CONFIG_CMD_CD) += cd.o
obj-$(CONFIG_CMD_PWD) += pwd.o
obj-$(CONFIG_CMD_MKDIR) += mkdir.o
@@ -79,6 +80,7 @@ obj-$(CONFIG_CMD_WD) += wd.o
obj-$(CONFIG_CMD_LED_TRIGGER) += trigger.o
obj-$(CONFIG_CMD_USB) += usb.o
obj-$(CONFIG_CMD_TIME) += time.o
+obj-$(CONFIG_CMD_UPTIME) += uptime.o
obj-$(CONFIG_CMD_OFTREE) += oftree.o
obj-$(CONFIG_CMD_OF_DIFF) += of_diff.o
obj-$(CONFIG_CMD_OF_PROPERTY) += of_property.o
diff --git a/commands/stat.c b/commands/stat.c
new file mode 100644
index 0000000000..153eac50f1
--- /dev/null
+++ b/commands/stat.c
@@ -0,0 +1,62 @@
+// SPDX-License-Identifier: GPL-2.0-only
+// SPDX-FileCopyrightText: © 2022 Ahmad Fatoum, Pengutronix
+
+#include <common.h>
+#include <command.h>
+#include <fs.h>
+#include <linux/stat.h>
+#include <errno.h>
+#include <malloc.h>
+#include <getopt.h>
+#include <stringlist.h>
+
+static int do_stat(int argc, char *argv[])
+{
+ int (*statfn)(const char *, struct stat *) = lstat;
+ int ret, opt, exitcode = 0;
+ char **filename;
+ struct stat st;
+
+ while((opt = getopt(argc, argv, "L")) > 0) {
+ switch(opt) {
+ case 'L':
+ statfn = stat;
+ break;
+ default:
+ return COMMAND_ERROR_USAGE;
+ }
+ }
+
+ if (optind == argc)
+ return COMMAND_ERROR_USAGE;
+
+ for (filename = &argv[optind]; *filename; filename++) {
+ ret = statfn(*filename, &st);
+
+ if (ret) {
+ printf("%s: %s: %m\n", argv[0], *filename);
+ exitcode = COMMAND_ERROR;
+ continue;
+ }
+
+ stat_print(*filename, &st);
+ }
+
+ return exitcode;
+}
+
+BAREBOX_CMD_HELP_START(stat)
+BAREBOX_CMD_HELP_TEXT("Display status information about the specified files")
+BAREBOX_CMD_HELP_TEXT("or directories.")
+BAREBOX_CMD_HELP_TEXT("")
+BAREBOX_CMD_HELP_TEXT("Options:")
+BAREBOX_CMD_HELP_OPT ("-L", "follow links")
+BAREBOX_CMD_HELP_END
+
+BAREBOX_CMD_START(stat)
+ .cmd = do_stat,
+ BAREBOX_CMD_DESC("display file status")
+ BAREBOX_CMD_OPTS("[-L] [FILEDIR...]")
+ BAREBOX_CMD_GROUP(CMD_GRP_FILE)
+ BAREBOX_CMD_HELP(cmd_stat_help)
+BAREBOX_CMD_END
diff --git a/commands/uptime.c b/commands/uptime.c
new file mode 100644
index 0000000000..d67538631c
--- /dev/null
+++ b/commands/uptime.c
@@ -0,0 +1,82 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include <common.h>
+#include <command.h>
+#include <clock.h>
+#include <getopt.h>
+#include <linux/math64.h>
+
+#define NSEC_PER_MINUTE (NSEC_PER_SEC * 60LL)
+#define NSEC_PER_HOUR (NSEC_PER_MINUTE * 60LL)
+#define NSEC_PER_DAY (NSEC_PER_HOUR * 24LL)
+#define NSEC_PER_WEEK (NSEC_PER_DAY * 7LL)
+
+static bool print_with_unit(u64 val, const char *unit, bool comma)
+{
+ if (!val)
+ return comma;
+
+ printf("%s%llu %s%s", comma ? ", " : "", val, unit, val > 1 ? "s" : "");
+ return true;
+}
+
+static int do_uptime(int argc, char *argv[])
+{
+ u64 timestamp, weeks, days, hours, minutes;
+ bool comma = false;
+ int opt;
+
+ timestamp = get_time_ns();
+
+ while((opt = getopt(argc, argv, "n")) > 0) {
+ switch(opt) {
+ case 'n':
+ printf("up %lluns\n", timestamp);
+ return 0;
+ default:
+ return COMMAND_ERROR_USAGE;
+ }
+ }
+
+ if (optind != argc)
+ return COMMAND_ERROR_USAGE;
+
+ printf("up ");
+
+ weeks = div64_u64_rem(timestamp, NSEC_PER_WEEK, &timestamp);
+ days = div64_u64_rem(timestamp, NSEC_PER_DAY, &timestamp);
+ hours = div64_u64_rem(timestamp, NSEC_PER_HOUR, &timestamp);
+ minutes = div64_u64_rem(timestamp, NSEC_PER_MINUTE, &timestamp);
+
+ comma = print_with_unit(weeks, "week", false);
+ comma = print_with_unit(days, "day", comma);
+ comma = print_with_unit(hours, "hour", comma);
+ comma = print_with_unit(minutes, "minute", comma);
+
+ if (!comma) {
+ u64 seconds = div64_u64_rem(timestamp, NSEC_PER_SEC, &timestamp);
+ print_with_unit(seconds, "second", false);
+ }
+
+ printf("\n");
+
+ return 0;
+}
+
+BAREBOX_CMD_HELP_START(uptime)
+BAREBOX_CMD_HELP_TEXT("This command formats the number of elapsed nanoseconds")
+BAREBOX_CMD_HELP_TEXT("as measured with the current clocksource")
+BAREBOX_CMD_HELP_TEXT("Note: Timekeeping is co-operative. If long running code does")
+BAREBOX_CMD_HELP_TEXT("not use delay/is_timeout/get_time_ns/getchar functions")
+BAREBOX_CMD_HELP_TEXT("timer may overrun resulting in incorrect results")
+BAREBOX_CMD_HELP_TEXT("Options:")
+BAREBOX_CMD_HELP_OPT ("-n", "output elapsed time in nanoseconds")
+BAREBOX_CMD_HELP_END
+
+BAREBOX_CMD_START(uptime)
+ .cmd = do_uptime,
+ BAREBOX_CMD_DESC("Tell how long barebox has been running")
+ BAREBOX_CMD_OPTS("[-n]")
+ BAREBOX_CMD_GROUP(CMD_GRP_MISC)
+ BAREBOX_CMD_HELP(cmd_uptime_help)
+BAREBOX_CMD_END