mirror of
				https://github.com/golang/go.git
				synced 2025-11-04 02:30:57 +00:00 
			
		
		
		
	Awaiting the lower-bound change before checkin. Fixes #1067. R=rsc, iant, gri CC=golang-dev https://golang.org/cl/2105043
		
			
				
	
	
		
			46 lines
		
	
	
	
		
			980 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			980 B
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2009 The Go Authors. All rights reserved.
 | 
						|
// Use of this source code is governed by a BSD-style
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"./file"
 | 
						|
	"flag"
 | 
						|
	"fmt"
 | 
						|
	"os"
 | 
						|
)
 | 
						|
 | 
						|
func cat(f *file.File) {
 | 
						|
	const NBUF = 512
 | 
						|
	var buf [NBUF]byte
 | 
						|
	for {
 | 
						|
		switch nr, er := f.Read(buf[:]); true {
 | 
						|
		case nr < 0:
 | 
						|
			fmt.Fprintf(os.Stderr, "cat: error reading from %s: %s\n", f.String(), er.String())
 | 
						|
			os.Exit(1)
 | 
						|
		case nr == 0: // EOF
 | 
						|
			return
 | 
						|
		case nr > 0:
 | 
						|
			if nw, ew := file.Stdout.Write(buf[0:nr]); nw != nr {
 | 
						|
				fmt.Fprintf(os.Stderr, "cat: error writing from %s: %s\n", f.String(), ew.String())
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func main() {
 | 
						|
	flag.Parse() // Scans the arg list and sets up flags
 | 
						|
	if flag.NArg() == 0 {
 | 
						|
		cat(file.Stdin)
 | 
						|
	}
 | 
						|
	for i := 0; i < flag.NArg(); i++ {
 | 
						|
		f, err := file.Open(flag.Arg(i), 0, 0)
 | 
						|
		if f == nil {
 | 
						|
			fmt.Fprintf(os.Stderr, "cat: can't open %s: error %s\n", flag.Arg(i), err)
 | 
						|
			os.Exit(1)
 | 
						|
		}
 | 
						|
		cat(f)
 | 
						|
		f.Close()
 | 
						|
	}
 | 
						|
}
 |