mirror of
				https://github.com/opencontainers/runc.git
				synced 2025-10-31 19:13:12 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			47 lines
		
	
	
		
			840 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			840 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package libcontainer
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"fmt"
 | |
| 	"runtime"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| var newLine = []byte("\n")
 | |
| 
 | |
| func newGenericError(err error, c ErrorCode) Error {
 | |
| 	return &GenericError{
 | |
| 		timestamp: time.Now(),
 | |
| 		err:       err,
 | |
| 		code:      c,
 | |
| 		stack:     captureStackTrace(2),
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func captureStackTrace(skip int) string {
 | |
| 	buf := make([]byte, 4096)
 | |
| 	buf = buf[:runtime.Stack(buf, true)]
 | |
| 
 | |
| 	lines := bytes.Split(buf, newLine)
 | |
| 	return string(bytes.Join(lines[skip:], newLine))
 | |
| }
 | |
| 
 | |
| type GenericError struct {
 | |
| 	timestamp time.Time
 | |
| 	code      ErrorCode
 | |
| 	err       error
 | |
| 	stack     string
 | |
| }
 | |
| 
 | |
| func (e *GenericError) Error() string {
 | |
| 	return fmt.Sprintf("[%d] %s: %s", e.code, e.code, e.err)
 | |
| }
 | |
| 
 | |
| func (e *GenericError) Code() ErrorCode {
 | |
| 	return e.code
 | |
| }
 | |
| 
 | |
| func (e *GenericError) Detail() string {
 | |
| 	return fmt.Sprintf("[%d] %s\n%s", e.code, e.err, e.stack)
 | |
| }
 | 
