summaryrefslogtreecommitdiffstats
path: root/x11-fm
diff options
context:
space:
mode:
authormarcus <marcus@FreeBSD.org>2002-09-11 06:11:49 +0000
committermarcus <marcus@FreeBSD.org>2002-09-11 06:11:49 +0000
commit9e08b836678289a5d9c317d7253d8642b2104d19 (patch)
treee63bc8f7ee40a13b7c5fa2450237a399f2ffac38 /x11-fm
parente15d1dbf92c9eca32e39ad060d6ead75e55439b4 (diff)
downloadFreeBSD-ports-9e08b836678289a5d9c317d7253d8642b2104d19.zip
FreeBSD-ports-9e08b836678289a5d9c317d7253d8642b2104d19.tar.gz
Forward-port the nautilus patches for fixing removable media volumes on
the desktop.
Diffstat (limited to 'x11-fm')
-rw-r--r--x11-fm/nautilus2/Makefile2
-rw-r--r--x11-fm/nautilus2/files/patch-libnautilus-private::nautilus-volume-monitor.c75
2 files changed, 64 insertions, 13 deletions
diff --git a/x11-fm/nautilus2/Makefile b/x11-fm/nautilus2/Makefile
index 2df134b..6106194 100644
--- a/x11-fm/nautilus2/Makefile
+++ b/x11-fm/nautilus2/Makefile
@@ -7,7 +7,7 @@
PORTNAME= nautilus2
PORTVERSION= 2.0.6
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= x11-fm gnome
MASTER_SITES= ${MASTER_SITE_GNOME}
MASTER_SITE_SUBDIR= 2.0.1/sources/${PORTNAME:S/2$//}
diff --git a/x11-fm/nautilus2/files/patch-libnautilus-private::nautilus-volume-monitor.c b/x11-fm/nautilus2/files/patch-libnautilus-private::nautilus-volume-monitor.c
index cedcf1a7..3d1bca8 100644
--- a/x11-fm/nautilus2/files/patch-libnautilus-private::nautilus-volume-monitor.c
+++ b/x11-fm/nautilus2/files/patch-libnautilus-private::nautilus-volume-monitor.c
@@ -1,5 +1,5 @@
--- libnautilus-private/nautilus-volume-monitor.c.orig Wed Aug 28 09:37:20 2002
-+++ libnautilus-private/nautilus-volume-monitor.c Tue Sep 10 16:37:32 2002
++++ libnautilus-private/nautilus-volume-monitor.c Wed Sep 11 02:04:23 2002
@@ -59,6 +59,18 @@
#include <sys/types.h>
#include <unistd.h>
@@ -28,19 +28,30 @@
#define setmntent(f,m) fopen(f,m)
#endif
-@@ -501,6 +513,11 @@
+@@ -492,6 +504,9 @@
+ static gboolean
+ has_removable_mntent_options (MountTableEntry *ent)
+ {
++#ifdef __FreeBSD__
++ struct fstab *fsent;
++#endif
+ #ifdef HAVE_HASMNTOPT
+ /* Use "owner" or "user" or "users" as our way of determining a removable volume */
+ if (hasmntopt (ent, "user") != NULL
+@@ -501,6 +516,12 @@
return TRUE;
}
#endif
+#ifdef __FreeBSD__
-+ if (eel_str_has_prefix (ent->f_mntonname, "/mnt/")) {
++ fsent = getfsspec(ent->f_mntfromname);
++ if (fsent != NULL && strstr (fsent->fs_mntops, "noauto")) {
+ return TRUE;
+ }
+#endif
#ifdef SOLARIS_MNT
if (eel_str_has_prefix (ent->mnt_special, "/vol/")) {
-@@ -522,10 +539,15 @@
+@@ -522,10 +543,15 @@
static GList *
get_removable_volumes (NautilusVolumeMonitor *monitor)
{
@@ -59,7 +70,7 @@
char * fs_opt;
#ifdef HAVE_SYS_MNTTAB_H
MountTableEntry ent_storage;
-@@ -533,26 +555,27 @@
+@@ -533,26 +559,27 @@
#ifdef HAVE_GETMNTINFO
int count, index;
#endif
@@ -92,7 +103,7 @@
return NULL;
}
-@@ -587,9 +610,21 @@
+@@ -587,9 +614,21 @@
(monitor, volume, ent->mnt_type, volumes);
}
}
@@ -115,7 +126,7 @@
#ifdef HAVE_CDDA
volume = create_volume (CD_AUDIO_PATH, CD_AUDIO_PATH);
-@@ -619,7 +654,7 @@
+@@ -619,7 +658,7 @@
return result;
}
@@ -124,7 +135,7 @@
static gboolean
volume_is_removable (const NautilusVolume *volume)
-@@ -963,23 +998,34 @@
+@@ -963,23 +1002,34 @@
@@ -161,7 +172,7 @@
while (! getmntent(fh, &ent)) {
volume = create_volume (ent.mnt_special, ent.mnt_mountp);
volume->is_removable = has_removable_mntent_options (&ent);
-@@ -988,6 +1034,16 @@
+@@ -988,6 +1038,16 @@
}
fclose (fh);
@@ -178,7 +189,47 @@
return volumes;
}
-@@ -1765,7 +1821,7 @@
+@@ -1214,9 +1274,38 @@
+ static int
+ get_cdrom_type (const char *vol_dev_path, int* fd)
+ {
+-#ifndef SOLARIS_MNT
++#if !defined(SOLARIS_MNT) && !defined(FREEBSD_MNT)
+ *fd = open (vol_dev_path, O_RDONLY|O_NONBLOCK);
+ return ioctl (*fd, CDROM_DISC_STATUS, CDSL_CURRENT);
++#elif defined(FREEBSD_MNT)
++ struct ioc_toc_header header;
++ struct ioc_read_toc_single_entry entry;
++ int type;
++
++ *fd = open (vol_dev_path, O_RDONLY|O_NONBLOCK);
++ if (*fd < 0) {
++ return CDS_DATA_1;
++ }
++
++ if ( ioctl(*fd, CDIOREADTOCHEADER, &header) == 0) {
++ return CDS_DATA_1;
++ }
++
++ type = CDS_DATA_1;
++
++ for (entry.track = header.starting_track;
++ entry.track <= header.ending_track;
++ entry.track++) {
++ entry.address_format = CD_LBA_FORMAT;
++ if (ioctl (*fd, CDIOREADTOCENTRY, &entry) == 0) {
++ if (entry.entry.control & CDROM_DATA_TRACK) {
++ type = CDS_AUDIO;
++ break;
++ }
++ }
++ }
++
++ return type;
+ #else
+ GString *new_dev_path;
+ struct cdrom_tocentry entry;
+@@ -1765,7 +1854,7 @@
for (node = volume_list; node != NULL; node = node->next) {
volume = node->data;
@@ -187,7 +238,7 @@
/* These are set up by get_current_mount_list for Solaris. */
volume->is_removable = volume_is_removable (volume);
#endif
-@@ -1794,7 +1850,7 @@
+@@ -1794,7 +1883,7 @@
ok = mount_volume_auto_add (volume);
} else if (strcmp (file_system_type_name, "cdda") == 0) {
ok = mount_volume_cdda_add (volume);
@@ -196,7 +247,7 @@
ok = mount_volume_iso9660_add (volume);
} else if (strcmp (file_system_type_name, "nfs") == 0) {
ok = mount_volume_nfs_add (volume);
-@@ -1823,8 +1879,8 @@
+@@ -1823,8 +1912,8 @@
}
/* Identify device type */
OpenPOWER on IntegriCloud