From 91469fdebf57ff683cc2a7d9373cdee554ed3aba Mon Sep 17 00:00:00 2001 From: clsr Date: Fri, 18 Aug 2017 13:47:07 +0200 Subject: Initial commit --- magic.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 magic.go (limited to 'magic.go') diff --git a/magic.go b/magic.go new file mode 100644 index 0000000..a6fb48d --- /dev/null +++ b/magic.go @@ -0,0 +1,32 @@ +package main + +// #cgo LDFLAGS: -lmagic +// #include +// #include +import "C" +import "errors" +import "unsafe" + +var magic C.magic_t + +func init() { + magic = C.magic_open(C.MAGIC_MIME_TYPE | C.MAGIC_SYMLINK | C.MAGIC_ERROR) + if magic == nil { + panic("unable to initialize libmagic") + } + if C.magic_load(magic, nil) != 0 { + C.magic_close(magic) + panic("unable to load libmagic database: " + C.GoString(C.magic_error(magic))) + } +} + +// GetMimeType uses libmagic to find the mime type of a file by filename. +func GetMimeType(fname string) (string, error) { + cfname := C.CString(fname) + defer C.free(unsafe.Pointer(cfname)) + mime := C.magic_file(magic, cfname) + if mime == nil { + return "", errors.New(C.GoString(C.magic_error(magic))) + } + return C.GoString(mime), nil +} -- cgit