github.com/omoiti/u-root@v7.0.0+incompatible/cmds/core/cat/cat.go (about)

     1  // Copyright 2012-2017 the u-root Authors. All rights reserved
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // cat concatenates files and prints them to stdout.
     6  //
     7  // Synopsis:
     8  //     cat [-u] [FILES]...
     9  //
    10  // Description:
    11  //     If no files are specified, read from stdin.
    12  //
    13  // Options:
    14  //     -u: ignored flag
    15  package main
    16  
    17  import (
    18  	"flag"
    19  	"io"
    20  	"log"
    21  	"os"
    22  )
    23  
    24  var (
    25  	_ = flag.Bool("u", false, "ignored")
    26  )
    27  
    28  func catFile(w io.Writer, file string) error {
    29  	f, err := os.Open(file)
    30  	if err != nil {
    31  		return err
    32  	}
    33  	defer f.Close()
    34  
    35  	_, err = io.Copy(w, f)
    36  	return err
    37  }
    38  
    39  func cat(w io.Writer, files []string) error {
    40  	for _, name := range files {
    41  		if err := catFile(w, name); err != nil {
    42  			return err
    43  		}
    44  	}
    45  	return nil
    46  }
    47  
    48  func main() {
    49  	flag.Parse()
    50  
    51  	if flag.NArg() == 0 {
    52  		if _, err := io.Copy(os.Stdout, os.Stdin); err != nil {
    53  			log.Fatalf("error concatenating stdin to stdout: %v", err)
    54  		}
    55  	}
    56  
    57  	if err := cat(os.Stdout, flag.Args()); err != nil {
    58  		log.Fatalf("cat: %v", err)
    59  	}
    60  }