diff --git a/components/net/sf/briar/plugins/file/LinuxRemovableDriveFinder.java b/components/net/sf/briar/plugins/file/LinuxRemovableDriveFinder.java index ccdf0bc0e2d6777573fe5acbfe0cfde42aa771bb..4973d52243b94c29a7e6e05eeb442081c5126550 100644 --- a/components/net/sf/briar/plugins/file/LinuxRemovableDriveFinder.java +++ b/components/net/sf/briar/plugins/file/LinuxRemovableDriveFinder.java @@ -10,8 +10,9 @@ class LinuxRemovableDriveFinder extends UnixRemovableDriveFinder { @Override protected String parseMountPoint(String line) { // The format is "/dev/foo on /bar/baz type bam (opt1,opt2)" - line = line.replaceFirst("^/dev/[^ ]+ on ", ""); - return line.replaceFirst(" type [^ ]+ \\([^)]+\\)$", ""); + String pattern = "^/dev/[^ ]+ on (.*) type [^ ]+ \\([^)]+\\)$"; + String path = line.replaceFirst(pattern, "$1"); + return path.equals(line) ? null : path; } @Override diff --git a/components/net/sf/briar/plugins/file/MacRemovableDriveFinder.java b/components/net/sf/briar/plugins/file/MacRemovableDriveFinder.java index ec1ae07086c929841664ce439c9cde3dc0fdc8dc..453a3d836bf4bf4ec7d3d01966815eb1af7b0657 100644 --- a/components/net/sf/briar/plugins/file/MacRemovableDriveFinder.java +++ b/components/net/sf/briar/plugins/file/MacRemovableDriveFinder.java @@ -10,8 +10,9 @@ class MacRemovableDriveFinder extends UnixRemovableDriveFinder { @Override protected String parseMountPoint(String line) { // The format is "/dev/foo on /bar/baz (opt1, opt2)" - line = line.replaceFirst("^/dev/[^ ]+ on ", ""); - return line.replaceFirst(" \\([^)]+\\)$", ""); + String pattern = "^/dev/[^ ]+ on (.*) \\([^)]+\\)$"; + String path = line.replaceFirst(pattern, "$1"); + return path.equals(line) ? null : path; } @Override diff --git a/test/build.xml b/test/build.xml index 73ecb1176dc5ac5bf5ae1dec4b6c12f47aa7013d..bb35591483669359053b32bde42d33fc6de6e1df 100644 --- a/test/build.xml +++ b/test/build.xml @@ -25,6 +25,8 @@ <test name='net.sf.briar.i18n.FontManagerTest'/> <test name='net.sf.briar.i18n.I18nTest'/> <test name='net.sf.briar.invitation.InvitationWorkerTest'/> + <test name='net.sf.briar.plugins.file.LinuxRemovableDriveFinderTest'/> + <test name='net.sf.briar.plugins.file.MacRemovableDriveFinderTest'/> <test name='net.sf.briar.plugins.file.RemovableDrivePluginTest'/> <test name='net.sf.briar.protocol.AckReaderTest'/> <test name='net.sf.briar.protocol.BatchReaderTest'/> diff --git a/test/net/sf/briar/plugins/file/LinuxRemovableDriveFinderTest.java b/test/net/sf/briar/plugins/file/LinuxRemovableDriveFinderTest.java new file mode 100644 index 0000000000000000000000000000000000000000..4a8a85b5d2d54279e24ee416b2f2ca398708bbc8 --- /dev/null +++ b/test/net/sf/briar/plugins/file/LinuxRemovableDriveFinderTest.java @@ -0,0 +1,25 @@ +package net.sf.briar.plugins.file; + +import junit.framework.TestCase; + +import org.junit.Test; + +public class LinuxRemovableDriveFinderTest extends TestCase { + + @Test + public void testParseMountPoint() { + LinuxRemovableDriveFinder f = new LinuxRemovableDriveFinder(); + String line = "/dev/sda3 on / type ext3" + + " (rw,errors=remount-ro,commit=0)"; + assertEquals("/", f.parseMountPoint(line)); + line = "gvfs-fuse-daemon on /home/alice/.gvfs" + + " type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=alice)"; + assertEquals(null, f.parseMountPoint(line)); // Can't be parsed + line = "fusectl on /sys/fs/fuse/connections type fusectl (rw)"; + assertEquals(null, f.parseMountPoint(line)); // Can't be parsed + line = "/dev/sdd1 on /media/HAZ SPACE(!) type vfat" + + " (rw,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000," + + "shortname=mixed,dmask=0077,utf8=1,showexec,flush)"; + assertEquals("/media/HAZ SPACE(!)", f.parseMountPoint(line)); + } +} diff --git a/test/net/sf/briar/plugins/file/MacRemovableDriveFinderTest.java b/test/net/sf/briar/plugins/file/MacRemovableDriveFinderTest.java new file mode 100644 index 0000000000000000000000000000000000000000..0b1848033a5171d11762a4f6e72fe577954a00ab --- /dev/null +++ b/test/net/sf/briar/plugins/file/MacRemovableDriveFinderTest.java @@ -0,0 +1,23 @@ +package net.sf.briar.plugins.file; + +import junit.framework.TestCase; + +import org.junit.Test; + +public class MacRemovableDriveFinderTest extends TestCase { + + @Test + public void testParseMountPoint() { + MacRemovableDriveFinder f = new MacRemovableDriveFinder(); + String line = "/dev/disk0s3 on / (local, journaled)"; + assertEquals("/", f.parseMountPoint(line)); + line = "devfs on /dev (local)"; + assertEquals(null, f.parseMountPoint(line)); // Can't be parsed + line = "<volfs> on /.vol"; + assertEquals(null, f.parseMountPoint(line)); // Can't be parsed + line = "automount -nsl [117] on /Network (automounted)"; + assertEquals(null, f.parseMountPoint(line)); // Can't be parsed + line = "/dev/disk1s1 on /Volumes/HAZ SPACE(!) (local, nodev, nosuid)"; + assertEquals("/Volumes/HAZ SPACE(!)", f.parseMountPoint(line)); + } +}