X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/55d99c7a77789ff4904bf96eddca3715eb5af9b9..01ebf7520366a4cf80975d820794fea394c96d7b:/src/common/filefn.cpp diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index cb7d82c331..3e6489ad19 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -59,10 +59,18 @@ #ifndef __MWERKS__ #include #include +#else +#ifdef __MACH__ +#include +#include +#include +#include #else #include #include #include + #include +#endif #endif #ifdef __UNIX__ @@ -116,6 +124,11 @@ #include #include "wx/msw/mslu.h" + // for _getcwd + #ifdef __MINGW32__ + #include + #endif + // sys/cygwin.h is needed for cygwin_conv_to_full_win32_path() // // note that it must be included after @@ -123,10 +136,6 @@ #ifdef __CYGWIN__ #include #endif - - #ifndef __TWIN32__ - #include - #endif #endif // __GNUWIN32__ #endif // __WINDOWS__ @@ -214,34 +223,43 @@ void wxPathList::Add (const wxString& path) // Add paths e.g. from the PATH environment variable void wxPathList::AddEnvList (const wxString& envVariable) { - static const wxChar PATH_TOKS[] = + static const wxChar PATH_TOKS[] = #ifdef __WINDOWS__ - wxT(" ;"); // Don't seperate with colon in DOS (used for drive) + /* + The space has been removed from the tokenizers, otherwise a + path such as "C:\Program Files" would be split into 2 paths: + "C:\Program" and "Files" + */ +// wxT(" ;"); // Don't seperate with colon in DOS (used for drive) + wxT(";"); // Don't seperate with colon in DOS (used for drive) #else wxT(" :;"); #endif - wxChar *val = wxGetenv (WXSTRINGCAST envVariable); - if (val && *val) + wxChar *val = wxGetenv (WXSTRINGCAST envVariable); + if (val && *val) { - wxChar *s = copystring (val); - wxChar *save_ptr, *token = wxStrtok (s, PATH_TOKS, &save_ptr); + wxChar *s = copystring (val); + wxChar *save_ptr, *token = wxStrtok (s, PATH_TOKS, &save_ptr); - if (token) - { - Add (copystring (token)); - while (token) - { - if ((token = wxStrtok ((wxChar *) NULL, PATH_TOKS, &save_ptr)) != NULL) - Add (wxString(token)); - } - } + if (token) + { + Add(token); + while (token) + { + if ( (token = wxStrtok ((wxChar *) NULL, PATH_TOKS, &save_ptr)) + != NULL ) + { + Add(token); + } + } + } - // suppress warning about unused variable save_ptr when wxStrtok() is a - // macro which throws away its third argument - save_ptr = token; + // suppress warning about unused variable save_ptr when wxStrtok() is a + // macro which throws away its third argument + save_ptr = token; - delete [] s; + delete [] s; } } @@ -926,7 +944,7 @@ wxString wxMacFSSpec2MacFilename( const FSSpec *spec ) (*myPath)[length-1] = 0 ; // create path string for return value - wxString result( (char*) *myPath ) ; + wxString result = wxMacMakeStringFromCString( *myPath ) ; // free allocated handle ::HUnlock( myPath ) ; @@ -939,7 +957,8 @@ wxString wxMacFSSpec2MacFilename( const FSSpec *spec ) // Mac file names are POSIX (Unix style) under Darwin // therefore the conversion functions below are not needed -static char sMacFileNameConversion[ 1000 ] ; +static wxChar sMacFileNameConversion[ 1000 ] ; +static char scMacFileNameConversion[ 1000 ] ; #endif void wxMacFilename2FSSpec( const char *path , FSSpec *spec ) @@ -956,10 +975,10 @@ void wxMacFilename2FSSpec( const char *path , FSSpec *spec ) if ( strchr( path , ':' ) == NULL ) { // try whether it is a volume / or a mounted volume - strncpy( sMacFileNameConversion , path , 1000 ) ; - sMacFileNameConversion[998] = 0 ; - strcat( sMacFileNameConversion , ":" ) ; - err = FSpLocationFromFullPath( strlen(sMacFileNameConversion) , sMacFileNameConversion , spec ) ; + strncpy( scMacFileNameConversion , path , 1000 ) ; + scMacFileNameConversion[998] = 0 ; + strcat( scMacFileNameConversion , ":" ) ; + err = FSpLocationFromFullPath( strlen(scMacFileNameConversion) , scMacFileNameConversion , spec ) ; } else { @@ -968,15 +987,22 @@ void wxMacFilename2FSSpec( const char *path , FSSpec *spec ) #endif } +#if wxUSE_UNICODE +WXDLLEXPORT void wxMacFilename2FSSpec( const wxChar *path , FSSpec *spec ) +{ + return wxMacFilename2FSSpec( wxMacStringToCString( wxString( path ) ) , spec ) ; +} +#endif + #ifndef __DARWIN__ -wxString wxMac2UnixFilename (const char *str) +wxString wxMac2UnixFilename (const wxChar *str) { - char *s = sMacFileNameConversion ; - strcpy( s , str ) ; + wxChar *s = sMacFileNameConversion ; + wxStrcpy( s , str ) ; if (s) { - memmove( s+1 , s ,strlen( s ) + 1) ; + memmove( s+1 , s ,wxStrlen( s ) + 1 * sizeof(wxChar)) ; if ( *s == ':' ) *s = '.' ; else @@ -994,25 +1020,25 @@ wxString wxMac2UnixFilename (const char *str) return wxString(sMacFileNameConversion) ; } -wxString wxUnix2MacFilename (const char *str) +wxString wxUnix2MacFilename (const wxChar *str) { - char *s = sMacFileNameConversion ; - strcpy( s , str ) ; + wxChar *s = sMacFileNameConversion ; + wxStrcpy( s , str ) ; if (s) { if ( *s == '.' ) { // relative path , since it goes on with slash which is translated to a : - memmove( s , s+1 ,strlen( s ) ) ; + memmove( s , s+1 ,wxStrlen( s ) * sizeof(wxChar)) ; } else if ( *s == '/' ) { // absolute path -> on mac just start with the drive name - memmove( s , s+1 ,strlen( s ) ) ; + memmove( s , s+1 ,wxStrlen( s ) * sizeof(wxChar) ) ; } else { - wxASSERT_MSG( 1 , "unkown path beginning" ) ; + wxASSERT_MSG( 1 , wxT("unkown path beginning") ) ; } while (*s) { @@ -1022,7 +1048,7 @@ wxString wxUnix2MacFilename (const char *str) if ( *(s+1) == '.' && *(s+2) == '.' && ( (*(s+3) == '/' || *(s+3) == '\\') ) ) { *s = ':'; - memmove( s+1 , s+3 ,strlen( s+3 ) + 1 ) ; + memmove( s+1 , s+3 ,(wxStrlen( s+3 ) + 1)*sizeof(wxChar) ) ; } else *s = ':'; @@ -1030,7 +1056,7 @@ wxString wxUnix2MacFilename (const char *str) s++ ; } } - return wxString (sMacFileNameConversion) ; + return wxString(sMacFileNameConversion) ; } wxString wxMacFSSpec2UnixFilename( const FSSpec *spec ) @@ -1048,13 +1074,13 @@ void wxUnixFilename2FSSpec( const char *path , FSSpec *spec ) #endif // __WXMAC__ void -wxDos2UnixFilename (char *s) +wxDos2UnixFilename (wxChar *s) { if (s) while (*s) { - if (*s == '\\') - *s = '/'; + if (*s == _T('\\')) + *s = _T('/'); #ifdef __WXMSW__ else *s = wxTolower (*s); // Case INDEPENDENT @@ -1246,6 +1272,8 @@ bool wxRemoveFile(const wxString& file) || defined(__WATCOMC__) \ || defined(__GNUWIN32__) int res = wxRemove(file); +#elif defined(__WXMAC__) + int res = unlink(wxFNCONV(file)); #else int res = unlink(OS_FILENAME(file)); #endif @@ -1256,7 +1284,7 @@ bool wxRemoveFile(const wxString& file) bool wxMkdir(const wxString& dir, int perm) { #if defined(__WXMAC__) && !defined(__UNIX__) - return (mkdir( dir , 0 ) == 0); + return (mkdir( wxFNCONV(dir) , 0 ) == 0); #else // !Mac const wxChar *dirname = dir.c_str(); @@ -1379,7 +1407,7 @@ wxString wxFindFirstFile(const wxChar *spec, int flags) wxSplitPath(spec, &gs_dirPath, NULL, NULL); if ( gs_dirPath.IsEmpty() ) gs_dirPath = wxT("."); - if ( gs_dirPath.Last() != wxFILE_SEP_PATH ) + if ( !wxEndsWithPathSeparator(gs_dirPath ) ) gs_dirPath << wxFILE_SEP_PATH; if (gs_dir) @@ -1470,7 +1498,7 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz) if ( needsANSI ) #endif // wxUSE_UNICODE { - #ifdef _MSC_VER + #if defined(_MSC_VER) || defined(__MINGW32__) ok = _getcwd(cbuf, sz) != NULL; #elif defined(__WXMAC__) && !defined(__DARWIN__) FSSpec cwdSpec ; @@ -1488,10 +1516,7 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz) cwdSpec.parID = pb.ioFCBParID; cwdSpec.name[0] = 0 ; wxString res = wxMacFSSpec2MacFilename( &cwdSpec ) ; - - strcpy( cbuf , res ) ; - cbuf[res.length()]=0 ; - + wxStrcpy( buf , res ) ; ok = TRUE; } else @@ -1509,7 +1534,7 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz) ok = getcwd(cbuf, sz) != NULL; #endif // platform - #if wxUSE_UNICODE + #if wxUSE_UNICODE && !defined(__WXMAC__) // finally convert the result to Unicode if needed wxConvFile.MB2WC(buf, cbuf, sz); #endif // wxUSE_UNICODE @@ -1608,6 +1633,8 @@ wxString wxGetOSDirectory() wxChar buf[256]; GetWindowsDirectory(buf, 256); return wxString(buf); +#elif defined(__WXMAC__) + return wxMacFindFolder(kOnSystemDisk, 'macs', false); #else return wxEmptyString; #endif