43 lines
842 B
Go
43 lines
842 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"reflect"
|
||
|
|
||
|
"github.com/akavel/rsrc/binutil"
|
||
|
"github.com/akavel/rsrc/coff"
|
||
|
)
|
||
|
|
||
|
// copied from github.com/akavel/rsrc
|
||
|
// LICENSE: MIT
|
||
|
// Copyright 2013-2014 The rsrc Authors. (https://github.com/akavel/rsrc/blob/master/AUTHORS)
|
||
|
func writeCoff(coff *coff.Coff, fnameout string) error {
|
||
|
out, err := os.Create(fnameout)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
defer out.Close()
|
||
|
w := binutil.Writer{W: out}
|
||
|
|
||
|
// write the resulting file to disk
|
||
|
binutil.Walk(coff, func(v reflect.Value, path string) error {
|
||
|
if binutil.Plain(v.Kind()) {
|
||
|
w.WriteLE(v.Interface())
|
||
|
return nil
|
||
|
}
|
||
|
vv, ok := v.Interface().(binutil.SizedReader)
|
||
|
if ok {
|
||
|
w.WriteFromSized(vv)
|
||
|
return binutil.WALK_SKIP
|
||
|
}
|
||
|
return nil
|
||
|
})
|
||
|
|
||
|
if w.Err != nil {
|
||
|
return fmt.Errorf("Error writing output file: %s", w.Err)
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|