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>"
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"
// 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:])
}