Skip to content

Commit 673847c

Browse files
committed
Improved portability of String class (maniacbug)
1 parent e2d373e commit 673847c

File tree

3 files changed

+21
-21
lines changed

3 files changed

+21
-21
lines changed

build/shared/revisions.txt

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ ARDUINO 1.5.6 BETA
1313
* sam: Fixed regression in analogRead() (fails to read multiple channels) (Mark Tillotson)
1414
* sam: Optimized delayMicroseconds() (Rob Tillaart) #1121
1515
* Optimized Print::print(String&) method, now uses internal string buffer to perform block write
16+
* Improved portability of String class (maniacbug) #695
1617

1718
ARDUINO 1.5.5 BETA 2013.11.28
1819

hardware/arduino/avr/cores/arduino/WString.cpp

+10-11
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
#include "WString.h"
2323

24-
2524
/*********************************************/
2625
/* Constructors */
2726
/*********************************************/
@@ -69,39 +68,39 @@ String::String(char c)
6968
String::String(unsigned char value, unsigned char base)
7069
{
7170
init();
72-
char buf[9];
71+
char buf[1 + 8 * sizeof(unsigned char)];
7372
utoa(value, buf, base);
7473
*this = buf;
7574
}
7675

7776
String::String(int value, unsigned char base)
7877
{
7978
init();
80-
char buf[18];
79+
char buf[2 + 8 * sizeof(int)];
8180
itoa(value, buf, base);
8281
*this = buf;
8382
}
8483

8584
String::String(unsigned int value, unsigned char base)
8685
{
8786
init();
88-
char buf[17];
87+
char buf[1 + 8 * sizeof(unsigned int)];
8988
utoa(value, buf, base);
9089
*this = buf;
9190
}
9291

9392
String::String(long value, unsigned char base)
9493
{
9594
init();
96-
char buf[34];
95+
char buf[2 + 8 * sizeof(long)];
9796
ltoa(value, buf, base);
9897
*this = buf;
9998
}
10099

101100
String::String(unsigned long value, unsigned char base)
102101
{
103102
init();
104-
char buf[33];
103+
char buf[1 + 8 * sizeof(unsigned long)];
105104
ultoa(value, buf, base);
106105
*this = buf;
107106
}
@@ -288,35 +287,35 @@ unsigned char String::concat(char c)
288287

289288
unsigned char String::concat(unsigned char num)
290289
{
291-
char buf[4];
290+
char buf[1 + 3 * sizeof(unsigned char)];
292291
itoa(num, buf, 10);
293292
return concat(buf, strlen(buf));
294293
}
295294

296295
unsigned char String::concat(int num)
297296
{
298-
char buf[12];
297+
char buf[2 + 3 * sizeof(int)];
299298
itoa(num, buf, 10);
300299
return concat(buf, strlen(buf));
301300
}
302301

303302
unsigned char String::concat(unsigned int num)
304303
{
305-
char buf[11];
304+
char buf[1 + 3 * sizeof(unsigned int)];
306305
utoa(num, buf, 10);
307306
return concat(buf, strlen(buf));
308307
}
309308

310309
unsigned char String::concat(long num)
311310
{
312-
char buf[12];
311+
char buf[2 + 3 * sizeof(long)];
313312
ltoa(num, buf, 10);
314313
return concat(buf, strlen(buf));
315314
}
316315

317316
unsigned char String::concat(unsigned long num)
318317
{
319-
char buf[11];
318+
char buf[1 + 3 * sizeof(unsigned long)];
320319
ultoa(num, buf, 10);
321320
return concat(buf, strlen(buf));
322321
}

hardware/arduino/sam/cores/arduino/WString.cpp

+10-10
Original file line numberDiff line numberDiff line change
@@ -70,39 +70,39 @@ String::String(char c)
7070
String::String(unsigned char value, unsigned char base)
7171
{
7272
init();
73-
char buf[9];
73+
char buf[1 + 8 * sizeof(unsigned char)];
7474
utoa(value, buf, base);
7575
*this = buf;
7676
}
7777

7878
String::String(int value, unsigned char base)
7979
{
8080
init();
81-
char buf[18];
81+
char buf[2 + 8 * sizeof(int)];
8282
itoa(value, buf, base);
8383
*this = buf;
8484
}
8585

8686
String::String(unsigned int value, unsigned char base)
8787
{
8888
init();
89-
char buf[17];
89+
char buf[1 + 8 * sizeof(unsigned int)];
9090
utoa(value, buf, base);
9191
*this = buf;
9292
}
9393

9494
String::String(long value, unsigned char base)
9595
{
9696
init();
97-
char buf[34];
97+
char buf[2 + 8 * sizeof(long)];
9898
ltoa(value, buf, base);
9999
*this = buf;
100100
}
101101

102102
String::String(unsigned long value, unsigned char base)
103103
{
104104
init();
105-
char buf[33];
105+
char buf[1 + 8 * sizeof(unsigned long)];
106106
ultoa(value, buf, base);
107107
*this = buf;
108108
}
@@ -289,35 +289,35 @@ unsigned char String::concat(char c)
289289

290290
unsigned char String::concat(unsigned char num)
291291
{
292-
char buf[4];
292+
char buf[1 + 3 * sizeof(unsigned char)];
293293
itoa(num, buf, 10);
294294
return concat(buf, strlen(buf));
295295
}
296296

297297
unsigned char String::concat(int num)
298298
{
299-
char buf[12];
299+
char buf[2 + 3 * sizeof(int)];
300300
itoa(num, buf, 10);
301301
return concat(buf, strlen(buf));
302302
}
303303

304304
unsigned char String::concat(unsigned int num)
305305
{
306-
char buf[11];
306+
char buf[1 + 3 * sizeof(unsigned int)];
307307
utoa(num, buf, 10);
308308
return concat(buf, strlen(buf));
309309
}
310310

311311
unsigned char String::concat(long num)
312312
{
313-
char buf[12];
313+
char buf[2 + 3 * sizeof(long)];
314314
ltoa(num, buf, 10);
315315
return concat(buf, strlen(buf));
316316
}
317317

318318
unsigned char String::concat(unsigned long num)
319319
{
320-
char buf[11];
320+
char buf[1 + 3 * sizeof(unsigned long)];
321321
ultoa(num, buf, 10);
322322
return concat(buf, strlen(buf));
323323
}

0 commit comments

Comments
 (0)