summaryrefslogtreecommitdiff
path: root/src/lib/strings.go
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2008-09-29 13:40:23 -0700
committerIan Lance Taylor <iant@golang.org>2008-09-29 13:40:23 -0700
commitd5ed4f05a77104d8d3d8401d98f39ebb143769c6 (patch)
treea8a2d26a43f29bf3a369e6c1c754fae18511c850 /src/lib/strings.go
parent89e9ecebce88654474c8c34e0f478687821f1c14 (diff)
downloadgolang-d5ed4f05a77104d8d3d8401d98f39ebb143769c6.tar.gz
Use unsigned int in itoa to avoid relying on the behaviour of
signed integer overflow when negating the most negative integer. R=rsc DELTA=11 (0 added, 7 deleted, 4 changed) OCL=16105 CL=16120
Diffstat (limited to 'src/lib/strings.go')
-rw-r--r--src/lib/strings.go15
1 files changed, 4 insertions, 11 deletions
diff --git a/src/lib/strings.go b/src/lib/strings.go
index a4e81b354..4a2184341 100644
--- a/src/lib/strings.go
+++ b/src/lib/strings.go
@@ -168,30 +168,23 @@ export func itoa(i int) string {
}
neg := false; // negative
- bigneg := false; // largest negative number
+ u := uint(i);
if i < 0 {
neg = true;
- i = -i;
- if i < 0 {
- bigneg = true; // is largest negative int
- i-- // now positive
- }
+ u = -u;
}
// Assemble decimal in reverse order.
var b [32]byte;
bp := len(b);
- for ; i > 0; i /= 10 {
+ for ; u > 0; u /= 10 {
bp--;
- b[bp] = byte(i%10) + '0'
+ b[bp] = byte(u%10) + '0'
}
if neg { // add sign
bp--;
b[bp] = '-'
}
- if bigneg { // account for i-- above
- b[len(b)-1]++
- }
// BUG return string(b[bp:len(b)])
return string((&b)[bp:len(b)])