1 // Copyright 2010 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris 6 7 package mime 8 9 import ( 10 "bufio" 11 "os" 12 "strings" 13 ) 14 15 func init() { 16 osInitMime = initMimeUnix 17 } 18 19 var typeFiles = []string{ 20 "/etc/mime.types", 21 "/etc/apache2/mime.types", 22 "/etc/apache/mime.types", 23 } 24 25 func loadMimeFile(filename string) { 26 f, err := os.Open(filename) 27 if err != nil { 28 return 29 } 30 defer f.Close() 31 32 scanner := bufio.NewScanner(f) 33 for scanner.Scan() { 34 fields := strings.Fields(scanner.Text()) 35 if len(fields) <= 1 || fields[0][0] == '#' { 36 continue 37 } 38 mimeType := fields[0] 39 for _, ext := range fields[1:] { 40 if ext[0] == '#' { 41 break 42 } 43 setExtensionType("."+ext, mimeType) 44 } 45 } 46 if err := scanner.Err(); err != nil { 47 panic(err) 48 } 49 } 50 51 func initMimeUnix() { 52 for _, filename := range typeFiles { 53 loadMimeFile(filename) 54 } 55 } 56 57 func initMimeForTests() map[string]string { 58 typeFiles = []string{"testdata/test.types"} 59 return map[string]string{ 60 ".T1": "application/test", 61 ".t2": "text/test; charset=utf-8", 62 ".png": "image/png", 63 } 64 } 65