summaryrefslogtreecommitdiff
path: root/firmware/common/sprintf.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/common/sprintf.c')
-rw-r--r--firmware/common/sprintf.c38
1 files changed, 37 insertions, 1 deletions
diff --git a/firmware/common/sprintf.c b/firmware/common/sprintf.c
index 6542c9d993..a92681e736 100644
--- a/firmware/common/sprintf.c
+++ b/firmware/common/sprintf.c
@@ -43,7 +43,9 @@ static int format(
43 char *str; 43 char *str;
44 char tmpbuf[12], pad; 44 char tmpbuf[12], pad;
45 int ch, width, val, sign; 45 int ch, width, val, sign;
46 long lval;
46 unsigned int uval; 47 unsigned int uval;
48 unsigned long ulval;
47 bool ok = true; 49 bool ok = true;
48 50
49 tmpbuf[sizeof tmpbuf - 1] = '\0'; 51 tmpbuf[sizeof tmpbuf - 1] = '\0';
@@ -99,7 +101,41 @@ static int format(
99 } 101 }
100 while (uval); 102 while (uval);
101 break; 103 break;
102 104
105 case 'l':
106 ch = *fmt++;
107 switch(ch) {
108 case 'x':
109 case 'X':
110 ulval = va_arg (ap, long);
111 do
112 {
113 *--str = hexdigit[ulval & 0xf];
114 ulval >>= 4;
115 }
116 while (ulval);
117 break;
118 case 'd':
119 lval = sign = va_arg (ap, long);
120 if (lval < 0)
121 lval = -lval;
122 do
123 {
124 *--str = (lval % 10) + '0';
125 lval /= 10;
126 }
127 while (lval > 0);
128 if (sign < 0)
129 *--str = '-';
130 break;
131
132 default:
133 *--str = 'l';
134 *--str = ch;
135 }
136
137 break;
138
103 default: 139 default:
104 *--str = ch; 140 *--str = ch;
105 break; 141 break;