display_options: Refactor to allow obtaining the banner
authorSimon Glass <sjg@chromium.org>
Fri, 16 Jun 2017 18:51:42 +0000 (12:51 -0600)
committerSimon Glass <sjg@chromium.org>
Tue, 11 Jul 2017 16:08:19 +0000 (10:08 -0600)
Move the display options code into a separate function so that the U-Boot
banner can be obtained from other code. Adjust the 'version' command to
use it.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Stephen Warren <swarren@nvidia.com>
cmd/version.c
include/display_options.h
lib/display_options.c

index 1be0667f0938982158b34aedc3fb6c22c444db91..15aab5dc184c1217076b058c0720427101b6529e 100644 (file)
@@ -17,7 +17,9 @@ const char __weak version_string[] = U_BOOT_VERSION_STRING;
 
 static int do_version(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
-       printf("\n%s\n", version_string);
+       char buf[DISPLAY_OPTIONS_BANNER_LENGTH];
+
+       printf(display_options_get_banner(false, buf, sizeof(buf)));
 #ifdef CC_VERSION_STRING
        puts(CC_VERSION_STRING "\n");
 #endif
index ac44c459b3bf1e44c1b69e92d2fc16b4b87bf649..d9c8f6dbd4a1ac4722373ca07015f52d4b67edf1 100644 (file)
@@ -56,4 +56,23 @@ int print_buffer(ulong addr, const void *data, uint width, uint count,
  */
 int display_options(void);
 
+/* Suggested length of the buffer to pass to display_options_get_banner() */
+#define DISPLAY_OPTIONS_BANNER_LENGTH  200
+
+/**
+ * display_options_get_banner() - Get the U-Boot banner as a string
+ *
+ * This returns the U-Boot banner string
+ *
+ * @newlines: true to include two newlines at the start
+ * @buf: place to put string
+ * @size: Size of buf (string is truncated to fit)
+ * @return buf
+ */
+char *display_options_get_banner(bool newlines, char *buf, int size);
+
+/* This function is used for testing only */
+char *display_options_get_banner_priv(bool newlines, const char *build_tag,
+                                     char *buf, int size);
+
 #endif
index 29343fc00e3f070debd0a749541083bee59a096c..4ea27ca99d36827e20b0a93bf895494d50bf5255 100644 (file)
 #include <linux/ctype.h>
 #include <asm/io.h>
 
-int display_options (void)
+char *display_options_get_banner_priv(bool newlines, const char *build_tag,
+                                     char *buf, int size)
 {
-#if defined(BUILD_TAG)
-       printf ("\n\n%s, Build: %s\n\n", version_string, BUILD_TAG);
-#else
-       printf ("\n\n%s\n\n", version_string);
+       int len;
+
+       len = snprintf(buf, size, "%s%s", newlines ? "\n\n" : "",
+                      version_string);
+       if (build_tag && len < size)
+               len += snprintf(buf + len, size - len, ", Build: %s",
+                               build_tag);
+       if (len > size - 3)
+               len = size - 3;
+       strcpy(buf + len, "\n\n");
+
+       return buf;
+}
+
+#ifndef BUILD_TAG
+#define BUILD_TAG NULL
 #endif
+
+char *display_options_get_banner(bool newlines, char *buf, int size)
+{
+       return display_options_get_banner_priv(newlines, BUILD_TAG, buf, size);
+}
+
+int display_options(void)
+{
+       char buf[DISPLAY_OPTIONS_BANNER_LENGTH];
+
+       display_options_get_banner(true, buf, sizeof(buf));
+       printf("%s", buf);
+
        return 0;
 }