]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/fileconf.cpp
added --enable-filesystem
[wxWidgets.git] / src / common / fileconf.cpp
index d26dd662c746f1d7357cdd560ed17d5fd6cfd239..d9ab373bdb55eeba77926270031820671039b20d 100644 (file)
@@ -49,9 +49,6 @@
 #if defined(__WXPM__)
   #define INCL_DOS
   #include <os2.h>
-  #define LINKAGEMODE _Optlink
-#else
-  #define LINKAGEMODE
 #endif
 
 #include  <stdlib.h>
@@ -98,7 +95,9 @@ wxString wxFileConfig::GetGlobalDir()
 {
   wxString strDir;
 
-  #ifdef __UNIX__
+  #ifdef __VMS__ // Note if __VMS is defined __UNIX is also defined
+    strDir = wxT("sys$manager:");
+  #elif defined( __UNIX__ )
     strDir = wxT("/etc/");
   #elif defined(__WXPM__)
     ULONG                           aulSysInfo[QSV_MAX] = {0};
@@ -194,7 +193,19 @@ wxString wxFileConfig::GetGlobalDir()
   #elif defined(__WXSTUBS__)
     wxASSERT_MSG( FALSE, wxT("TODO") ) ;
   #elif defined(__WXMAC__)
-    wxASSERT_MSG( FALSE, wxT("TODO") ) ;
+  {
+               short           vRefNum  ;
+               long            dirID ;
+               
+               if ( FindFolder( (short) kOnSystemDisk, kPreferencesFolderType, kDontCreateFolder, &vRefNum, &dirID) == noErr)
+               {
+                       FSSpec file ;
+                       if ( FSMakeFSSpec( vRefNum , dirID , "\p" , &file ) == noErr )
+                       {
+                               strDir = wxMacFSSpec2UnixFilename( &file ) + "/" ;
+                       }
+               }
+  }
   #else // Windows
     wxChar szWinDir[MAX_PATH];
     ::GetWindowsDirectory(szWinDir, MAX_PATH);
@@ -210,13 +221,20 @@ wxString wxFileConfig::GetLocalDir()
 {
   wxString strDir;
 
+#ifndef __WXMAC__
   wxGetHomeDir(&strDir);
 
-#ifdef  __UNIX__
+#ifndef __VMS__
+# ifdef  __UNIX__
   if (strDir.Last() != wxT('/')) strDir << wxT('/');
 #else
   if (strDir.Last() != wxT('\\')) strDir << wxT('\\');
 #endif
+#endif
+#else
+       // no local dir concept on mac
+       return GetGlobalDir() ;
+#endif
 
   return strDir;
 }
@@ -229,6 +247,8 @@ wxString wxFileConfig::GetGlobalFileName(const wxChar *szFile)
   if ( wxStrchr(szFile, wxT('.')) == NULL )
   #ifdef  __UNIX__
     str << wxT(".conf");
+  #elif defined( __WXMAC__ )
+     str << " Preferences";
   #else   // Windows
     str << wxT(".ini");
   #endif  // UNIX/Win
@@ -238,8 +258,14 @@ wxString wxFileConfig::GetGlobalFileName(const wxChar *szFile)
 
 wxString wxFileConfig::GetLocalFileName(const wxChar *szFile)
 {
-  wxString str = GetLocalDir();
-
+#ifdef __VMS__ // On VMS I saw the problem that the home directory was appended
+   // twice for the configuration file. Does that also happen for other
+   // platforms?
+   wxString str = wxT( ' ' ); 
+#else
+   wxString str = GetLocalDir();
+#endif
+   
   #ifdef  __UNIX__
     str << wxT('.');
   #endif
@@ -251,6 +277,10 @@ wxString wxFileConfig::GetLocalFileName(const wxChar *szFile)
       str << wxT(".ini");
   #endif
 
+
+  #ifdef __WXMAC__
+     str << " Preferences";
+  #endif
   return str;
 }
 
@@ -439,11 +469,15 @@ void wxFileConfig::Parse(wxTextFile& file, bool bLocal)
     }
     else {                        // a key
       const wxChar *pEnd = pStart;
-      while ( *pEnd != wxT('=') && !wxIsspace(*pEnd) ) {
+      while ( *pEnd && *pEnd != wxT('=') && !wxIsspace(*pEnd) ) {
         if ( *pEnd == wxT('\\') ) {
           // next character may be space or not - still take it because it's
-          // quoted
+          // quoted (unless there is nothing)
           pEnd++;
+          if ( !*pEnd ) {
+            // the error message will be given below anyhow
+            break;
+          }
         }
 
         pEnd++;
@@ -562,7 +596,7 @@ bool wxFileConfig::GetFirstGroup(wxString& str, long& lIndex) const
 bool wxFileConfig::GetNextGroup (wxString& str, long& lIndex) const
 {
   if ( size_t(lIndex) < m_pCurrentGroup->Groups().Count() ) {
-    str = m_pCurrentGroup->Groups()[lIndex++]->Name();
+    str = m_pCurrentGroup->Groups()[(size_t)lIndex++]->Name();
     return TRUE;
   }
   else
@@ -578,7 +612,7 @@ bool wxFileConfig::GetFirstEntry(wxString& str, long& lIndex) const
 bool wxFileConfig::GetNextEntry (wxString& str, long& lIndex) const
 {
   if ( size_t(lIndex) < m_pCurrentGroup->Entries().Count() ) {
-    str = m_pCurrentGroup->Entries()[lIndex++]->Name();
+    str = m_pCurrentGroup->Entries()[(size_t)lIndex++]->Name();
     return TRUE;
   }
   else
@@ -731,7 +765,7 @@ bool wxFileConfig::Write(const wxString& key, long lValue)
 
 bool wxFileConfig::Flush(bool /* bCurrentOnly */)
 {
-  if ( LineListIsEmpty() || !m_pRootGroup->IsDirty() )
+  if ( LineListIsEmpty() || !m_pRootGroup->IsDirty() || !m_strLocalFile )
     return TRUE;
 
   wxTempFile file(m_strLocalFile);
@@ -749,7 +783,25 @@ bool wxFileConfig::Flush(bool /* bCurrentOnly */)
     }
   }
 
+#ifndef __WXMAC__
   return file.Commit();
+#else
+  bool ret = file.Commit();
+  if ( ret )
+  {
+       FSSpec spec ;
+       
+       wxUnixFilename2FSSpec( m_strLocalFile , &spec ) ;
+       FInfo finfo ;
+       if ( FSpGetFInfo( &spec , &finfo ) == noErr )
+       {
+               finfo.fdType = 'TEXT' ;
+               finfo.fdCreator = 'ttxt' ;
+               FSpSetFInfo( &spec , &finfo ) ;
+       }
+  }
+  return ret ;
+#endif
 }
 
 // ----------------------------------------------------------------------------