diff options
| author | Joe Marcus Clarke <marcus@FreeBSD.org> | 2007-03-19 05:14:07 +0000 |
|---|---|---|
| committer | Joe Marcus Clarke <marcus@FreeBSD.org> | 2007-03-19 05:14:07 +0000 |
| commit | 951c257ea3655de6e80c26a36c18c69ee8047ea8 (patch) | |
| tree | 249b59a23d9c6fae8db5e5639385f6273d237705 /sysutils/gnome-volume-manager/files/patch-src_manager.c | |
| parent | - Update to 0.4 preview 1 (diff) | |
Presenting GNOME 2.18 for FreeBSD. GNOME 2.18 is a departure from recent GNOME
releases in that it focuses more on stability and functionality than on
new features. Not that it doesn't have its share of new and exciting
items. See http://www.gnome.org/start/2.18/ for all the goodies in
this release.
GNOME 2.18 for FreeBSD would not have been possible without the hard work
of the FreeBSD GNOME Team and our intrepid band of testers including
J. W. Ballantine, Pawel Worach, Yasuda Keisuke, Pascal Hofstee, miwi,
Yoshihiro Ota, Vladimir Grebenschikov, Jukka A. Ukkonen,
Phillip Neumann, Franz Klammer, and Neal Delmonico.
Notes
Notes:
svn path=/head/; revision=187702
Diffstat (limited to 'sysutils/gnome-volume-manager/files/patch-src_manager.c')
| -rw-r--r-- | sysutils/gnome-volume-manager/files/patch-src_manager.c | 216 |
1 files changed, 191 insertions, 25 deletions
diff --git a/sysutils/gnome-volume-manager/files/patch-src_manager.c b/sysutils/gnome-volume-manager/files/patch-src_manager.c index 753b495ef6f4..a847dd404b6b 100644 --- a/sysutils/gnome-volume-manager/files/patch-src_manager.c +++ b/sysutils/gnome-volume-manager/files/patch-src_manager.c @@ -1,5 +1,5 @@ ---- src/manager.c.orig Mon Jul 31 16:37:36 2006 -+++ src/manager.c Wed Dec 20 14:59:45 2006 +--- src/manager.c.orig Tue Nov 7 13:01:17 2006 ++++ src/manager.c Sun Dec 31 15:33:44 2006 @@ -23,9 +23,12 @@ #include <sys/types.h> #include <sys/stat.h> @@ -13,54 +13,220 @@ #include <locale.h> -@@ -3088,10 +3091,17 @@ gvm_local_user (void) - struct utmp *utmp; - const char *user; - size_t ulen; +@@ -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]; -+ long len; ++ size_t len; +#endif - user = g_get_user_name (); - ulen = strlen (user); + if (local & LOCAL_USER_CHECKED) + return (local & LOCAL_USER_FOUND); +@@ -3208,6 +3307,7 @@ gvm_local_user (void) -+#ifdef __linux__ - setutent (); + fallback: - while (!local && (utmp = getutent ())) { -@@ -3103,7 +3113,31 @@ gvm_local_user (void) ++#ifdef __linux__ + if (!(local & LOCAL_USER_FOUND)) { + setutent (); + +@@ -3222,6 +3322,29 @@ gvm_local_user (void) + + endutent (); } - - 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) { ++ (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, ulen) != 0) ++ 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'; -+ if (!local) -+ /* Handle vty logins */ -+ local = strlen(utmp->ut_line) > 4 && strncmp(utmp->ut_line, "ttyv", 4) == 0 && utmp->ut_line[4] >= '0' && utmp->ut_line[4] <= '9'; ++ 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 - return local; - } - + + local |= LOCAL_USER_CHECKED; + |
