diff options
author | Daniel Gryniewicz <dang@gentoo.org> | 2007-07-05 23:58:45 +0000 |
---|---|---|
committer | Daniel Gryniewicz <dang@gentoo.org> | 2007-07-05 23:58:45 +0000 |
commit | 71fc68992e36154e1041936d908ac8b208a53b24 (patch) | |
tree | 897ff658da2d664758a9b6266ba1b1e560759208 /gnome-base | |
parent | Add missing dependency on virtual/emacs. (diff) | |
download | gentoo-2-71fc68992e36154e1041936d908ac8b208a53b24.tar.gz gentoo-2-71fc68992e36154e1041936d908ac8b208a53b24.tar.bz2 gentoo-2-71fc68992e36154e1041936d908ac8b208a53b24.zip |
Add fixes for fbsd; bug #183442
(Portage version: 2.1.3_rc6)
Diffstat (limited to 'gnome-base')
3 files changed, 262 insertions, 2 deletions
diff --git a/gnome-base/gnome-volume-manager/ChangeLog b/gnome-base/gnome-volume-manager/ChangeLog index 7c6642a87ac3..fc6afd003695 100644 --- a/gnome-base/gnome-volume-manager/ChangeLog +++ b/gnome-base/gnome-volume-manager/ChangeLog @@ -1,6 +1,11 @@ # ChangeLog for gnome-base/gnome-volume-manager # Copyright 1999-2007 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-volume-manager/ChangeLog,v 1.83 2007/06/22 21:32:33 jer Exp $ +# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-volume-manager/ChangeLog,v 1.84 2007/07/05 23:58:45 dang Exp $ + + 05 Jul 2007; Daniel Gryniewicz <dang@gentoo.org> + +files/gnome-volume-manager-2.17.0-fbsd.patch, + gnome-volume-manager-2.17.0.ebuild: + Add fixes for fbsd; bug #183442 22 Jun 2007; Jeroen Roovers <jer@gentoo.org> gnome-volume-manager-2.17.0.ebuild: diff --git a/gnome-base/gnome-volume-manager/files/gnome-volume-manager-2.17.0-fbsd.patch b/gnome-base/gnome-volume-manager/files/gnome-volume-manager-2.17.0-fbsd.patch new file mode 100644 index 000000000000..615347d6f4a7 --- /dev/null +++ b/gnome-base/gnome-volume-manager/files/gnome-volume-manager-2.17.0-fbsd.patch @@ -0,0 +1,248 @@ +diff --exclude-from=/home/dang/.scripts/diffrc -up -ruN gnome-volume-manager-2.17.0.orig/src/manager.c gnome-volume-manager-2.17.0/src/manager.c +--- gnome-volume-manager-2.17.0.orig/src/manager.c 2006-11-07 13:01:17.000000000 -0500 ++++ gnome-volume-manager-2.17.0/src/manager.c 2007-07-05 19:48:50.000000000 -0400 +@@ -23,9 +23,12 @@ + #include <sys/types.h> + #include <sys/stat.h> + #include <dirent.h> ++#include <fcntl.h> + #include <signal.h> + #include <unistd.h> + #include <utmp.h> ++#include <sys/param.h> ++#include <sys/mount.h> + + #include <locale.h> + +@@ -1556,12 +1559,27 @@ enum { + MOUNT_UID = (1 << 15), + MOUNT_UMASK = (1 << 16), + MOUNT_UTF8 = (1 << 17), ++ MOUNT_LOCALE = (1 << 18), ++ MOUNT_LONGNAME = (1 << 19), + }; + + static struct { + const char *name; + guint32 flag; + } mount_options[] = { ++#ifdef __FreeBSD__ ++ { "-D=", MOUNT_CODEPAGE }, /* vfat */ ++ { "-M=", MOUNT_DMASK }, /* vfat */ ++ { "-m=", MOUNT_FMASK }, /* vfat, ntfs */ ++ { "-L=", MOUNT_LOCALE }, /* vfat */ ++ { "-C=", MOUNT_IOCHARSET }, /* ntfs, ios9660 */ ++ { "noatime", MOUNT_NOATIME }, ++ { "noexec", MOUNT_NOEXEC }, ++ { "ro", MOUNT_READ_ONLY }, ++ { "longnames", MOUNT_LONGNAME }, /* vfat */ ++ { "sync", MOUNT_SYNC }, ++ { "-u=", MOUNT_UID }, /* vfat, ntfs */ ++#else + { "codepage=", MOUNT_CODEPAGE }, /* vfat */ + { "data=", MOUNT_DATA }, /* ext3 */ + { "dirsync", MOUNT_DIRSYNC }, +@@ -1580,6 +1598,7 @@ static struct { + { "uid=", MOUNT_UID }, /* vfat, ntfs, udf, iso9660 */ + { "umask=", MOUNT_UMASK }, /* vfat, ntfs, udf */ + { "utf8", MOUNT_UTF8 }, /* vfat, iso9660 */ ++#endif + }; + + +@@ -1760,10 +1779,17 @@ gvm_mount_options (GPtrArray *options, g + g_slist_free_1 (l); + } + ++#ifndef __FreeBSD__ + if (opts & MOUNT_UID) { + option = g_strdup_printf ("uid=%u", getuid ()); + g_ptr_array_add (options, option); + } ++#else ++ if (opts & MOUNT_UID && (!strcmp (where, "vfat") || !strcmp (where, "ntfs"))) { ++ option = g_strdup_printf ("u=%u", getuid ()); ++ g_ptr_array_add (options, option); ++ } ++#endif + + return TRUE; + } +@@ -1813,7 +1839,7 @@ gvm_device_mount (const char *udi, gbool + + return retval; + } else { +- char *mount_point, *fstype, *drive, **moptions, fmask_opt[12], *charset_opt = NULL; ++ char *mount_point, *fstype, *drive, **moptions, fmask_opt[12], *charset_opt = NULL, *locale_opt = NULL; + DBusMessage *dmesg, *reply; + gboolean freev = FALSE; + GPtrArray *options; +@@ -1893,21 +1919,86 @@ gvm_device_mount (const char *udi, gbool + + if (opts & MOUNT_FMASK) { + mask = umask (0); ++#ifdef __FreeBSD__ ++ snprintf (fmask_opt, sizeof (fmask_opt), "-m=%#o", mask | 0111); ++#else + snprintf (fmask_opt, sizeof (fmask_opt), "fmask=%#o", mask | 0111); ++#endif + g_ptr_array_add (options, fmask_opt); + umask (mask); + } + + if (opts & MOUNT_SHORTNAME) + g_ptr_array_add (options, "shortname=lower"); ++ if (opts & MOUNT_LONGNAME) ++ g_ptr_array_add (options, "longnames"); ++ ++ if (opts & MOUNT_LOCALE) { ++ char *locale; ++ ++ locale = setlocale(LC_ALL, NULL); ++ if (!locale) ++ locale = getenv("LANG"); ++ if (locale) { ++ ++ locale_opt = g_strdup_printf ("-L=%s", locale); ++ g_ptr_array_add (options, locale_opt); ++ } ++ } ++ ++#ifdef __FreeBSD__ ++ if (opts & MOUNT_CODEPAGE) { ++ if ((iocharset = gvm_iocharset ())) { ++ charset_opt = g_strdup_printf ("-D=%s", iocharset); ++ g_ptr_array_add (options, charset_opt); ++ } ++ } ++ ++ if (opts & MOUNT_UID) { ++ snprintf (uid, sizeof (uid) - 1, "-u=%s", getuid ()); ++ g_ptr_array_add (options, uid); ++ } ++#endif + } else if (!strcmp (fstype, "iso9660")) { + /* only care about uid= and iocharset= */ ++#ifdef __FreeBSD__ ++ if (opts & MOUNT_IOCHARSET) { ++ if ((iocharset = gvm_iocharset ())) { ++ charset_opt = g_strdup_printf ("-C=%s", iocharset); ++ g_ptr_array_add (options, charset_opt); ++ } ++ } ++#endif + } else if (!strcmp (fstype, "udf")) { + /* also care about uid= and iocharset= */ + if (opts & MOUNT_NOATIME) + g_ptr_array_add (options, "noatime"); ++#ifdef __FreeBSD__ ++ if (opts & MOUNT_IOCHARSET) { ++ if ((iocharset = gvm_iocharset ())) { ++ charset_opt = g_strdup_printf ("-C=%s", iocharset); ++ g_ptr_array_add (options, charset_opt); ++ } ++ } ++#endif ++ } else if (!strcmp (fstype, "ntfs")) { ++ /* only care about uid= and iocharset= */ ++#ifdef __FreeBSD__ ++ if (opts & MOUNT_IOCHARSET) { ++ if ((iocharset = gvm_iocharset ())) { ++ charset_opt = g_strdup_printf ("-C=%s", iocharset); ++ g_ptr_array_add (options, charset_opt); ++ } ++ } ++ ++ if (opts & MOUNT_UID) { ++ snprintf (uid, sizeof (uid) - 1, "-u=%s", getuid ()); ++ g_ptr_array_add (options, uid); ++ } ++#endif + } + ++#ifndef __FreeBSD__ + if (opts & (MOUNT_IOCHARSET|MOUNT_UTF8)) { + if ((iocharset = gvm_iocharset ())) { + if ((opts & MOUNT_UTF8) && !strcmp (iocharset, "utf8")) { +@@ -1923,6 +2014,7 @@ gvm_device_mount (const char *udi, gbool + snprintf (uid, sizeof (uid) - 1, "uid=%u", getuid ()); + g_ptr_array_add (options, uid); + } ++#endif + + libhal_free_string (fstype); + } +@@ -1947,6 +2039,7 @@ gvm_device_mount (const char *udi, gbool + + g_ptr_array_free (options, TRUE); + g_free (charset_opt); ++ g_free (locale_opt); + + policy = g_new (struct _MountPolicy, 1); + policy->udi = g_strdup (udi); +@@ -3185,6 +3278,12 @@ gvm_local_user (void) + size_t n; + DIR *dir; + int vt; ++#ifndef __linux__ ++ int bytes, fd; ++ struct stat sb; ++ struct utmp buf[1024]; ++ size_t len; ++#endif + + if (local & LOCAL_USER_CHECKED) + return (local & LOCAL_USER_FOUND); +@@ -3208,6 +3307,7 @@ gvm_local_user (void) + + fallback: + ++#ifdef __linux__ + if (!(local & LOCAL_USER_FOUND)) { + setutent (); + +@@ -3222,6 +3322,29 @@ gvm_local_user (void) + + endutent (); + } ++#else ++ if ((fd = open (_PATH_WTMP, O_RDONLY, 0)) < 0 || fstat(fd, &sb) == -1) { ++ close (fd); ++ return TRUE; ++ } ++ ++ len = (sb.st_size + sizeof(buf) - 1) / sizeof(buf); ++ ++ while (!local && --len >= 0) { ++ if (lseek(fd, (off_t) (len * sizeof(buf)), L_SET) == -1 || ++ (bytes = read (fd, buf, sizeof(buf))) == -1) { ++ close (fd); ++ return TRUE; ++ } ++ for (utmp = &buf[bytes / sizeof(buf[0]) - 1]; !local && utmp >= buf; --utmp) { ++ if (!utmp->ut_name[0] || strncmp (utmp->ut_name, user, n) != 0) ++ continue; ++ local = utmp->ut_line[0] == ':' && utmp->ut_line[1] >= '0' && utmp->ut_line[1] <= '9' || !strncmp (utmp->ut_line, "ttyv", 4) ? LOCAL_USER_FOUND : 0; ++ } ++ } ++ ++ close (fd); ++#endif + + local |= LOCAL_USER_CHECKED; + +diff --exclude-from=/home/dang/.scripts/diffrc -up -ruN gnome-volume-manager-2.17.0.orig/src/properties.c gnome-volume-manager-2.17.0/src/properties.c +--- gnome-volume-manager-2.17.0.orig/src/properties.c 2006-11-07 13:01:17.000000000 -0500 ++++ gnome-volume-manager-2.17.0/src/properties.c 2007-07-05 19:48:50.000000000 -0400 +@@ -504,7 +504,11 @@ main (int argc, char **argv) + _("The \"hald\" service is required but not currently " + "running. Enable the service and rerun this application, " + "or contact your system administrator.\n\n" ++#ifndef __FreeBSD__ + "Note: You need Linux kernel 2.6 for volume " ++#else ++ "Note: You need sysutils/hal installed for volume " ++#endif + "management to work.")); + + gtk_dialog_run (GTK_DIALOG (dialog)); diff --git a/gnome-base/gnome-volume-manager/gnome-volume-manager-2.17.0.ebuild b/gnome-base/gnome-volume-manager/gnome-volume-manager-2.17.0.ebuild index 73dea082ee47..8aaff3f65dd3 100644 --- a/gnome-base/gnome-volume-manager/gnome-volume-manager-2.17.0.ebuild +++ b/gnome-base/gnome-volume-manager/gnome-volume-manager-2.17.0.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-volume-manager/gnome-volume-manager-2.17.0.ebuild,v 1.2 2007/06/22 21:32:33 jer Exp $ +# $Header: /var/cvsroot/gentoo-x86/gnome-base/gnome-volume-manager/gnome-volume-manager-2.17.0.ebuild,v 1.3 2007/07/05 23:58:45 dang Exp $ inherit gnome2 eutils autotools @@ -46,6 +46,13 @@ pkg_setup() { G2CONF="${G2CONF} --disable-multiuser" } +src_unpack() { + gnome2_src_unpack + + # fbsd fixes. bug #183442 + epatch "${FILESDIR}"/${P}-fbsd.patch +} + pkg_postinst() { gnome2_pkg_postinst |