--- a/vfe/unix/unixoptions.cpp
+++ b/vfe/unix/unixoptions.cpp
@@ -828,7 +828,7 @@ namespace vfePlatform
             {
                 // search setting
                 for(i = 0; io_settings[i].label; ++i)
-                    if(line != string(io_settings[i].label))
+                    if(line == string(io_settings[i].label))
                         break;
                 file_io = io_settings[i].value;
 
--- a/vfe/unix/vfeplatform.cpp
+++ b/vfe/unix/vfeplatform.cpp
@@ -250,7 +250,7 @@ namespace vfePlatform
     // case-sensitive string comparison
     bool vfeUnixSession::StrCompare (const UCS2String& lhs, const UCS2String& rhs) const
     {
-        return lhs.compare(rhs);
+        return !lhs.compare(rhs);
     }
 
     /////////////////////////////////////////////////////////////////////////
--- a/vfe/unix/unixoptions.cpp
+++ b/vfe/unix/unixoptions.cpp
@@ -584,7 +584,7 @@ namespace vfePlatform
 #ifdef UNIX_DEBUG
             cerr << "    su: " << s << endl;
 #endif
-            pos = s.find("/..", pos+3);
+            pos = s.find("/..", pos2);
         }
 
         // remove the last "/." if any
--- a/vfe/unix/unixoptions.cpp
+++ b/vfe/unix/unixoptions.cpp
@@ -1041,7 +1041,10 @@ namespace vfePlatform
 
         for(list<UnixPath>::iterator iter = m_permitted_paths.begin(); iter != m_permitted_paths.end(); iter++)
         {
-            m_Session->AddReadPath(iter->str, iter->descend);
+            if (iter->writable)
+                m_Session->AddWritePath(iter->str, iter->descend);
+            else
+                m_Session->AddReadPath(iter->str, iter->descend);
 #ifdef UNIX_DEBUG
             fprintf(stderr,
                 "  %s%s = \"%s\"\n",
