diff options
Diffstat (limited to 'x11-fm/4pane/files/patch-Mounts.cpp')
| -rw-r--r-- | x11-fm/4pane/files/patch-Mounts.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/x11-fm/4pane/files/patch-Mounts.cpp b/x11-fm/4pane/files/patch-Mounts.cpp new file mode 100644 index 000000000000..b0f4b6d28554 --- /dev/null +++ b/x11-fm/4pane/files/patch-Mounts.cpp @@ -0,0 +1,102 @@ +--- Mounts.cpp.orig 2020-11-22 11:42:50 UTC ++++ Mounts.cpp +@@ -866,8 +866,13 @@ for (size_t n=0; n < parent->PartitionArray->GetCount( + if (parent->PartitionArray->Item(n)->device == dev.BeforeFirst(' ')) // BeforeFirst in case of "/dev/sda1 $UUID/$LABEL" + { if (GetDataFromMtab) // If we're unmounting, we can't rely on the PartitionArray info: the partition may not have been mounted where fstab intended + { FstabMountptTxt->Clear(); ++#ifdef __linux__ + struct mntent* mnt = parent->ReadMtab(dev.BeforeFirst(' ')); // So see where it really is + if (mnt != NULL) FstabMountptTxt->ChangeValue(wxString(mnt->mnt_dir, wxConvUTF8)); ++#else ++ struct statfs* mnt = parent->ReadMtab(dev.BeforeFirst(' ')); ++ if (mnt != NULL) FstabMountptTxt->ChangeValue(wxString(mnt->f_mntonname, wxConvUTF8)); ++#endif + return; + } + else +@@ -968,10 +973,18 @@ FstabMt = (InFstab ? wxString(fs->fs_file, wxConvUTF8) + InFstab = (fs != NULL); // Store or null the data according to the result + FstabMt = (InFstab ? wxString(fs->fs_file, wxConvUTF8) : wxT("")); + ++#ifdef __linux__ + struct mntent* mnt = DeviceAndMountManager::ReadMtab(Image); // Now read mtab to see if the share's already mounted ++#else ++struct statfs* mnt = DeviceAndMountManager::ReadMtab(Image); ++#endif + IsMounted = (mnt != NULL); + AlreadyMounted->Show(IsMounted); GetSizer()->Layout(); // If it is mounted, expose the wxStaticTxt that says so (and Layout, else 2.8.0 displays it in top left corner!) ++#ifdef __linux__ + AtMountPt = (IsMounted ? wxString(mnt->mnt_dir, wxConvUTF8) : wxT("")); // Store any mountpt, or delete any previous entry ++#else ++AtMountPt = (IsMounted ? wxString(mnt->f_mntonname, wxConvUTF8) : wxT("")); ++#endif + if (IsMounted) + MountptCombo->SetValue(AtMountPt); // Put any mountpt in the combobox + else if (InFstab) +@@ -1209,11 +1222,19 @@ FstabMt = (InFstab ? wxString(fs->fs_file, wxConvUTF8) + InFstab = (fs != NULL); // Store or null the data according to the result + FstabMt = (InFstab ? wxString(fs->fs_file, wxConvUTF8) : wxT("")); + ++#ifdef __linux__ + struct mntent* mnt = DeviceAndMountManager::ReadMtab(device1); // Now read mtab to see if the share's already mounted ++#else ++struct statfs* mnt = DeviceAndMountManager::ReadMtab(device1); ++#endif + if (mnt == NULL) mnt = DeviceAndMountManager::ReadMtab(device2); // Null means not found, so try again with the IP version + IsMounted = (mnt != NULL); + AlreadyMounted->Show(IsMounted); GetSizer()->Layout(); // If it is mounted, expose the wxStaticTxt that says so (and Layout, else 2.8.0 displays it in top left corner!) ++#ifdef __linux__ + AtMountPt = (IsMounted ? wxString(mnt->mnt_dir, wxConvUTF8) : wxT("")); // Store any mountpt, or delete any previous entry ++#else ++AtMountPt = (IsMounted ? wxString(mnt->f_mntonname, wxConvUTF8) : wxT("")); ++#endif + if (IsMounted) + MountptCombo->SetValue(AtMountPt); + else if (InFstab) +@@ -1503,10 +1524,18 @@ FstabMt = (InFstab ? wxString(fs->fs_file, wxConvUTF8) + InFstab = (fs != NULL); // Store or null the data according to the result + FstabMt = (InFstab ? wxString(fs->fs_file, wxConvUTF8) : wxT("")); + ++#ifdef __linux__ + mntent* mnt = DeviceAndMountManager::ReadMtab(device); // Now read mtab to see if the share's already mounted ++#else ++struct statfs* mnt = DeviceAndMountManager::ReadMtab(device); ++#endif + IsMounted = (mnt != NULL); + AlreadyMounted->Show(IsMounted); GetSizer()->Layout(); // If it is mounted, expose the wxStaticTxt that says so (and Layout, else 2.8.0 displays it in top left corner!) ++#ifdef __linux__ + AtMountPt = (IsMounted ? wxString(mnt->mnt_dir, wxConvUTF8) : wxT("")); // Store any mountpt, or delete any previous entry ++#else ++AtMountPt = (IsMounted ? wxString(mnt->f_mntonname, wxConvUTF8) : wxT("")); ++#endif + + if (IsMounted) + MountptCombo->SetValue(AtMountPt); +@@ -1736,6 +1765,7 @@ void UnMountSambaDialog::SearchForNetworkMounts() // + + void UnMountSambaDialog::SearchForNetworkMounts() // Scans mtab for established NFS & samba mounts + { ++#ifdef __linux__ + FILE* fmp = setmntent (_PATH_MOUNTED, "r"); // Get a file* to (probably) /etc/mtab + if (fmp==NULL) return; + +@@ -1749,6 +1779,19 @@ while (1) + { struct PartitionStruct* newmnt = new struct PartitionStruct; + newmnt->device = wxString(mnt->mnt_fsname, wxConvUTF8); + newmnt->mountpt = wxString(mnt->mnt_dir, wxConvUTF8); ++#else ++struct statfs *fslist; ++ ++int numfs = getmntinfo(&fslist, MNT_NOWAIT); ++if (numfs < 1) return; ++ ++for (int i = 0; i < numfs; ++i) ++ { wxString type(fslist[i].f_fstypename, wxConvUTF8); ++ if (ParseNetworkFstype(type) != MT_invalid) ++ { struct PartitionStruct* newmnt = new struct PartitionStruct; ++ newmnt->device = wxString(fslist[i].f_mntfromname, wxConvUTF8); ++ newmnt->mountpt = wxString(fslist[i].f_mntonname, wxConvUTF8); ++#endif + newmnt->type = type; + Mntarray.Add(newmnt); + } |
