]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/filefn.cpp
make string at least empty (instead of containing garbage) if malloc() failed
[wxWidgets.git] / src / common / filefn.cpp
index de78ad948a3e52ecd6ae72037363d342b1562c46..40af10e79ab2cc5e263758e997e6e03313af4480 100644 (file)
@@ -189,6 +189,25 @@ const off_t wxInvalidOffset = (off_t)-1;
 // 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 )
@@ -213,11 +232,23 @@ WXDLLEXPORT int wxOpen( const wxChar *pathname, int flags, mode_t mode )
 // 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
@@ -239,7 +270,7 @@ void wxPathList::AddEnvList (const wxString& envVariable)
     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)
@@ -278,7 +309,7 @@ void wxPathList::EnsureFileAccessible (const wxString& path)
 
 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 (
@@ -306,9 +337,9 @@ wxString wxPathList::FindValidPath (const wxString& file)
   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('/'))
@@ -502,9 +533,9 @@ wxChar *wxCopyAbsolutePath(const wxString& filename)
         wxStrcat(buf, wxT("/"));
 #endif
     wxStrcat(buf, wxFileFunctionsBuffer);
-    return copystring( wxRealPath(buf) );
+    return MYcopystring( wxRealPath(buf) );
   }
-  return copystring( wxFileFunctionsBuffer );
+  return MYcopystring( wxFileFunctionsBuffer );
 }
 
 /*-
@@ -553,7 +584,7 @@ wxChar *wxExpandPath(wxChar *buf, const wxChar *name)
     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 */
@@ -1074,13 +1105,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
@@ -1385,7 +1416,7 @@ wxChar *wxGetTempFileName(const wxString& prefix, wxChar *buf)
     if ( buf )
         wxStrcpy(buf, filename);
     else
-        buf = copystring(filename);
+        buf = MYcopystring(filename);
 
     return buf;
 }
@@ -1633,6 +1664,8 @@ wxString wxGetOSDirectory()
     wxChar buf[256];
     GetWindowsDirectory(buf, 256);
     return wxString(buf);
+#elif defined(__WXMAC__)
+    return wxMacFindFolder(kOnSystemDisk, 'macs', false);
 #else
     return wxEmptyString;
 #endif