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:
@@ -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
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user