From: Yuusei Kuwana Date: Thu, 29 Jul 2010 21:12:04 +0000 (-0700) Subject: mime: add AddExtensionType X-Git-Tag: weekly.2010-07-29~6 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=c21e2f3925215a0f0dc4bcd22afb837537179dde;p=gostls13.git 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 --- 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 }