Currently the code interprets some properties as an array of strings
instead of hex constants.  This tweaks the heuristics to make sure
/memory properties are more likely to be printed as hex.

ok?


Index: usr.sbin/eeprom/optree.c
===================================================================
RCS file: /cvs/src/usr.sbin/eeprom/optree.c,v
retrieving revision 1.8
diff -u -p -r1.8 optree.c
--- usr.sbin/eeprom/optree.c    21 May 2016 19:08:29 -0000      1.8
+++ usr.sbin/eeprom/optree.c    15 Oct 2017 22:18:46 -0000
@@ -36,22 +36,19 @@ static void
 op_print(struct opiocdesc *opio, int depth)
 {
        char *p;
-       int i, special;
+       int i, multi, special;
        uint32_t cell;
 
        opio->op_name[opio->op_namelen] = '\0';
        printf("%*s%s: ", depth * 4, " ", opio->op_name);
        if (opio->op_buflen > 0) {
                opio->op_buf[opio->op_buflen] = '\0';
-               special = 0;
+               multi = special = 0;
 
                /*
-                * XXX This allows multiple NUL characters within
-                * string-valued properties, which may not be what we
-                * want.  But on macppc we have string-values
-                * properties that end with multiple NUL characters,
-                * and the serial number has them embedded within the
-                * string.
+                * On macppc we have string-values properties that end
+                * with multiple NUL characters, and the serial number
+                * has them embedded within the string.
                 */
                if (opio->op_buf[0] != '\0') {
                        for (i = 0; i < opio->op_buflen; i++) {
@@ -61,10 +58,14 @@ op_print(struct opiocdesc *opio, int dep
                                if (*p == '\0') {
                                        if (i + 1 < opio->op_buflen)
                                                p++;
-                                       if (*p >= ' ' && *p <= '~')
+                                       if (*p >= ' ' && *p <= '~') {
+                                               special = multi;
                                                continue;
-                                       if (*p == '\0')
+                                       }
+                                       if (*p == '\0') {
+                                               multi = 1;
                                                continue;
+                                       }
                                }
 
                                special = 1;
@@ -75,7 +76,7 @@ op_print(struct opiocdesc *opio, int dep
                                special = 1;
                }
 
-               if (special) {
+               if (special && strcmp(opio->op_name, "serial-number") != 0) {
                        for (i = 0; opio->op_buflen - i >= sizeof(int);
                            i += sizeof(int)) {
                                if (i)

Reply via email to