mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Barebox List <barebox@lists.infradead.org>
Subject: [PATCH 12/14] vsprintf: implement %pV
Date: Tue,  2 Oct 2018 16:04:01 +0200	[thread overview]
Message-ID: <20181002140403.3735-13-s.hauer@pengutronix.de> (raw)
In-Reply-To: <20181002140403.3735-1-s.hauer@pengutronix.de>

%pV allows to pass in a struct va_format as a pointer. UBIFS uses this
for its logging functions, but it may be useful in other places aswell.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 include/printk.h |  5 +++++
 lib/vsprintf.c   | 15 +++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/include/printk.h b/include/printk.h
index b4ae0b3217..4384fb85ea 100644
--- a/include/printk.h
+++ b/include/printk.h
@@ -120,4 +120,9 @@ extern void log_clean(unsigned int limit);
 
 void log_print(unsigned flags);
 
+struct va_format {
+	const char *fmt;
+	va_list *va;
+};
+
 #endif
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index fa9fb75800..6fe0283e84 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -302,6 +302,11 @@ char *address_val(char *buf, char *end, const void *addr,
  *             [0][1][2][3]-[4][5]-[6][7]-[8][9]-[10][11][12][13][14][15]
  *           little endian output byte order is:
  *             [3][2][1][0]-[5][4]-[7][6]-[8][9]-[10][11][12][13][14][15]
+ * - 'V' For a struct va_format which contains a format string * and va_list *,
+ *       call vsnprintf(->format, *->va_list).
+ *       Implements a "recursive vsnprintf".
+ *       Do not use this feature without some mechanism to verify the
+ *       correctness of the format string and va_list arguments.
  * - 'a[pd]' For address types [p] phys_addr_t, [d] dma_addr_t and derivatives
  *           (default assumed to be phys_addr_t, passed by reference)
  *
@@ -318,6 +323,16 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr, int field
 		if (IS_ENABLED(CONFIG_PRINTF_UUID))
 			return uuid_string(buf, end, ptr, field_width, precision, flags, fmt);
 		break;
+	case 'V':
+		{
+			va_list va;
+
+			va_copy(va, *((struct va_format *)ptr)->va);
+			buf += vsnprintf(buf, end > buf ? end - buf : 0,
+					 ((struct va_format *)ptr)->fmt, va);
+			va_end(va);
+			return buf;
+		}
 	case 'a':
 		return address_val(buf, end, ptr, field_width, precision, flags, fmt);
 	case 'I':
-- 
2.19.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  parent reply	other threads:[~2018-10-02 14:04 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-02 14:03 [PATCH 00/14] UBIFS update Sascha Hauer
2018-10-02 14:03 ` [PATCH 01/14] Add linux/slab.h Sascha Hauer
2018-10-02 14:03 ` [PATCH 02/14] Add kmemdup Sascha Hauer
2018-10-02 14:03 ` [PATCH 03/14] Add more mutex no-ops Sascha Hauer
2018-10-02 14:03 ` [PATCH 04/14] fs: let dir_emit_dots return int Sascha Hauer
2018-10-02 14:03 ` [PATCH 05/14] fs: Add fscrypt no-op headers Sascha Hauer
2018-10-02 14:03 ` [PATCH 06/14] fs: Add SB_* flags Sascha Hauer
2018-10-02 14:03 ` [PATCH 07/14] fs: implement file_inode Sascha Hauer
2018-10-02 14:03 ` [PATCH 08/14] fs: implement iget_locked and iget_failed Sascha Hauer
2018-10-02 14:03 ` [PATCH 09/14] fs: implement clear_nlink and set_nlink Sascha Hauer
2018-10-02 14:03 ` [PATCH 10/14] fs: ubifs: remove not needed code Sascha Hauer
2018-10-02 14:04 ` [PATCH 11/14] compiler: Update to v4.19-rc6 Sascha Hauer
2018-10-02 14:04 ` Sascha Hauer [this message]
2018-10-02 14:04 ` [PATCH 13/14] ubifs: Update to v4.18-rc6 Sascha Hauer
2018-10-02 14:04 ` [PATCH 14/14] fs: ubifs: optionally allow to mount UBIFS images with encrypted files Sascha Hauer
2018-10-03 20:50 ` [PATCH 00/14] UBIFS update Sam Ravnborg
2018-10-08  7:36   ` Sascha Hauer
2018-10-09 15:19     ` Sam Ravnborg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181002140403.3735-13-s.hauer@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox