Решил (грязным хаком) проблему неправильных iocharset & codepage при
монтировании носителей с vfat (флешек и проч.) из-под XFCE.

Как показало изучение документации пациента, XFCE пошло курсом KDE, и
вместо pmount пользуется собственным exo-mount, при этом последний не
имеет каких-либо настроек. Поэтому проблема была просто — в exo-mount
был добавлен код прописывающий для vfat iocharset=utf8, codepage=866
и, до кучи, noatime.

Заплатка присоединена.
diff -urN exo-0.3.4~/exo-mount/exo-mount-hal.c exo-0.3.4/exo-mount/exo-mount-hal.c
--- exo-0.3.4~/exo-mount/exo-mount-hal.c	2007-12-02 13:33:44.000000000 +0200
+++ exo-0.3.4/exo-mount/exo-mount-hal.c	2008-07-17 13:57:10.734375000 +0300
@@ -662,7 +662,7 @@
           else if (strcmp (device->fsoptions[m], "shortname=") == 0
                 && strcmp (device->fstype, "vfat") == 0)
             {
-              options[n++] = g_strdup_printf ("shortname=winnt");
+              options[n++] = g_strdup ("shortname=winnt");
             }
           else if (strcmp (device->fsoptions[m], "sync") == 0
                 && device->volume == NULL)
@@ -676,6 +676,26 @@
               /* however this one is FreeBSD specific */
               options[n++] = g_strdup ("longnames");
             }
+          /* 
+            very ugly hack to add support for mount options `noatime', 
+            `iocharset=utf8' and `codepage=866' 
+          */
+          /* for any filesystem */
+         else if (strcmp (device->fsoptions[m], "noatime") == 0)
+            {
+              options[n++] = g_strdup ("noatime");
+            }
+          /* for vfat only */
+         else if (strcmp (device->fsoptions[m], "iocharset=") == 0
+                && strcmp (device->fstype, "vfat") == 0)
+            {
+              options[n++] = g_strdup ("iocharset=utf8");
+            }
+         else if (strcmp (device->fsoptions[m], "codepage=") == 0
+                && strcmp (device->fstype, "vfat") == 0)
+            {
+              options[n++] = g_strdup ("codepage=866");
+            }
         }
     }
 

Ответить