--- BasiliskII/src/Unix/extfs_unix.cpp 2000/07/21 18:01:07 1.13 +++ BasiliskII/src/Unix/extfs_unix.cpp 2004/01/12 15:29:25 1.19 @@ -1,7 +1,7 @@ /* * extfs_unix.cpp - MacOS file system for access native file system access, Unix specific stuff * - * Basilisk II (C) 1997-2000 Christian Bauer + * Basilisk II (C) 1997-2004 Christian Bauer * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -158,66 +158,67 @@ struct ext2type { }; static const ext2type e2t_translation[] = { - {".Z", 'ZIVM', 'LZIV'}, - {".gz", 'Gzip', 'Gzip'}, - {".hqx", 'TEXT', 'SITx'}, - {".pdf", 'PDF ', 'CARO'}, - {".ps", 'TEXT', 'ttxt'}, - {".sit", 'SIT!', 'SITx'}, - {".tar", 'TARF', 'TAR '}, - {".uu", 'TEXT', 'SITx'}, - {".uue", 'TEXT', 'SITx'}, - {".zip", 'ZIP ', 'ZIP '}, - {".8svx", '8SVX', 'SNDM'}, - {".aifc", 'AIFC', 'TVOD'}, - {".aiff", 'AIFF', 'TVOD'}, - {".au", 'ULAW', 'TVOD'}, - {".mid", 'MIDI', 'TVOD'}, - {".midi", 'MIDI', 'TVOD'}, - {".mp2", 'MPG ', 'TVOD'}, - {".mp3", 'MPG ', 'TVOD'}, - {".wav", 'WAVE', 'TVOD'}, - {".bmp", 'BMPf', 'ogle'}, - {".gif", 'GIFf', 'ogle'}, - {".lbm", 'ILBM', 'GKON'}, - {".ilbm", 'ILBM', 'GKON'}, - {".jpg", 'JPEG', 'ogle'}, - {".jpeg", 'JPEG', 'ogle'}, - {".pict", 'PICT', 'ogle'}, - {".png", 'PNGf', 'ogle'}, - {".sgi", '.SGI', 'ogle'}, - {".tga", 'TPIC', 'ogle'}, - {".tif", 'TIFF', 'ogle'}, - {".tiff", 'TIFF', 'ogle'}, - {".htm", 'TEXT', 'MOSS'}, - {".html", 'TEXT', 'MOSS'}, - {".txt", 'TEXT', 'ttxt'}, - {".rtf", 'TEXT', 'MSWD'}, - {".c", 'TEXT', 'R*ch'}, - {".C", 'TEXT', 'R*ch'}, - {".cc", 'TEXT', 'R*ch'}, - {".cpp", 'TEXT', 'R*ch'}, - {".cxx", 'TEXT', 'R*ch'}, - {".h", 'TEXT', 'R*ch'}, - {".hh", 'TEXT', 'R*ch'}, - {".hpp", 'TEXT', 'R*ch'}, - {".hxx", 'TEXT', 'R*ch'}, - {".s", 'TEXT', 'R*ch'}, - {".S", 'TEXT', 'R*ch'}, - {".i", 'TEXT', 'R*ch'}, - {".mpg", 'MPEG', 'TVOD'}, - {".mpeg", 'MPEG', 'TVOD'}, - {".mov", 'MooV', 'TVOD'}, - {".fli", 'FLI ', 'TVOD'}, - {".avi", 'VfW ', 'TVOD'}, - {".qxd", 'XDOC', 'XPR3'}, - {".hfv", 'DDim', 'ddsk'}, - {".dsk", 'DDim', 'ddsk'}, - {".img", 'rohd', 'ddsk'}, + {".Z", FOURCC('Z','I','V','M'), FOURCC('L','Z','I','V')}, + {".gz", FOURCC('G','z','i','p'), FOURCC('G','z','i','p')}, + {".hqx", FOURCC('T','E','X','T'), FOURCC('S','I','T','x')}, + {".bin", FOURCC('T','E','X','T'), FOURCC('S','I','T','x')}, + {".pdf", FOURCC('P','D','F',' '), FOURCC('C','A','R','O')}, + {".ps", FOURCC('T','E','X','T'), FOURCC('t','t','x','t')}, + {".sit", FOURCC('S','I','T','!'), FOURCC('S','I','T','x')}, + {".tar", FOURCC('T','A','R','F'), FOURCC('T','A','R',' ')}, + {".uu", FOURCC('T','E','X','T'), FOURCC('S','I','T','x')}, + {".uue", FOURCC('T','E','X','T'), FOURCC('S','I','T','x')}, + {".zip", FOURCC('Z','I','P',' '), FOURCC('Z','I','P',' ')}, + {".8svx", FOURCC('8','S','V','X'), FOURCC('S','N','D','M')}, + {".aifc", FOURCC('A','I','F','C'), FOURCC('T','V','O','D')}, + {".aiff", FOURCC('A','I','F','F'), FOURCC('T','V','O','D')}, + {".au", FOURCC('U','L','A','W'), FOURCC('T','V','O','D')}, + {".mid", FOURCC('M','I','D','I'), FOURCC('T','V','O','D')}, + {".midi", FOURCC('M','I','D','I'), FOURCC('T','V','O','D')}, + {".mp2", FOURCC('M','P','G',' '), FOURCC('T','V','O','D')}, + {".mp3", FOURCC('M','P','G',' '), FOURCC('T','V','O','D')}, + {".wav", FOURCC('W','A','V','E'), FOURCC('T','V','O','D')}, + {".bmp", FOURCC('B','M','P','f'), FOURCC('o','g','l','e')}, + {".gif", FOURCC('G','I','F','f'), FOURCC('o','g','l','e')}, + {".lbm", FOURCC('I','L','B','M'), FOURCC('G','K','O','N')}, + {".ilbm", FOURCC('I','L','B','M'), FOURCC('G','K','O','N')}, + {".jpg", FOURCC('J','P','E','G'), FOURCC('o','g','l','e')}, + {".jpeg", FOURCC('J','P','E','G'), FOURCC('o','g','l','e')}, + {".pict", FOURCC('P','I','C','T'), FOURCC('o','g','l','e')}, + {".png", FOURCC('P','N','G','f'), FOURCC('o','g','l','e')}, + {".sgi", FOURCC('.','S','G','I'), FOURCC('o','g','l','e')}, + {".tga", FOURCC('T','P','I','C'), FOURCC('o','g','l','e')}, + {".tif", FOURCC('T','I','F','F'), FOURCC('o','g','l','e')}, + {".tiff", FOURCC('T','I','F','F'), FOURCC('o','g','l','e')}, + {".htm", FOURCC('T','E','X','T'), FOURCC('M','O','S','S')}, + {".html", FOURCC('T','E','X','T'), FOURCC('M','O','S','S')}, + {".txt", FOURCC('T','E','X','T'), FOURCC('t','t','x','t')}, + {".rtf", FOURCC('T','E','X','T'), FOURCC('M','S','W','D')}, + {".c", FOURCC('T','E','X','T'), FOURCC('R','*','c','h')}, + {".C", FOURCC('T','E','X','T'), FOURCC('R','*','c','h')}, + {".cc", FOURCC('T','E','X','T'), FOURCC('R','*','c','h')}, + {".cpp", FOURCC('T','E','X','T'), FOURCC('R','*','c','h')}, + {".cxx", FOURCC('T','E','X','T'), FOURCC('R','*','c','h')}, + {".h", FOURCC('T','E','X','T'), FOURCC('R','*','c','h')}, + {".hh", FOURCC('T','E','X','T'), FOURCC('R','*','c','h')}, + {".hpp", FOURCC('T','E','X','T'), FOURCC('R','*','c','h')}, + {".hxx", FOURCC('T','E','X','T'), FOURCC('R','*','c','h')}, + {".s", FOURCC('T','E','X','T'), FOURCC('R','*','c','h')}, + {".S", FOURCC('T','E','X','T'), FOURCC('R','*','c','h')}, + {".i", FOURCC('T','E','X','T'), FOURCC('R','*','c','h')}, + {".mpg", FOURCC('M','P','E','G'), FOURCC('T','V','O','D')}, + {".mpeg", FOURCC('M','P','E','G'), FOURCC('T','V','O','D')}, + {".mov", FOURCC('M','o','o','V'), FOURCC('T','V','O','D')}, + {".fli", FOURCC('F','L','I',' '), FOURCC('T','V','O','D')}, + {".avi", FOURCC('V','f','W',' '), FOURCC('T','V','O','D')}, + {".qxd", FOURCC('X','D','O','C'), FOURCC('X','P','R','3')}, + {".hfv", FOURCC('D','D','i','m'), FOURCC('d','d','s','k')}, + {".dsk", FOURCC('D','D','i','m'), FOURCC('d','d','s','k')}, + {".img", FOURCC('r','o','h','d'), FOURCC('d','d','s','k')}, {NULL, 0, 0} // End marker }; -void get_finfo(const char *path, uint32 finfo, uint32 fxinfo) +void get_finfo(const char *path, uint32 finfo, uint32 fxinfo, bool is_dir) { // Set default finder info Mac_memset(finfo, 0, SIZEOF_FInfo); @@ -238,8 +239,7 @@ void get_finfo(const char *path, uint32 } // No Finder info file, translate file name extension to MacOS type/creator - struct stat st; - if (stat(path, &st) == 0 && !S_ISDIR(st.st_mode)) { + if (!is_dir) { int path_len = strlen(path); for (int i=0; e2t_translation[i].ext; i++) { int ext_len = strlen(e2t_translation[i].ext); @@ -254,7 +254,7 @@ void get_finfo(const char *path, uint32 } } -void set_finfo(const char *path, uint32 finfo, uint32 fxinfo) +void set_finfo(const char *path, uint32 finfo, uint32 fxinfo, bool is_dir) { // Open Finder info file int fd = open_finf(path, O_RDWR);