]> Cypherpunks repositories - gostls13.git/commitdiff
mime: add AddExtensionType
authorYuusei Kuwana <kuwana@kumama.org>
Thu, 29 Jul 2010 21:12:04 +0000 (14:12 -0700)
committerRuss Cox <rsc@golang.org>
Thu, 29 Jul 2010 21:12:04 +0000 (14:12 -0700)
For example:
mime.AddExtensionType(".m3u8", "application/x-mpegURL")
mime.AddExtensionType(".ts", "video/MP2T")

R=rsc, rsc1
CC=golang-dev
https://golang.org/cl/1698046

src/pkg/mime/type.go

index b23b503649c090ba4dd82af32c31fc0556716797..9202b8557244bd3d3005fc52c6cddf000b288973 100644 (file)
@@ -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
 }