X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dc259b792613550edda31cc6202b42e172e2a240..70ddb200c10bb6f1075f4a39452fdcf77f84fdf5:/src/common/filefn.cpp?ds=sidebyside diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index fe708cb0a4..f6d5b9d69f 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -6,7 +6,7 @@ // Created: 29/01/98 // RCS-ID: $Id$ // Copyright: (c) 1998 Julian Smart -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -59,10 +59,18 @@ #ifndef __MWERKS__ #include #include +#else +#ifdef __MACH__ +#include +#include +#include +#include #else #include #include #include + #include +#endif #endif #ifdef __UNIX__ @@ -214,34 +222,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 +943,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 +956,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 +974,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 +986,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 +1019,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 +1047,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 +1055,7 @@ wxString wxUnix2MacFilename (const char *str) s++ ; } } - return wxString (sMacFileNameConversion) ; + return wxString(sMacFileNameConversion) ; } wxString wxMacFSSpec2UnixFilename( const FSSpec *spec ) @@ -1246,6 +1271,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 +1283,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 +1406,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) @@ -1488,10 +1515,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 +1533,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