Skip to content

Instantly share code, notes, and snippets.

@garsue
Created September 6, 2017 10:00
Show Gist options
  • Save garsue/e3cf1d55e4649438b2cc49badf8e2ad2 to your computer and use it in GitHub Desktop.
Save garsue/e3cf1d55e4649438b2cc49badf8e2ad2 to your computer and use it in GitHub Desktop.
Add BOM
package main
import (
"bufio"
"bytes"
"errors"
"io"
"log"
"os"
)
var bom = []byte(string([]rune{'\uFEFF'}))
func parseArgs(args []string) (string, error) {
if len(args) != 2 {
return "", errors.New("Specify a file path")
}
return args[1], nil
}
func write(in io.Reader, out io.Writer) error {
bufIn := bufio.NewReader(in)
bufOut := bufio.NewWriter(out)
prefix, err := bufIn.Peek(3)
if err != nil {
return err
}
if !bytes.Equal(prefix, bom) {
if _, err := bufOut.Write(bom); err != nil {
return err
}
}
if _, err := io.Copy(bufOut, bufIn); err != nil {
return err
}
return bufOut.Flush()
}
func main() {
path, err := parseArgs(os.Args)
if err != nil {
log.Fatal(err)
}
file, err := os.Open(path)
if err != nil {
log.Fatal(err)
}
defer file.Close()
if err := write(file, os.Stdout); err != nil {
log.Fatal(err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment