mirror of
https://github.com/golang/go
synced 2024-11-05 17:26:11 -07:00
os: replace itod on posix with general itoa and fix possible infinite recursion
Remove use of itod on posix systems and replace with call to itoa. Build and use same itoa function on all systems. Fix infinite recursion in iota function for the case -1<<63. Change-Id: I89d7e742383c5c4aeef8780501c78a3e1af87a6f Reviewed-on: https://go-review.googlesource.com/2213 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
307e2706cb
commit
79c4fad8c2
@ -81,33 +81,6 @@ func (p *ProcessState) sysUsage() interface{} {
|
||||
return p.rusage
|
||||
}
|
||||
|
||||
// Convert i to decimal string.
|
||||
func itod(i int) string {
|
||||
if i == 0 {
|
||||
return "0"
|
||||
}
|
||||
|
||||
u := uint64(i)
|
||||
if i < 0 {
|
||||
u = -u
|
||||
}
|
||||
|
||||
// Assemble decimal in reverse order.
|
||||
var b [32]byte
|
||||
bp := len(b)
|
||||
for ; u > 0; u /= 10 {
|
||||
bp--
|
||||
b[bp] = byte(u%10) + '0'
|
||||
}
|
||||
|
||||
if i < 0 {
|
||||
bp--
|
||||
b[bp] = '-'
|
||||
}
|
||||
|
||||
return string(b[bp:])
|
||||
}
|
||||
|
||||
func (p *ProcessState) String() string {
|
||||
if p == nil {
|
||||
return "<nil>"
|
||||
@ -116,13 +89,13 @@ func (p *ProcessState) String() string {
|
||||
res := ""
|
||||
switch {
|
||||
case status.Exited():
|
||||
res = "exit status " + itod(status.ExitStatus())
|
||||
res = "exit status " + itoa(status.ExitStatus())
|
||||
case status.Signaled():
|
||||
res = "signal: " + status.Signal().String()
|
||||
case status.Stopped():
|
||||
res = "stop signal: " + status.StopSignal().String()
|
||||
if status.StopSignal() == syscall.SIGTRAP && status.TrapCause() != 0 {
|
||||
res += " (trap " + itod(status.TrapCause()) + ")"
|
||||
res += " (trap " + itoa(status.TrapCause()) + ")"
|
||||
}
|
||||
case status.Continued():
|
||||
res = "continued"
|
||||
|
@ -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:])
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user