corrections for path handling under Mac OS X

Classic Mac paths (: separator) are used when compiled using CodeWarrior even
under Mac OS X; Unix like Mac paths (/ separator) are used when compiled using
the Apple Developer Tools


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12226 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Gilles Depeyrot
2001-10-31 06:25:05 +00:00
parent d56e2b972f
commit e8e1d09e0e
2 changed files with 153 additions and 139 deletions

View File

@@ -168,13 +168,13 @@ WXDLLEXPORT void wxDos2UnixFilename(wxChar *s);
WXDLLEXPORT void wxUnix2DosFilename(wxChar *s); WXDLLEXPORT void wxUnix2DosFilename(wxChar *s);
#define Unix2DosFilename wxUnix2DosFilename #define Unix2DosFilename wxUnix2DosFilename
#if defined(__WXMAC__) #ifdef __WXMAC__
WXDLLEXPORT wxString wxMacFSSpec2MacFilename( const FSSpec *spec ) ; WXDLLEXPORT wxString wxMacFSSpec2MacFilename( const FSSpec *spec ) ;
WXDLLEXPORT void wxMacFilename2FSSpec( const char *path , FSSpec *spec ) ; WXDLLEXPORT void wxMacFilename2FSSpec( const char *path , FSSpec *spec ) ;
WXDLLEXPORT wxString wxMacFSSpec2UnixFilename( const FSSpec *spec ) ; WXDLLEXPORT wxString wxMacFSSpec2UnixFilename( const FSSpec *spec ) ;
WXDLLEXPORT void wxUnixFilename2FSSpec( const char *path , FSSpec *spec ) ; WXDLLEXPORT void wxUnixFilename2FSSpec( const char *path , FSSpec *spec ) ;
WXDLLEXPORT wxString wxMac2UnixFilename( const char *s) ; WXDLLEXPORT wxString wxMac2UnixFilename( const char *s) ;
WXDLLEXPORT wxString wxUnix2MacFilename( const char *s); WXDLLEXPORT wxString wxUnix2MacFilename( const char *s);
#endif #endif
// Strip the extension, in situ // Strip the extension, in situ

View File

@@ -289,33 +289,33 @@ wxFileExists (const wxString& filename)
bool bool
wxIsAbsolutePath (const wxString& filename) wxIsAbsolutePath (const wxString& filename)
{ {
#ifdef __WXMAC__
if (filename != wxT("")) if (filename != wxT(""))
{ {
#if defined(__WXMAC__) && !defined(__DARWIN__)
// Classic or Carbon CodeWarrior like
// Carbon with Apple DevTools is Unix like
// This seems wrong to me, but there is no fix. since // This seems wrong to me, but there is no fix. since
// "MacOS:MyText.txt" is absolute whereas "MyDir:MyText.txt" // "MacOS:MyText.txt" is absolute whereas "MyDir:MyText.txt"
// is not. Or maybe ":MyDir:MyText.txt" has to be used? RR. // is not. Or maybe ":MyDir:MyText.txt" has to be used? RR.
if (filename.Find(':') != wxNOT_FOUND && filename[0] != ':') if (filename.Find(':') != wxNOT_FOUND && filename[0] != ':')
return TRUE ; return TRUE ;
}
return FALSE ;
#else #else
if (filename != wxT("")) // Unix like or Windows
{ if (filename[0] == wxT('/'))
if (filename[0] == wxT('/') return TRUE;
#endif
#ifdef __VMS__ #ifdef __VMS__
|| (filename[0] == wxT('[') && filename[1] != wxT('.')) if ((filename[0] == wxT('[') && filename[1] != wxT('.')))
return TRUE;
#endif #endif
#ifdef __WINDOWS__ #ifdef __WINDOWS__
/* MSDOS */ // MSDOS like
|| filename[0] == wxT('\\') || (wxIsalpha (filename[0]) && filename[1] == wxT(':')) if (filename[0] == wxT('\\') || (wxIsalpha (filename[0]) && filename[1] == wxT(':')))
return TRUE;
#endif #endif
)
return TRUE;
} }
return FALSE; return FALSE ;
#endif
} }
/* /*
@@ -658,171 +658,184 @@ wxContractPath (const wxString& filename, const wxString& envname, const wxStrin
// (basename) // (basename)
wxChar *wxFileNameFromPath (wxChar *path) wxChar *wxFileNameFromPath (wxChar *path)
{ {
if (path) if (path)
{ {
register wxChar *tcp; register wxChar *tcp;
tcp = path + wxStrlen (path); tcp = path + wxStrlen (path);
while (--tcp >= path) while (--tcp >= path)
{ {
#ifdef __WXMAC__ #if defined(__WXMAC__) && !defined(__DARWIN__)
if (*tcp == wxT(':') ) // Classic or Carbon CodeWarrior like
// Carbon with Apple DevTools is Unix like
if (*tcp == wxT(':'))
return tcp + 1;
#else #else
if (*tcp == wxT('/') || *tcp == wxT('\\') // Unix like or Windows
if (*tcp == wxT('/') || *tcp == wxT('\\'))
return tcp + 1;
#endif
#ifdef __VMS__ #ifdef __VMS__
|| *tcp == wxT(':') || *tcp == wxT(']')) if (*tcp == wxT(':') || *tcp == wxT(']'))
#else return tcp + 1;
)
#endif #endif
#endif } /* while */
return tcp + 1;
} /* while */
#if defined(__WXMSW__) || defined(__WXPM__) #if defined(__WXMSW__) || defined(__WXPM__)
if (wxIsalpha (*path) && *(path + 1) == wxT(':')) // MSDOS like
return path + 2; if (wxIsalpha (*path) && *(path + 1) == wxT(':'))
return path + 2;
#endif #endif
} }
return path; return path;
} }
wxString wxFileNameFromPath (const wxString& path1) wxString wxFileNameFromPath (const wxString& path1)
{ {
if (path1 != wxT("")) if (path1 != wxT(""))
{ {
wxChar *path = WXSTRINGCAST path1 ;
wxChar *path = WXSTRINGCAST path1 ; register wxChar *tcp;
register wxChar *tcp;
tcp = path + wxStrlen (path);
tcp = path + wxStrlen (path); while (--tcp >= path)
while (--tcp >= path) {
{ #if defined(__WXMAC__) && !defined(__DARWIN__)
#ifdef __WXMAC__ // Classic or Carbon CodeWarrior like
if (*tcp == wxT(':') ) // Carbon with Apple DevTools is Unix like
#else if (*tcp == wxT(':') )
if (*tcp == wxT('/') || *tcp == wxT('\\')
#ifdef __VMS__
|| *tcp == wxT(':') || *tcp == wxT(']'))
#else
)
#endif
#endif
return wxString(tcp + 1); return wxString(tcp + 1);
} /* while */ #else
// Unix like or Windows
if (*tcp == wxT('/') || *tcp == wxT('\\'))
return wxString(tcp + 1);
#endif
#ifdef __VMS__
if (*tcp == wxT(':') || *tcp == wxT(']'))
return wxString(tcp + 1);
#endif
} /* while */
#if defined(__WXMSW__) || defined(__WXPM__) #if defined(__WXMSW__) || defined(__WXPM__)
if (wxIsalpha (*path) && *(path + 1) == wxT(':')) // MSDOS like
if (wxIsalpha (*path) && *(path + 1) == wxT(':'))
return wxString(path + 2); return wxString(path + 2);
#endif #endif
} }
// Yes, this should return the path, not an empty string, otherwise // Yes, this should return the path, not an empty string, otherwise
// we get "thing.txt" -> "". // we get "thing.txt" -> "".
return path1; return path1;
} }
// Return just the directory, or NULL if no directory // Return just the directory, or NULL if no directory
wxChar * wxChar *
wxPathOnly (wxChar *path) wxPathOnly (wxChar *path)
{ {
if (path && *path) if (path && *path)
{ {
static wxChar buf[_MAXPATHLEN]; static wxChar buf[_MAXPATHLEN];
// Local copy // Local copy
wxStrcpy (buf, path); wxStrcpy (buf, path);
int l = wxStrlen(path); int l = wxStrlen(path);
bool done = FALSE; int i = l - 1;
int i = l - 1; // Search backward for a backward or forward slash
while (i > -1)
// Search backward for a backward or forward slash {
while (!done && i > -1) #if defined(__WXMAC__) && !defined(__DARWIN__)
{ // Classic or Carbon CodeWarrior like
// ] is for VMS // Carbon with Apple DevTools is Unix like
#ifdef __WXMAC__ if (path[i] == wxT(':') )
if (path[i] == wxT(':') ) {
buf[i] = 0;
return buf;
}
#else #else
if (path[i] == wxT('/') || path[i] == wxT('\\') || path[i] == wxT(']')) // Unix like or Windows
if (path[i] == wxT('/') || path[i] == wxT('\\'))
{
buf[i] = 0;
return buf;
}
#endif #endif
{
done = TRUE;
#ifdef __VMS__ #ifdef __VMS__
if ( path[i] == wxT(']') ) if (path[i] == wxT(']'))
buf[i+1] = 0; {
else buf[i+1] = 0;
return buf;
}
#endif #endif
buf[i] = 0; i --;
return buf;
} }
else i --;
}
#if defined(__WXMSW__) || defined(__WXPM__) #if defined(__WXMSW__) || defined(__WXPM__)
// Try Drive specifier // Try Drive specifier
if (wxIsalpha (buf[0]) && buf[1] == wxT(':')) if (wxIsalpha (buf[0]) && buf[1] == wxT(':'))
{ {
// A:junk --> A:. (since A:.\junk Not A:\junk) // A:junk --> A:. (since A:.\junk Not A:\junk)
buf[2] = wxT('.'); buf[2] = wxT('.');
buf[3] = wxT('\0'); buf[3] = wxT('\0');
return buf; return buf;
} }
#endif #endif
} }
return (wxChar *) NULL;
return (wxChar *) NULL;
} }
// Return just the directory, or NULL if no directory // Return just the directory, or NULL if no directory
wxString wxPathOnly (const wxString& path) wxString wxPathOnly (const wxString& path)
{ {
if (path != wxT("")) if (path != wxT(""))
{ {
wxChar buf[_MAXPATHLEN]; wxChar buf[_MAXPATHLEN];
// Local copy
wxStrcpy (buf, WXSTRINGCAST path);
int l = path.Length();
int i = l - 1;
// Local copy // Search backward for a backward or forward slash
wxStrcpy (buf, WXSTRINGCAST path); while (i > -1)
{
int l = path.Length(); #if defined(__WXMAC__) && !defined(__DARWIN__)
bool done = FALSE; // Classic or Carbon CodeWarrior like
// Carbon with Apple DevTools is Unix like
int i = l - 1; if (path[i] == wxT(':') )
{
// Search backward for a backward or forward slash buf[i] = 0;
while (!done && i > -1) return wxString(buf);
{ }
// ] is for VMS
#ifdef __WXMAC__
if (path[i] == wxT(':') )
#else #else
if (path[i] == wxT('/') || path[i] == wxT('\\') || path[i] == wxT(']')) // Unix like or Windows
if (path[i] == wxT('/') || path[i] == wxT('\\'))
{
buf[i] = 0;
return wxString(buf);
}
#endif #endif
{
done = TRUE;
#ifdef __VMS__ #ifdef __VMS__
if ( path[i] == wxT(']') ) if (path[i] == wxT(']'))
buf[i+1] = 0; {
else buf[i+1] = 0;
return wxString(buf);
}
#endif #endif
buf[i] = 0; i --;
return wxString(buf);
} }
else i --;
}
#if defined(__WXMSW__) || defined(__WXPM__) #if defined(__WXMSW__) || defined(__WXPM__)
// Try Drive specifier // Try Drive specifier
if (wxIsalpha (buf[0]) && buf[1] == wxT(':')) if (wxIsalpha (buf[0]) && buf[1] == wxT(':'))
{ {
// A:junk --> A:. (since A:.\junk Not A:\junk) // A:junk --> A:. (since A:.\junk Not A:\junk)
buf[2] = wxT('.'); buf[2] = wxT('.');
buf[3] = wxT('\0'); buf[3] = wxT('\0');
return wxString(buf); return wxString(buf);
} }
#endif #endif
} }
return wxString(wxT(""));
return wxString(wxT(""));
} }
// Utility for converting delimiters in DOS filenames to UNIX style // Utility for converting delimiters in DOS filenames to UNIX style
@@ -939,7 +952,8 @@ void wxUnixFilename2FSSpec( const char *path , FSSpec *spec )
wxMacFilename2FSSpec( var , spec ) ; wxMacFilename2FSSpec( var , spec ) ;
} }
#endif #endif // __WXMAC__
void void
wxDos2UnixFilename (char *s) wxDos2UnixFilename (char *s)
{ {
@@ -1283,7 +1297,7 @@ bool wxGetTempFileName(const wxString& prefix, wxString& buf)
// Get first file name matching given wild card. // Get first file name matching given wild card.
#ifdef __UNIX__ #if defined(__UNIX__) && !defined(__WXMAC__)
// Get first file name matching given wild card. // Get first file name matching given wild card.
// Flags are reserved for future use. // Flags are reserved for future use.
@@ -1717,7 +1731,7 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
char *cbuf = new char[sz+1]; char *cbuf = new char[sz+1];
#ifdef _MSC_VER #ifdef _MSC_VER
if (_getcwd(cbuf, sz) == NULL) { if (_getcwd(cbuf, sz) == NULL) {
#elif defined(__WXMAC__) #elif defined(__WXMAC__) && !defined(__DARWIN__)
enum enum
{ {
SFSaveDisk = 0x214, CurDirStore = 0x398 SFSaveDisk = 0x214, CurDirStore = 0x398
@@ -1735,7 +1749,7 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
#else // wxUnicode #else // wxUnicode
#ifdef _MSC_VER #ifdef _MSC_VER
if (_getcwd(buf, sz) == NULL) { if (_getcwd(buf, sz) == NULL) {
#elif defined(__WXMAC__) && !defined(__UNIX__) #elif defined(__WXMAC__) && !defined(__DARWIN__)
FSSpec cwdSpec ; FSSpec cwdSpec ;
FCBPBRec pb; FCBPBRec pb;
OSErr error; OSErr error;