diff options
author | Joe Marcus Clarke <marcus@FreeBSD.org> | 2008-03-24 03:52:36 +0000 |
---|---|---|
committer | Joe Marcus Clarke <marcus@FreeBSD.org> | 2008-03-24 03:52:36 +0000 |
commit | 6f32add9a75efb180e462ffbdb0b080bc88088e3 (patch) | |
tree | 0fc7af36e22fc0dc7c1dc8aacabf6fe117e881da /devel/libgtop | |
parent | - Add USE_XORG= x11 (diff) |
The FreeBSD GNOME team is proud to annunce the release of GNOME 2.22.0 for
FreeBSD. The official GNOME 2.22 release notes can be found at
http://library.gnome.org/misc/release-notes/2.22/ . On the FreeBSD front,
this release features an updated hal port with support for video4linux
devices, DRM (Direct Rendering), and better support of removable media. Work
is also underway to tie webkit more closely into GNOME. As part of the
GNOME 2.22 upgrade, GStreamer received a rather large upgrade as well.
Be sure to consult UPDATING on the proper steps to upgrade all of your
GNOME ports.
This release would not have been possible without the contributions and
testing efforts of the following people:
Pawel Worach
kan
edwin
Peter Ulrich Kruppa
J. W. Ballantine
Yasuda Keisuke
Andriy Gapon
Diffstat (limited to 'devel/libgtop')
-rw-r--r-- | devel/libgtop/Makefile | 15 | ||||
-rw-r--r-- | devel/libgtop/distinfo | 6 | ||||
-rw-r--r-- | devel/libgtop/files/patch-sysdeps_freebsd_Makefile.in | 28 | ||||
-rw-r--r-- | devel/libgtop/files/patch-sysdeps_freebsd_fsusage.c | 61 | ||||
-rw-r--r-- | devel/libgtop/files/patch-sysdeps_freebsd_mountlist.c | 171 | ||||
-rw-r--r-- | devel/libgtop/files/patch-sysdeps_freebsd_procopenfiles.c | 186 | ||||
-rw-r--r-- | devel/libgtop/files/patch-sysdeps_freebsd_procwd.c | 94 | ||||
-rw-r--r-- | devel/libgtop/pkg-plist | 3 |
8 files changed, 553 insertions, 11 deletions
diff --git a/devel/libgtop/Makefile b/devel/libgtop/Makefile index 8467154af8af..e7a846abb82c 100644 --- a/devel/libgtop/Makefile +++ b/devel/libgtop/Makefile @@ -3,23 +3,18 @@ # Whom: Joe Marcus Clarke <marcus@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/devel/libgtop/Makefile,v 1.24 2007/09/16 17:22:25 ahze Exp $ +# $MCom: ports/devel/libgtop/Makefile,v 1.34 2008/03/10 21:59:17 mezz Exp $ # PORTNAME= libgtop -PORTVERSION= 2.20.1 -PORTREVISION= 1 +PORTVERSION= 2.22.0 CATEGORIES= devel gnome -MASTER_SITES= ${MASTER_SITE_GNOME} -MASTER_SITE_SUBDIR= sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/} +MASTER_SITES= GNOME DIST_SUBDIR= gnome2 MAINTAINER= gnome@FreeBSD.org COMMENT= GNOME 2 top library -LIB_DEPENDS= popt.0:${PORTSDIR}/devel/popt -RUN_DEPENDS= lsof:${PORTSDIR}/sysutils/lsof - USE_BZIP2= yes USE_PERL5_BUILD=yes USE_GETTEXT= yes @@ -36,6 +31,10 @@ INFO= libgtop2 .include <bsd.port.pre.mk> +.if ${OSVERSION} < 800019 +RUN_DEPENDS+= lsof:${PORTSDIR}/sysutils/lsof +.endif + .if ${OSVERSION} >= 600000 PKGMESSAGE= ${FILESDIR}/pkg-message .endif diff --git a/devel/libgtop/distinfo b/devel/libgtop/distinfo index c2752cf6af14..41067cad3395 100644 --- a/devel/libgtop/distinfo +++ b/devel/libgtop/distinfo @@ -1,3 +1,3 @@ -MD5 (gnome2/libgtop-2.20.1.tar.bz2) = b6fa671e8325bd8dbce684527791225a -SHA256 (gnome2/libgtop-2.20.1.tar.bz2) = 1e4d9cdedee5105c99a7bf3363e9bc375bff82923e24f55e475050937f482135 -SIZE (gnome2/libgtop-2.20.1.tar.bz2) = 770145 +MD5 (gnome2/libgtop-2.22.0.tar.bz2) = c4f15d95dea6441a08b4f2260996becd +SHA256 (gnome2/libgtop-2.22.0.tar.bz2) = f6e05fcc185d57c55bdd1f98d36f8a83ca0a335c150d3d7201505bc7dab3abcf +SIZE (gnome2/libgtop-2.22.0.tar.bz2) = 779243 diff --git a/devel/libgtop/files/patch-sysdeps_freebsd_Makefile.in b/devel/libgtop/files/patch-sysdeps_freebsd_Makefile.in new file mode 100644 index 000000000000..e8a6bd895fa5 --- /dev/null +++ b/devel/libgtop/files/patch-sysdeps_freebsd_Makefile.in @@ -0,0 +1,28 @@ +--- sysdeps/freebsd/Makefile.in.orig 2007-11-02 23:55:07.000000000 -0400 ++++ sysdeps/freebsd/Makefile.in 2007-11-02 23:58:08.000000000 -0400 +@@ -54,7 +54,7 @@ libgtop_sysdeps_2_0_la_LIBADD = + am_libgtop_sysdeps_2_0_la_OBJECTS = nosuid.lo siglist.lo sysinfo.lo \ + shm_limits.lo cpu.lo msg_limits.lo sem_limits.lo loadavg.lo \ + uptime.lo netlist.lo fsusage.lo mem.lo procopenfiles.lo \ +- procwd.lo glibtop_private.lo ++ procwd.lo glibtop_private.lo mountlist.lo + libgtop_sysdeps_2_0_la_OBJECTS = $(am_libgtop_sysdeps_2_0_la_OBJECTS) + am__DEPENDENCIES_1 = + libgtop_sysdeps_suid_2_0_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ +@@ -303,7 +303,7 @@ libgtop_sysdeps_2_0_la_SOURCES = nosuid. + cpu.c msg_limits.c sem_limits.c loadavg.c \ + uptime.c netlist.c fsusage.c mem.c \ + procopenfiles.c procwd.c \ +- glibtop_private.c ++ glibtop_private.c mountlist.c + + libgtop_sysdeps_2_0_la_LDFLAGS = $(LT_VERSION_INFO) + libgtop_sysdeps_suid_2_0_la_LIBADD = $(KVM_LIBS) $(EXTRA_SYSDEPS_LIBS) +@@ -374,6 +374,7 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsusage.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mountlist.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glibtop_private.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loadavg.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mem.Plo@am__quote@ diff --git a/devel/libgtop/files/patch-sysdeps_freebsd_fsusage.c b/devel/libgtop/files/patch-sysdeps_freebsd_fsusage.c new file mode 100644 index 000000000000..90da05b1b71d --- /dev/null +++ b/devel/libgtop/files/patch-sysdeps_freebsd_fsusage.c @@ -0,0 +1,61 @@ +--- sysdeps/freebsd/fsusage.c.orig 2007-06-03 16:06:05.000000000 -0400 ++++ sysdeps/freebsd/fsusage.c 2008-02-09 19:50:44.000000000 -0500 +@@ -10,6 +10,7 @@ + #include <unistd.h> + #include <sys/param.h> + #include <sys/mount.h> ++#include <sys/statvfs.h> + #if __FreeBSD_version >= 600000 || defined(__FreeBSD_kernel__) + #include <libgeom.h> + #include <sys/resource.h> +@@ -21,15 +22,13 @@ + #include <string.h> + #include <stdlib.h> + +-void +-_glibtop_freebsd_get_fsusage_read_write(glibtop *server, +- glibtop_fsusage *buf, +- const char *path); ++static const unsigned long _glibtop_sysdeps_fsusage = ++(1L << GLIBTOP_FSUSAGE_BLOCKS) + (1L << GLIBTOP_FSUSAGE_BFREE) +++ (1L << GLIBTOP_FSUSAGE_BAVAIL) + (1L << GLIBTOP_FSUSAGE_FILES) +++ (1L << GLIBTOP_FSUSAGE_FFREE) + (1L << GLIBTOP_FSUSAGE_BLOCK_SIZE); + +-void +-_glibtop_freebsd_get_fsusage_read_write(glibtop *server, +- glibtop_fsusage *buf, +- const char *path) ++static void ++_glibtop_get_fsusage_read_write (glibtop *server, glibtop_fsusage *buf, const char *path) + { + int result; + struct statfs sfs; +@@ -135,3 +134,28 @@ _glibtop_freebsd_get_fsusage_read_write( + #endif + buf->flags |= (1 << GLIBTOP_FSUSAGE_READ) | (1 << GLIBTOP_FSUSAGE_WRITE); + } ++ ++void ++glibtop_get_fsusage_s(glibtop *server, glibtop_fsusage *buf, const char *path) ++{ ++ struct statvfs fsd; ++ ++ glibtop_init_r (&server, 0, 0); ++ ++ memset (buf, 0, sizeof (glibtop_fsusage)); ++ ++ if (statvfs (path, &fsd) < 0) ++ return; ++ ++ buf->block_size = fsd.f_frsize; ++ buf->blocks = fsd.f_blocks; ++ buf->bfree = fsd.f_bfree; ++ buf->bavail = (fsd.f_bavail > fsd.f_bfree) ? 0 : fsd.f_bavail; ++ buf->files = fsd.f_files; ++ buf->ffree = fsd.f_ffree; ++ ++ buf->flags = _glibtop_sysdeps_fsusage; ++ ++ _glibtop_get_fsusage_read_write(server, buf, path); ++} ++ diff --git a/devel/libgtop/files/patch-sysdeps_freebsd_mountlist.c b/devel/libgtop/files/patch-sysdeps_freebsd_mountlist.c new file mode 100644 index 000000000000..7c1b1774cd89 --- /dev/null +++ b/devel/libgtop/files/patch-sysdeps_freebsd_mountlist.c @@ -0,0 +1,171 @@ +--- sysdeps/freebsd/mountlist.c.orig 2008-02-15 02:11:59.000000000 -0500 ++++ sysdeps/freebsd/mountlist.c 2008-02-15 02:28:14.000000000 -0500 +@@ -0,0 +1,168 @@ ++/* mountlist.c -- return a list of mounted filesystems ++ Copyright (C) 1991, 1992 Free Software Foundation, Inc. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2, or (at your option) ++ any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software Foundation, ++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++#include <config.h> ++ ++#include <glib.h> ++#include <stdio.h> ++#include <stdlib.h> ++#include <sys/types.h> ++#include <sys/param.h> ++#include <sys/mount.h> ++ ++#include <string.h> ++ ++#include <glibtop.h> ++#include <glibtop/mountlist.h> ++ ++/* A mount table entry. */ ++struct mount_entry ++{ ++ char *me_devname; /* Device node pathname, including "/dev/". */ ++ char *me_mountdir; /* Mount point directory pathname. */ ++ char *me_type; /* "nfs", "4.2", etc. */ ++ dev_t me_dev; /* Device number of me_mountdir. */ ++ struct mount_entry *me_next; ++}; ++ ++static struct mount_entry *read_filesystem_list (void); ++ ++/* Return a list of the currently mounted filesystems, or NULL on error. ++ Add each entry to the tail of the list so that they stay in order. ++*/ ++ ++static struct mount_entry * ++read_filesystem_list (void) ++{ ++ struct mount_entry *mount_list; ++ struct mount_entry *me; ++ struct mount_entry *mtail; ++ ++ /* Start the list off with a dummy entry. */ ++ me = g_new (struct mount_entry, 1); ++ me->me_next = NULL; ++ mount_list = mtail = me; ++ { ++ struct statfs *fsp; ++ int entries; ++ ++ entries = getmntinfo (&fsp, MNT_NOWAIT); ++ if (entries < 0) ++ return NULL; ++ while (entries-- > 0) ++ { ++ me = (struct mount_entry *) g_malloc (sizeof (struct mount_entry)); ++ me->me_devname = g_strdup (fsp->f_mntfromname); ++ me->me_mountdir = g_strdup (fsp->f_mntonname); ++ me->me_type = g_strdup (fsp->f_fstypename); ++ me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ ++ me->me_next = NULL; ++ ++ /* Add to the linked list. */ ++ mtail->me_next = me; ++ mtail = me; ++ fsp++; ++ } ++ } ++ ++ /* Free the dummy head. */ ++ me = mount_list; ++ mount_list = mount_list->me_next; ++ g_free (me); ++ return mount_list; ++} ++ ++static gboolean ignore_mount_entry(const struct mount_entry *me) ++{ ++ /* keep sorted */ ++ static const char ignored[][17] = { ++ "autofs", ++ "devfs", ++ "fusectl", ++ "linprocfs", ++ "linsysfs", ++ "mfs", ++ "none", ++ "nfs", ++ "nullfs", ++ "nwfs", ++ "portalfs", ++ "proc", ++ "procfs", ++ "smbfs", ++ "tmpfs", ++ "unionfs", ++ "unknown" ++ }; ++ ++ typedef int (*Comparator)(const void*, const void*); ++ ++ return bsearch(me->me_type, ++ ignored, G_N_ELEMENTS(ignored), sizeof ignored[0], ++ (Comparator) strcmp) != NULL; ++} ++ ++ ++glibtop_mountentry * ++glibtop_get_mountlist_s (glibtop *server, glibtop_mountlist *buf, int all_fs) ++{ ++ struct mount_entry *entries, *cur, *next; ++ ++ GArray *mount_array = g_array_new(FALSE, FALSE, ++ sizeof(glibtop_mountentry)); ++ ++ glibtop_init_r (&server, 0, 0); ++ ++ memset (buf, 0, sizeof (glibtop_mountlist)); ++ ++ /* Read filesystem list. */ ++ ++ if((entries = read_filesystem_list ()) == NULL) ++ return NULL; ++ ++ for (cur = &entries[0]; cur != NULL; cur = next) { ++ ++ if(all_fs || !ignore_mount_entry(cur)) { ++ /* add a new glibtop_mountentry */ ++ glibtop_mountentry e; ++ ++ g_strlcpy(e.devname, cur->me_devname, sizeof e.devname); ++ g_strlcpy(e.mountdir, cur->me_mountdir, sizeof e.mountdir); ++ g_strlcpy(e.type, cur->me_type, sizeof e.type); ++ e.dev = cur->me_dev; ++ ++ g_array_append_val(mount_array, e); ++ } ++ ++ /* free current mount_entry and move to the next */ ++ next = cur->me_next; ++ g_free(cur->me_devname); ++ g_free(cur->me_mountdir); ++ g_free(cur->me_type); ++ g_free(cur); ++ } ++ ++ buf->size = sizeof (glibtop_mountentry); ++ buf->number = mount_array->len; ++ buf->total = buf->number * buf->size; ++ ++ buf->flags = (1 << GLIBTOP_MOUNTLIST_SIZE) ++ | (1 << GLIBTOP_MOUNTLIST_NUMBER) ++ | (1 << GLIBTOP_MOUNTLIST_TOTAL); ++ ++ return (glibtop_mountentry*) g_array_free(mount_array, FALSE); ++} diff --git a/devel/libgtop/files/patch-sysdeps_freebsd_procopenfiles.c b/devel/libgtop/files/patch-sysdeps_freebsd_procopenfiles.c new file mode 100644 index 000000000000..93e596dcf5fb --- /dev/null +++ b/devel/libgtop/files/patch-sysdeps_freebsd_procopenfiles.c @@ -0,0 +1,186 @@ +--- sysdeps/freebsd/procopenfiles.c.orig 2007-07-01 09:14:23.000000000 -0400 ++++ sysdeps/freebsd/procopenfiles.c 2008-02-10 02:45:20.000000000 -0500 +@@ -28,6 +28,13 @@ + #include <glibtop/error.h> + #include <glibtop/procopenfiles.h> + #include <sys/types.h> ++#include <sys/socket.h> ++#include <sys/param.h> ++#include <sys/sysctl.h> ++#include <sys/un.h> ++#include <sys/user.h> ++#include <netinet/in.h> ++#include <arpa/inet.h> + #include <string.h> + #include <stdlib.h> + +@@ -46,6 +53,63 @@ _glibtop_init_proc_open_files_s (glibtop + server->sysdeps.proc_open_files = _glibtop_sysdeps_proc_open_files; + } + ++#if __FreeBSD_version > 800018 ++static char * ++addr_to_string(struct sockaddr_storage *ss) ++{ ++ char *buffer; ++ char buffer2[INET6_ADDRSTRLEN]; ++ struct sockaddr_in6 *sin6; ++ struct sockaddr_in *sin; ++ struct sockaddr_un *sun; ++ ++ switch (ss->ss_family) { ++ case AF_LOCAL: ++ sun = (struct sockaddr_un *)ss; ++ if (strlen(sun->sun_path) == 0) ++ buffer = g_strdup("-"); ++ else ++ buffer = g_strdup(sun->sun_path); ++ break; ++ case AF_INET: ++ sin = (struct sockaddr_in *)ss; ++ buffer = g_strdup(inet_ntoa(sin->sin_addr)); ++ break; ++ case AF_INET6: ++ sin6 = (struct sockaddr_in6 *)ss; ++ if (inet_ntop(AF_INET6, &sin6->sin6_addr, buffer2, ++ sizeof(buffer2)) != NULL) ++ buffer = g_strdup(buffer2); ++ else ++ buffer = g_strdup("-"); ++ break; ++ } ++ ++ return buffer; ++} ++ ++static int ++addr_to_port(struct sockaddr_storage *ss) ++{ ++ int port; ++ struct sockaddr_in6 *sin6; ++ struct sockaddr_in *sin; ++ ++ switch (ss->ss_family) { ++ case AF_INET: ++ sin = (struct sockaddr_in *)ss; ++ port = ntohs(sin->sin_port); ++ break; ++ case AF_INET6: ++ sin6 = (struct sockaddr_in6 *)ss; ++ port = ntohs(sin6->sin6_port); ++ break; ++ } ++ ++ return port; ++} ++#else ++ + static GArray * + parse_output(const char *output) { + GArray *entries; +@@ -159,21 +223,105 @@ parse_output(const char *output) { + + return entries; + } ++#endif + + glibtop_open_files_entry * + glibtop_get_proc_open_files_s (glibtop *server, glibtop_proc_open_files *buf, pid_t pid) + { ++#if __FreeBSD_version > 800018 ++ struct kinfo_file *freep, *kif; ++ int name[4]; ++ size_t len; ++ int i; ++#else + char *output; ++#endif + GArray *entries; + + memset(buf, 0, sizeof (glibtop_proc_open_files)); + ++#if __FreeBSD_version > 800018 ++ name[0] = CTL_KERN; ++ name[1] = KERN_PROC; ++ name[2] = KERN_PROC_FILEDESC; ++ name[3] = pid; ++ ++ if (sysctl(name, 4, NULL, &len, NULL, 0) < 0) ++ return NULL; ++ ++ freep = kif = g_malloc(len); ++ if (sysctl(name, 4, kif, &len, NULL, 0) < 0) { ++ g_free(freep); ++ return NULL; ++ } ++ ++ entries = g_array_new(FALSE, FALSE, sizeof(glibtop_open_files_entry)); ++ ++ for (i = 0; i < len / sizeof(*kif); i++, kif++) { ++ glibtop_open_files_entry entry = {0}; ++ ++ if (kif->kf_fd < 0) ++ continue; ++ ++ if (kif->kf_type == KF_TYPE_SOCKET) { ++ if (kif->kf_sock_domain == AF_LOCAL) { ++ struct sockaddr_un *sun; ++ ++ entry.type = GLIBTOP_FILE_TYPE_LOCALSOCKET; ++ sun = (struct sockaddr_un *)&kif->kf_sa_local; ++ ++ if (sun->sun_path[0]) { ++ char *addrstr; ++ ++ addrstr = addr_to_string(&kif->kf_sa_local); ++ g_strlcpy(entry.info.localsock.name, ++ addrstr, ++ sizeof(entry.info.localsock.name)); ++ g_free(addrstr); ++ } else { ++ char *addrstr; ++ ++ addrstr = addr_to_string(&kif->kf_sa_peer); ++ g_strlcpy(entry.info.localsock.name, ++ addrstr, ++ sizeof(entry.info.localsock.name)); ++ g_free(addrstr); ++ } ++ } else if (kif->kf_sock_domain == AF_INET || ++ kif->kf_sock_domain == AF_INET6) { ++ char *addrstr; ++ ++ entry.type = GLIBTOP_FILE_TYPE_INETSOCKET; ++ addrstr = addr_to_string(&kif->kf_sa_peer); ++ g_strlcpy(entry.info.sock.dest_host, ++ addrstr, ++ sizeof(entry.info.sock.dest_host)); ++ g_free(addrstr); ++ entry.info.sock.dest_port = addr_to_port(&kif->kf_sa_peer); ++ } ++ } else if (kif->kf_type == KF_TYPE_PIPE) { ++ entry.type = GLIBTOP_FILE_TYPE_PIPE; ++ } else if (kif->kf_type == KF_TYPE_VNODE) { ++ entry.type = GLIBTOP_FILE_TYPE_FILE; ++ g_strlcpy(entry.info.file.name, kif->kf_path, ++ sizeof(entry.info.file.name)); ++ } else ++ continue; ++ ++ entry.fd = kif->kf_fd; ++ ++ g_array_append_val(entries, entry); ++ } ++ g_free(freep); ++#else ++ + output = execute_lsof(pid); + if (output == NULL) return NULL; + + entries = parse_output(output); + + g_free(output); ++#endif + + buf->flags = _glibtop_sysdeps_proc_open_files; + buf->number = entries->len; diff --git a/devel/libgtop/files/patch-sysdeps_freebsd_procwd.c b/devel/libgtop/files/patch-sysdeps_freebsd_procwd.c new file mode 100644 index 000000000000..08a58359e584 --- /dev/null +++ b/devel/libgtop/files/patch-sysdeps_freebsd_procwd.c @@ -0,0 +1,94 @@ +--- sysdeps/freebsd/procwd.c.orig 2008-02-09 12:46:32.000000000 -0500 ++++ sysdeps/freebsd/procwd.c 2008-02-09 12:48:24.000000000 -0500 +@@ -24,7 +24,9 @@ + #include <glibtop_private.h> + + #include <sys/types.h> ++#include <sys/sysctl.h> + #include <sys/param.h> ++#include <sys/user.h> + #include <string.h> + + static const unsigned long _glibtop_sysdeps_proc_wd = +@@ -38,6 +40,7 @@ _glibtop_init_proc_wd_s(glibtop *server) + server->sysdeps.proc_wd = _glibtop_sysdeps_proc_wd; + } + ++#if __FreeBSD_version < 800019 + static GPtrArray * + parse_output(const char *output, glibtop_proc_wd *buf) + { +@@ -89,12 +92,21 @@ parse_output(const char *output, glibtop + + return dirs; + } ++#endif + + char** + glibtop_get_proc_wd_s(glibtop *server, glibtop_proc_wd *buf, pid_t pid) + { + char path[MAXPATHLEN]; ++#if __FreeBSD_version > 800018 ++ struct kinfo_file *freep, *kif; ++ GPtrArray *dirs; ++ size_t len; ++ int i; ++ int name[4]; ++#else + char *output; ++#endif + + memset (buf, 0, sizeof (glibtop_proc_wd)); + +@@ -102,6 +114,43 @@ glibtop_get_proc_wd_s(glibtop *server, g + if (safe_readlink(path, buf->exe, sizeof(buf->exe))) + buf->flags |= (1 << GLIBTOP_PROC_WD_EXE); + ++#if __FreeBSD_version > 800018 ++ name[0] = CTL_KERN; ++ name[1] = KERN_PROC; ++ name[2] = KERN_PROC_FILEDESC; ++ name[3] = pid; ++ ++ if (sysctl(name, 4, NULL, &len, NULL, 0) < 0) ++ return NULL; ++ freep = kif = g_malloc(len); ++ if (sysctl(name, 4, kif, &len, NULL, 0) < 0) { ++ g_free(freep); ++ return NULL; ++ } ++ ++ dirs = g_ptr_array_sized_new(1); ++ ++ for (i = 0; i < len / sizeof(*kif); i++, kif++) { ++ switch (kif->kf_fd) { ++ case KF_FD_TYPE_ROOT: ++ g_strlcpy(buf->root, kif->kf_path, ++ sizeof(buf->root)); ++ buf->flags |= (1 << GLIBTOP_PROC_WD_ROOT); ++ break; ++ case KF_FD_TYPE_CWD: ++ g_ptr_array_add(dirs, g_strdup (kif->kf_path)); ++ break; ++ } ++ } ++ g_free(freep); ++ ++ buf->number = dirs->len; ++ buf->flags |= (1 << GLIBTOP_PROC_WD_NUMBER); ++ ++ g_ptr_array_add(dirs, NULL); ++ ++ return (char **)g_ptr_array_free(dirs, FALSE); ++#else + output = execute_lsof(pid); + if (output != NULL) { + GPtrArray *dirs; +@@ -116,6 +165,7 @@ glibtop_get_proc_wd_s(glibtop *server, g + + return (char **)g_ptr_array_free(dirs, FALSE); + } ++#endif + + return NULL; + } diff --git a/devel/libgtop/pkg-plist b/devel/libgtop/pkg-plist index 88f66a24bd55..91e8d83abe47 100644 --- a/devel/libgtop/pkg-plist +++ b/devel/libgtop/pkg-plist @@ -139,6 +139,7 @@ share/locale/mi/LC_MESSAGES/libgtop-2.0.mo share/locale/mk/LC_MESSAGES/libgtop-2.0.mo share/locale/ml/LC_MESSAGES/libgtop-2.0.mo share/locale/mn/LC_MESSAGES/libgtop-2.0.mo +share/locale/mr/LC_MESSAGES/libgtop-2.0.mo share/locale/ms/LC_MESSAGES/libgtop-2.0.mo share/locale/nb/LC_MESSAGES/libgtop-2.0.mo share/locale/ne/LC_MESSAGES/libgtop-2.0.mo @@ -182,6 +183,8 @@ share/locale/zh_TW/LC_MESSAGES/libgtop-2.0.mo @dirrmtry share/locale/rw @dirrmtry share/locale/oc/LC_MESSAGES @dirrmtry share/locale/oc +@dirrmtry share/locale/mr/LC_MESSAGES +@dirrmtry share/locale/mr @dirrmtry share/locale/mi/LC_MESSAGES @dirrmtry share/locale/mi @dirrmtry share/locale/mg/LC_MESSAGES |