#ifndef __MWERKS__
#include <sys/types.h>
#include <sys/stat.h>
+#else
+#ifdef __MACH__
+#include <sys/types.h>
+#include <utime.h>
+#include <sys/stat.h>
+#include <unistd.h>
#else
#include <stat.h>
#include <unistd.h>
#include <unix.h>
+ #include <fcntl.h>
+#endif
#endif
#ifdef __UNIX__
#include <windows.h>
#include "wx/msw/mslu.h"
+ // for _getcwd
+ #ifdef __MINGW32__
+ #include <io.h>
+ #endif
+
// sys/cygwin.h is needed for cygwin_conv_to_full_win32_path()
//
// note that it must be included after <windows.h>
#ifdef __CYGWIN__
#include <sys/cygwin.h>
#endif
-
- #ifndef __TWIN32__
- #include <sys/unistd.h>
- #endif
#endif // __GNUWIN32__
#endif // __WINDOWS__
// implementation
// ============================================================================
+#if defined(__WXMAC__) && !defined(__DARWIN__)
+
+WXDLLEXPORT int wxStat( const wxChar *file_name, wxStructStat *buf )
+{
+ return stat( wxMacStringToCString( file_name ), buf );
+}
+
+WXDLLEXPORT int wxAccess( const wxChar *pathname, int mode )
+{
+ return access( wxMacStringToCString( pathname ), mode );
+}
+
+WXDLLEXPORT int wxOpen( const wxChar *pathname, int flags, mode_t mode )
+{
+ return open( wxMacStringToCString( pathname ), flags, mode );
+}
+
+#endif
+
#ifdef wxNEED_WX_UNISTD_H
WXDLLEXPORT int wxStat( const wxChar *file_name, wxStructStat *buf )
// wxPathList
// ----------------------------------------------------------------------------
-IMPLEMENT_DYNAMIC_CLASS(wxPathList, wxStringList)
+// IMPLEMENT_DYNAMIC_CLASS(wxPathList, wxStringList)
+
+static inline wxChar* MYcopystring(const wxString& s)
+{
+ wxChar* copy = new wxChar[s.length() + 1];
+ return wxStrcpy(copy, s.c_str());
+}
+
+static inline wxChar* MYcopystring(const wxChar* s)
+{
+ wxChar* copy = new wxChar[wxStrlen(s) + 1];
+ return wxStrcpy(copy, s);
+}
void wxPathList::Add (const wxString& path)
{
- wxStringList::Add (WXSTRINGCAST path);
+ wxStringList::Append (WXSTRINGCAST path);
}
// Add paths e.g. from the PATH environment variable
wxChar *val = wxGetenv (WXSTRINGCAST envVariable);
if (val && *val)
{
- wxChar *s = copystring (val);
+ wxChar *s = MYcopystring (val);
wxChar *save_ptr, *token = wxStrtok (s, PATH_TOKS, &save_ptr);
if (token)
bool wxPathList::Member (const wxString& path)
{
- for (wxStringList::Node *node = GetFirst(); node; node = node->GetNext())
+ for (wxStringList::compatibility_iterator node = GetFirst(); node; node = node->GetNext())
{
wxString path2( node->GetData() );
if (
wxChar *filename = (wxChar*) NULL; /* shut up buggy egcs warning */
filename = wxIsAbsolutePath (buf) ? wxFileNameFromPath (buf) : (wxChar *)buf;
- for (wxStringList::Node *node = GetFirst(); node; node = node->GetNext())
+ for (wxStringList::compatibility_iterator node = GetFirst(); node; node = node->GetNext())
{
- wxChar *path = node->GetData();
+ const wxChar *path = node->GetData();
wxStrcpy (wxFileFunctionsBuffer, path);
wxChar ch = wxFileFunctionsBuffer[wxStrlen(wxFileFunctionsBuffer)-1];
if (ch != wxT('\\') && ch != wxT('/'))
wxStrcat(buf, wxT("/"));
#endif
wxStrcat(buf, wxFileFunctionsBuffer);
- return copystring( wxRealPath(buf) );
+ return MYcopystring( wxRealPath(buf) );
}
- return copystring( wxFileFunctionsBuffer );
+ return MYcopystring( wxFileFunctionsBuffer );
}
/*-
buf[0] = wxT('\0');
if (name == NULL || *name == wxT('\0'))
return buf;
- nm = copystring(name); // Make a scratch copy
+ nm = MYcopystring(name); // Make a scratch copy
wxChar *nm_tmp = nm;
/* Skip leading whitespace and cr */
(*myPath)[length-1] = 0 ;
// create path string for return value
- wxString result( (char*) *myPath ) ;
+ wxString result = wxMacMakeStringFromCString( *myPath ) ;
// free allocated handle
::HUnlock( myPath ) ;
// 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 )
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
{
#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
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)
{
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 = ':';
s++ ;
}
}
- return wxString (sMacFileNameConversion) ;
+ return wxString(sMacFileNameConversion) ;
}
wxString wxMacFSSpec2UnixFilename( const 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
|| defined(__WATCOMC__) \
|| defined(__GNUWIN32__)
int res = wxRemove(file);
+#elif defined(__WXMAC__)
+ int res = unlink(wxFNCONV(file));
#else
int res = unlink(OS_FILENAME(file));
#endif
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();
if ( buf )
wxStrcpy(buf, filename);
else
- buf = copystring(filename);
+ buf = MYcopystring(filename);
return buf;
}
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)
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 ;
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
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
wxChar buf[256];
GetWindowsDirectory(buf, 256);
return wxString(buf);
+#elif defined(__WXMAC__)
+ return wxMacFindFolder(kOnSystemDisk, 'macs', false);
#else
return wxEmptyString;
#endif