summaryrefslogtreecommitdiff
path: root/libgo/go/os/str.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/os/str.go')
-rw-r--r--libgo/go/os/str.go25
1 files changed, 18 insertions, 7 deletions
diff --git a/libgo/go/os/str.go b/libgo/go/os/str.go
index e3606b61eb4..d3e03e98495 100644
--- a/libgo/go/os/str.go
+++ b/libgo/go/os/str.go
@@ -2,21 +2,32 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build plan9
+// Simple converions to avoid depending on strconv.
package os
-func itoa(val int) string { // do it here rather than with fmt to avoid dependency
+// Convert integer to decimal string
+func itoa(val int) string {
if val < 0 {
- return "-" + itoa(-val)
+ return "-" + uitoa(uint(-val))
}
- var buf [32]byte // big enough for int64
+ return uitoa(uint(val))
+}
+
+// Convert unsigned integer to decimal string
+func uitoa(val uint) string {
+ if val == 0 { // avoid string allocation
+ return "0"
+ }
+ var buf [20]byte // big enough for 64bit value base 10
i := len(buf) - 1
for val >= 10 {
- buf[i] = byte(val%10 + '0')
+ q := val / 10
+ buf[i] = byte('0' + val - q*10)
i--
- val /= 10
+ val = q
}
- buf[i] = byte(val + '0')
+ // val < 10
+ buf[i] = byte('0' + val)
return string(buf[i:])
}