diff options
Diffstat (limited to 'libgo/go/os/str.go')
-rw-r--r-- | libgo/go/os/str.go | 25 |
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:]) } |