diff options
author | Yuusei Kuwana <kuwana@kumama.org> | 2010-07-29 14:12:04 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2010-07-29 14:12:04 -0700 |
commit | c21e2f3925215a0f0dc4bcd22afb837537179dde (patch) | |
tree | 4f87053ea2f3fa527f6f57966ce39edadd735be0 | |
parent | 2ef1c6e2fc0169f7d88251aaf275228f06b86f33 (diff) | |
download | go-c21e2f3925215a0f0dc4bcd22afb837537179dde.tar.gz go-c21e2f3925215a0f0dc4bcd22afb837537179dde.zip |
mime: add AddExtensionType
For example:
mime.AddExtensionType(".m3u8", "application/x-mpegURL")
mime.AddExtensionType(".ts", "video/MP2T")
R=rsc, rsc1
CC=golang-dev
https://golang.org/cl/1698046
-rw-r--r-- | src/pkg/mime/type.go | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/pkg/mime/type.go b/src/pkg/mime/type.go index b23b503649..9202b85572 100644 --- a/src/pkg/mime/type.go +++ b/src/pkg/mime/type.go @@ -10,6 +10,7 @@ import ( "once" "os" "strings" + "sync" ) var typeFiles = []string{ @@ -30,6 +31,8 @@ var mimeTypes = map[string]string{ ".xml": "text/xml; charset=utf-8", } +var mimeLock sync.RWMutex + func loadMimeFile(filename string) { f, err := os.Open(filename, os.O_RDONLY, 0666) if err != nil { @@ -79,5 +82,22 @@ func initMime() { // /etc/apache/mime.types func TypeByExtension(ext string) string { once.Do(initMime) - return mimeTypes[ext] + mimeLock.RLock() + typename := mimeTypes[ext] + mimeLock.RUnlock() + return typename +} + +// AddExtensionType sets the MIME type associated with +// the extension ext to typ. The extension should begin with +// a leading dot, as in ".html". +func AddExtensionType(ext, typ string) os.Error { + once.Do(initMime) + if len(ext) < 1 || ext[0] != '.' { + return os.EINVAL + } + mimeLock.Lock() + mimeTypes[ext] = typ + mimeLock.Unlock() + return nil } |