diff mbox series

[v2,2/3] cmd: lcdputs: Escape special characters

Message ID 20220331100302.23948-2-qianfanguijin@163.com
State Deferred
Delegated to: Tom Rini
Headers show
Series [v2,1/3] video: Add VIDEO_FONT_4x6 to Kconfig add fix compile waring | expand

Commit Message

qianfan March 31, 2022, 10:03 a.m. UTC
From: qianfan Zhao <qianfanguijin@163.com>

Add support \\, \r, \n, \t and \b.

eg:
=> lcdputs "hello\nworld"

Signed-off-by: qianfan Zhao <qianfanguijin@163.com>
---
 drivers/video/vidconsole-uclass.c | 34 +++++++++++++++++++++++++++++--
 1 file changed, 32 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c
index f42db40d4c..d2554fd3f7 100644
--- a/drivers/video/vidconsole-uclass.c
+++ b/drivers/video/vidconsole-uclass.c
@@ -709,15 +709,45 @@  static int do_video_puts(struct cmd_tbl *cmdtp, int flag, int argc,
 {
 	struct udevice *dev;
 	const char *s;
+	char c;
 
 	if (argc != 2)
 		return CMD_RET_USAGE;
 
 	if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
 		return CMD_RET_FAILURE;
-	for (s = argv[1]; *s; s++)
-		vidconsole_put_char(dev, *s);
 
+	for (s = argv[1]; (c = *s); s++) {
+		if (c == '\\') {
+			s++;
+
+			switch (*s) {
+			case '\0':
+				goto sync;
+			case '\\':
+				c = '\\';
+				break;
+			case 'r':
+				c = '\r';
+				break;
+			case 'n':
+				c = '\n';
+				break;
+			case 't':
+				c = '\t';
+				break;
+			case 'b':
+				c = '\b';
+				break;
+			default:
+				continue;
+			}
+		}
+
+		vidconsole_put_char(dev, c);
+	}
+
+sync:
 	return video_sync(dev->parent, false);
 }