git: f8aa0ee8d017 - main - devinfo: Introduce function for printing indent
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 06 May 2025 22:02:11 UTC
The branch main has been updated by imp:
URL: https://cgit.FreeBSD.org/src/commit/?id=f8aa0ee8d017a276d22521fa7c809aa0f3349be2
commit f8aa0ee8d017a276d22521fa7c809aa0f3349be2
Author: ktullavik <ktullavik@gmail.com>
AuthorDate: 2024-10-17 15:37:44 +0000
Commit: Warner Losh <imp@FreeBSD.org>
CommitDate: 2025-05-06 22:01:45 +0000
devinfo: Introduce function for printing indent
When libxo is added we want the whole indentation to
be printed in a single call. Otherwise the html will be
spammed with indentation tags.
Reviewed by: imp
Pull Request: https://github.com/freebsd/freebsd-src/pull/1480
---
usr.sbin/devinfo/devinfo.c | 31 +++++++++++++++++++++----------
1 file changed, 21 insertions(+), 10 deletions(-)
diff --git a/usr.sbin/devinfo/devinfo.c b/usr.sbin/devinfo/devinfo.c
index 4ca417368514..306d752e884e 100644
--- a/usr.sbin/devinfo/devinfo.c
+++ b/usr.sbin/devinfo/devinfo.c
@@ -31,7 +31,8 @@
* Print information about system device configuration.
*/
-#include <sys/types.h>
+#include <sys/param.h>
+
#include <err.h>
#include <errno.h>
#include <stdbool.h>
@@ -57,6 +58,20 @@ struct indent_arg
void *arg;
};
+
+static void
+print_indent(int n)
+{
+ static char buffer[1024];
+
+ if (n < 1)
+ return;
+ n = MIN((size_t)n, sizeof(buffer) - 1);
+ memset(buffer, ' ', n);
+ buffer[n] = '\0';
+ printf("%s", buffer);
+}
+
/*
* Print a resource.
*/
@@ -86,14 +101,12 @@ print_device_matching_resource(struct devinfo_res *res, void *arg)
{
struct indent_arg *ia = (struct indent_arg *)arg;
struct devinfo_dev *dev = (struct devinfo_dev *)ia->arg;
- int i;
if (devinfo_handle_to_device(res->dr_device) == dev) {
/* in 'detect' mode, found a match */
if (ia->indent == 0)
return(1);
- for (i = 0; i < ia->indent; i++)
- printf(" ");
+ print_indent(ia->indent);
print_resource(res);
printf("\n");
}
@@ -107,7 +120,7 @@ int
print_device_rman_resources(struct devinfo_rman *rman, void *arg)
{
struct indent_arg *ia = (struct indent_arg *)arg;
- int indent, i;
+ int indent;
indent = ia->indent;
@@ -117,8 +130,7 @@ print_device_rman_resources(struct devinfo_rman *rman, void *arg)
print_device_matching_resource, ia) != 0) {
/* there are, print header */
- for (i = 0; i < indent; i++)
- printf(" ");
+ print_indent(indent);
printf("%s:\n", rman->dm_desc);
/* print resources */
@@ -155,12 +167,11 @@ static int
print_device(struct devinfo_dev *dev, void *arg)
{
struct indent_arg ia;
- int i, indent;
+ int indent;
if (vflag || (dev->dd_name[0] != 0 && dev->dd_state >= DS_ATTACHED)) {
indent = (int)(intptr_t)arg;
- for (i = 0; i < indent; i++)
- printf(" ");
+ print_indent(indent);
print_dev(dev);
printf("\n");
if (rflag) {