Makefile: fix implementation of BINMAN_DEBUG
[oweals/u-boot.git] / lib / uuid.c
index 1536c027da27c82df8953be81207296c979a1111..7d7a2749b6410650362b6b0fa9c1b618872b893f 100644 (file)
@@ -1,7 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright 2011 Calxeda, Inc.
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
@@ -188,9 +187,10 @@ int uuid_str_to_bin(char *uuid_str, unsigned char *uuid_bin, int str_format)
 /*
  * uuid_bin_to_str() - convert big endian binary data to string UUID or GUID.
  *
- * @param uuid_bin - pointer to binary data of UUID (big endian) [16B]
- * @param uuid_str - pointer to allocated array for output string [37B]
- * @str_format     - UUID string format: 0 - UUID; 1 - GUID
+ * @param uuid_bin:    pointer to binary data of UUID (big endian) [16B]
+ * @param uuid_str:    pointer to allocated array for output string [37B]
+ * @str_format:                bit 0: 0 - UUID; 1 - GUID
+ *                     bit 1: 0 - lower case; 2 - upper case
  */
 void uuid_bin_to_str(unsigned char *uuid_bin, char *uuid_str, int str_format)
 {
@@ -199,6 +199,7 @@ void uuid_bin_to_str(unsigned char *uuid_bin, char *uuid_str, int str_format)
        const u8 guid_char_order[UUID_BIN_LEN] = {3, 2, 1, 0, 5, 4, 7, 6, 8,
                                                  9, 10, 11, 12, 13, 14, 15};
        const u8 *char_order;
+       const char *format;
        int i;
 
        /*
@@ -206,13 +207,17 @@ void uuid_bin_to_str(unsigned char *uuid_bin, char *uuid_str, int str_format)
         * 4B-2B-2B-2B-6B
         * be be be be be
         */
-       if (str_format == UUID_STR_FORMAT_STD)
+       if (str_format & UUID_STR_FORMAT_GUID)
+               char_order = guid_char_order;
+       else
                char_order = uuid_char_order;
+       if (str_format & UUID_STR_UPPER_CASE)
+               format = "%02X";
        else
-               char_order = guid_char_order;
+               format = "%02x";
 
        for (i = 0; i < 16; i++) {
-               sprintf(uuid_str, "%02x", uuid_bin[char_order[i]]);
+               sprintf(uuid_str, format, uuid_bin[char_order[i]]);
                uuid_str += 2;
                switch (i) {
                case 3:
@@ -239,6 +244,8 @@ void gen_rand_uuid(unsigned char *uuid_bin)
        unsigned int *ptr = (unsigned int *)&uuid;
        int i;
 
+       srand(get_ticks() + rand());
+
        /* Set all fields randomly */
        for (i = 0; i < sizeof(struct uuid) / sizeof(*ptr); i++)
                *(ptr + i) = cpu_to_be32(rand());
@@ -272,7 +279,7 @@ void gen_rand_uuid_str(char *uuid_str, int str_format)
        uuid_bin_to_str(uuid_bin, uuid_str, str_format);
 }
 
-#ifdef CONFIG_CMD_UUID
+#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_CMD_UUID)
 int do_uuid(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        char uuid[UUID_STR_LEN + 1];