Compare commits
24 Commits
testing
...
LIBGTOP_2_
Author | SHA1 | Date | |
---|---|---|---|
|
d9c01aac4a | ||
|
82c28b2ad2 | ||
|
05345dc032 | ||
|
63ba7b2c12 | ||
|
5371e8ec88 | ||
|
e682094418 | ||
|
2e861977a6 | ||
|
a39f290683 | ||
|
02b55313f3 | ||
|
596c42d7f1 | ||
|
d4d4f7735a | ||
|
4cd3e4fed6 | ||
|
c99ceeaa65 | ||
|
ecbfade528 | ||
|
73d4679ad8 | ||
|
df1db43032 | ||
|
ff07ba102f | ||
|
07d2816d5b | ||
|
2caff8bf5c | ||
|
78e257e958 | ||
|
efaaf6eb77 | ||
|
47bcd423b5 | ||
|
38bfee6739 | ||
|
3147bf2e34 |
@@ -8,7 +8,7 @@ m4_define([libgtop_micro_version], [6])
|
|||||||
m4_define([libgtop_version], [libgtop_major_version.libgtop_minor_version.libgtop_micro_version])
|
m4_define([libgtop_version], [libgtop_major_version.libgtop_minor_version.libgtop_micro_version])
|
||||||
|
|
||||||
dnl increment if the interface has additions, changes, removals.
|
dnl increment if the interface has additions, changes, removals.
|
||||||
m4_define([libgtop_current], [9])
|
m4_define([libgtop_current], [10])
|
||||||
|
|
||||||
dnl increment any time the source changes; set to
|
dnl increment any time the source changes; set to
|
||||||
dnl 0 if you increment CURRENT
|
dnl 0 if you increment CURRENT
|
||||||
@@ -17,7 +17,7 @@ m4_define([libgtop_revision], [0])
|
|||||||
dnl increment if any interfaces have been added; set to 0
|
dnl increment if any interfaces have been added; set to 0
|
||||||
dnl if any interfaces have been removed. removal has
|
dnl if any interfaces have been removed. removal has
|
||||||
dnl precedence over adding, so set to 0 if both happened.
|
dnl precedence over adding, so set to 0 if both happened.
|
||||||
m4_define([libgtop_age], [2])
|
m4_define([libgtop_age], [0])
|
||||||
|
|
||||||
# Increase each time you change the client/server protocol.
|
# Increase each time you change the client/server protocol.
|
||||||
m4_define([libgtop_server_version], [5])
|
m4_define([libgtop_server_version], [5])
|
||||||
|
@@ -1,11 +1,5 @@
|
|||||||
## Process this file with automake to produce Makefile.in
|
## Process this file with automake to produce Makefile.in
|
||||||
|
|
||||||
LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(AM_LDFLAGS) -o $@
|
|
||||||
|
|
||||||
INCLUDES = @INCLUDES@
|
|
||||||
|
|
||||||
DEFS = @DEFS@
|
|
||||||
|
|
||||||
AM_LDFLAGS = $(LIBGTOP_EXTRA_LIBS)
|
AM_LDFLAGS = $(LIBGTOP_EXTRA_LIBS)
|
||||||
|
|
||||||
noinst_PROGRAMS = first second pprint procargs df netlist \
|
noinst_PROGRAMS = first second pprint procargs df netlist \
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <glibtop.h>
|
#include <glibtop.h>
|
||||||
|
#include <glibtop/sysinfo.h>
|
||||||
|
|
||||||
#include <glibtop/union.h>
|
#include <glibtop/union.h>
|
||||||
|
|
||||||
@@ -29,9 +30,41 @@ for(i = 0; i < (SIZE - 1); ++i) printf(".%u = " FORMAT ", ", i, buf.ARRAY[i]); \
|
|||||||
printf(".%u = " FORMAT " }\n", SIZE - 1 , buf.ARRAY[SIZE - 1]); \
|
printf(".%u = " FORMAT " }\n", SIZE - 1 , buf.ARRAY[SIZE - 1]); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
|
#define PPRINT_ENTRY_ARRAY(ARRAY, SIZE) do { \
|
||||||
|
size_t i; \
|
||||||
|
printf("\t%4lu B %3lu " #ARRAY "[%lu] = { ", \
|
||||||
|
(unsigned long) sizeof buf->ARRAY, 0,\
|
||||||
|
(unsigned long) G_N_ELEMENTS(buf->ARRAY)); \
|
||||||
|
for(i = 0; i < SIZE; ++i) { \
|
||||||
|
printf ("[ ");\
|
||||||
|
PPRINT_HASHTABLE(buf->ARRAY[i].values); \
|
||||||
|
printf ("]\n");\
|
||||||
|
} \
|
||||||
|
printf("} "); \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
|
#define PPRINT_HASHTABLE(HASHTABLE) do { \
|
||||||
|
g_hash_table_foreach (HASHTABLE, (GHFunc)pprint_hashtable_item, NULL); \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
#define FOOTER_PPRINT() putchar('\n');
|
#define FOOTER_PPRINT() putchar('\n');
|
||||||
|
|
||||||
|
static void pprint_hashtable_item(gchar* key, gchar* value, gpointer user_data)
|
||||||
|
{
|
||||||
|
printf ("'%s': '%s', ", key, value);
|
||||||
|
}
|
||||||
|
static void pprint_get_sysinfo(void)
|
||||||
|
{
|
||||||
|
const glibtop_sysinfo *buf;
|
||||||
|
|
||||||
|
buf = glibtop_get_sysinfo();
|
||||||
|
|
||||||
|
HEADER_PPRINT(glibtop_get_sysinfo);
|
||||||
|
//PPRINT(flags, "%#llx");
|
||||||
|
//PPRINT(ncpu, "%llu");
|
||||||
|
PPRINT_ENTRY_ARRAY(cpuinfo, 4);
|
||||||
|
FOOTER_PPRINT();
|
||||||
|
}
|
||||||
|
|
||||||
static void pprint_get_cpu(void)
|
static void pprint_get_cpu(void)
|
||||||
{
|
{
|
||||||
@@ -291,6 +324,7 @@ int main()
|
|||||||
{
|
{
|
||||||
glibtop_init();
|
glibtop_init();
|
||||||
|
|
||||||
|
pprint_get_sysinfo();
|
||||||
pprint_get_cpu();
|
pprint_get_cpu();
|
||||||
|
|
||||||
pprint_get_fsusage("/");
|
pprint_get_fsusage("/");
|
||||||
|
@@ -54,7 +54,7 @@ G_BEGIN_DECLS
|
|||||||
Yes we are :)
|
Yes we are :)
|
||||||
Nobody should really be using more than 32 processors.
|
Nobody should really be using more than 32 processors.
|
||||||
*/
|
*/
|
||||||
#define GLIBTOP_NCPU 32
|
#define GLIBTOP_NCPU 1024
|
||||||
|
|
||||||
typedef struct _glibtop_cpu glibtop_cpu;
|
typedef struct _glibtop_cpu glibtop_cpu;
|
||||||
|
|
||||||
|
@@ -79,6 +79,8 @@ AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[
|
|||||||
libgtop_sysdeps_dir=openbsd
|
libgtop_sysdeps_dir=openbsd
|
||||||
libgtop_use_machine_h=yes
|
libgtop_use_machine_h=yes
|
||||||
libgtop_need_server=yes
|
libgtop_need_server=yes
|
||||||
|
libgtop_sysdeps_private_mountlist=yes
|
||||||
|
libgtop_sysdeps_private_fsusage=yes
|
||||||
libgtop_postinstall='chgrp kmem $(bindir)/libgtop_server2 && chmod 2555 $(bindir)/libgtop_server2'
|
libgtop_postinstall='chgrp kmem $(bindir)/libgtop_server2 && chmod 2555 $(bindir)/libgtop_server2'
|
||||||
;;
|
;;
|
||||||
freebsd*|kfreebsd*)
|
freebsd*|kfreebsd*)
|
||||||
@@ -158,21 +160,10 @@ AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[
|
|||||||
AC_CHECK_LIB(kvm, kvm_open, KVM_LIBS=-lkvm, KVM_LIBS=)
|
AC_CHECK_LIB(kvm, kvm_open, KVM_LIBS=-lkvm, KVM_LIBS=)
|
||||||
AC_SUBST(KVM_LIBS)
|
AC_SUBST(KVM_LIBS)
|
||||||
|
|
||||||
case "$host_os" in
|
AC_CHECK_HEADERS(net/if_var.h,,, [
|
||||||
kfreebsd*)
|
#include <net/if.h>
|
||||||
EXTRA_SYSDEPS_LIBS="-lgeom -ldevstat"
|
#include <sys/types.h>
|
||||||
;;
|
#include <sys/socket.h>])
|
||||||
freebsd*)
|
|
||||||
osreldate=`sysctl -n kern.osreldate 2>/dev/null`
|
|
||||||
if test -n "${osreldate}" && test ${osreldate} -ge 600000 ; then
|
|
||||||
EXTRA_SYSDEPS_LIBS="-lgeom -ldevstat"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
AC_SUBST(EXTRA_SYSDEPS_LIBS)
|
|
||||||
|
|
||||||
AC_CHECK_HEADERS(net/if_var.h)
|
|
||||||
AC_MSG_CHECKING([for I4B])
|
AC_MSG_CHECKING([for I4B])
|
||||||
AC_TRY_COMPILE([
|
AC_TRY_COMPILE([
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
105
po/kn.po
105
po/kn.po
@@ -6,16 +6,18 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: libgtop.HEAD\n"
|
"Project-Id-Version: libgtop.HEAD\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=libgtop&component=general\n"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product="
|
||||||
|
"libgtop&component=general\n"
|
||||||
"POT-Creation-Date: 2009-03-01 23:08+0000\n"
|
"POT-Creation-Date: 2009-03-01 23:08+0000\n"
|
||||||
"PO-Revision-Date: 2009-03-14 20:01+0530\n"
|
"PO-Revision-Date: 2009-03-14 10:31-0400\n"
|
||||||
"Last-Translator: Shankar Prasad <svenkate@redhat.com>\n"
|
"Last-Translator: Shankar Prasad <svenkate@redhat.com>\n"
|
||||||
"Language-Team: Kannada <en@li.org>\n"
|
"Language-Team: Kannada <en@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: kn\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Generator: KBabel 1.11.4\n"
|
"X-Generator: Zanata 3.2.3\n"
|
||||||
|
|
||||||
#: ../lib/read.c:51
|
#: ../lib/read.c:51
|
||||||
#, c-format
|
#, c-format
|
||||||
@@ -61,129 +63,160 @@ msgstr "inetd ಇಂದ ರದ್ದು ಮಾಡಲಾದ"
|
|||||||
#: ../src/daemon/gnuserv.c:495
|
#: ../src/daemon/gnuserv.c:495
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Run '%s --help' to see a full list of available command line options.\n"
|
msgid "Run '%s --help' to see a full list of available command line options.\n"
|
||||||
msgstr "ಲಭ್ಯವಿರುವ ಆಜ್ಞೆಯ ಒಂದು ಸಂಪೂರ್ಣ ಪಟ್ಟಿಯನ್ನು ನೋಡಲು '%s --help' ಅನ್ನು ಚಲಾಯಿಸಿ.\n"
|
msgstr ""
|
||||||
|
"ಲಭ್ಯವಿರುವ ಆಜ್ಞೆಯ ಒಂದು ಸಂಪೂರ್ಣ ಪಟ್ಟಿಯನ್ನು ನೋಡಲು '%s --help' ಅನ್ನು ಚಲಾಯಿಸಿ.\n"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:27 ../sysdeps/sun4/siglist.c:27
|
#: ../sysdeps/osf1/siglist.c:27
|
||||||
|
#: ../sysdeps/sun4/siglist.c:27
|
||||||
msgid "Hangup"
|
msgid "Hangup"
|
||||||
msgstr "ನೇತಾಡು"
|
msgstr "ನೇತಾಡು"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:28 ../sysdeps/sun4/siglist.c:28
|
#: ../sysdeps/osf1/siglist.c:28
|
||||||
|
#: ../sysdeps/sun4/siglist.c:28
|
||||||
msgid "Interrupt"
|
msgid "Interrupt"
|
||||||
msgstr "ತಡೆ"
|
msgstr "ತಡೆ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:29 ../sysdeps/sun4/siglist.c:29
|
#: ../sysdeps/osf1/siglist.c:29
|
||||||
|
#: ../sysdeps/sun4/siglist.c:29
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "ತ್ಯಜಿಸು"
|
msgstr "ತ್ಯಜಿಸು"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:30 ../sysdeps/sun4/siglist.c:30
|
#: ../sysdeps/osf1/siglist.c:30
|
||||||
|
#: ../sysdeps/sun4/siglist.c:30
|
||||||
msgid "Illegal instruction"
|
msgid "Illegal instruction"
|
||||||
msgstr "ಅನಧೀಕೃತ ಸೂಚನೆ"
|
msgstr "ಅನಧೀಕೃತ ಸೂಚನೆ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:31 ../sysdeps/sun4/siglist.c:31
|
#: ../sysdeps/osf1/siglist.c:31
|
||||||
|
#: ../sysdeps/sun4/siglist.c:31
|
||||||
msgid "Trace trap"
|
msgid "Trace trap"
|
||||||
msgstr "ಜಾಡಿನ ಟ್ರಾಪ್"
|
msgstr "ಜಾಡಿನ ಟ್ರಾಪ್"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:32 ../sysdeps/sun4/siglist.c:32
|
#: ../sysdeps/osf1/siglist.c:32
|
||||||
|
#: ../sysdeps/sun4/siglist.c:32
|
||||||
msgid "Abort"
|
msgid "Abort"
|
||||||
msgstr "ಸ್ಥಗಿತಗೊಳಿಸು"
|
msgstr "ಸ್ಥಗಿತಗೊಳಿಸು"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:33 ../sysdeps/sun4/siglist.c:33
|
#: ../sysdeps/osf1/siglist.c:33
|
||||||
|
#: ../sysdeps/sun4/siglist.c:33
|
||||||
msgid "EMT error"
|
msgid "EMT error"
|
||||||
msgstr "EMT ದೋಷ"
|
msgstr "EMT ದೋಷ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:34 ../sysdeps/sun4/siglist.c:34
|
#: ../sysdeps/osf1/siglist.c:34
|
||||||
|
#: ../sysdeps/sun4/siglist.c:34
|
||||||
msgid "Floating-point exception"
|
msgid "Floating-point exception"
|
||||||
msgstr "ತೇಲುವ-ಬಿಂದುವಿನ ವಿನಾಯಿತಿ"
|
msgstr "ತೇಲುವ-ಬಿಂದುವಿನ ವಿನಾಯಿತಿ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:35 ../sysdeps/sun4/siglist.c:35
|
#: ../sysdeps/osf1/siglist.c:35
|
||||||
|
#: ../sysdeps/sun4/siglist.c:35
|
||||||
msgid "Kill"
|
msgid "Kill"
|
||||||
msgstr "ಕೊಲ್ಲು"
|
msgstr "ಕೊಲ್ಲು"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:36 ../sysdeps/sun4/siglist.c:36
|
#: ../sysdeps/osf1/siglist.c:36
|
||||||
|
#: ../sysdeps/sun4/siglist.c:36
|
||||||
msgid "Bus error"
|
msgid "Bus error"
|
||||||
msgstr "ಬಸ್ ದೋಷ"
|
msgstr "ಬಸ್ ದೋಷ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:37 ../sysdeps/sun4/siglist.c:37
|
#: ../sysdeps/osf1/siglist.c:37
|
||||||
|
#: ../sysdeps/sun4/siglist.c:37
|
||||||
msgid "Segmentation violation"
|
msgid "Segmentation violation"
|
||||||
msgstr "ಸೆಗ್ಮೆಂಟೇಶನ್ ಉಲ್ಲಂಘನೆ"
|
msgstr "ಸೆಗ್ಮೆಂಟೇಶನ್ ಉಲ್ಲಂಘನೆ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:38 ../sysdeps/sun4/siglist.c:38
|
#: ../sysdeps/osf1/siglist.c:38
|
||||||
|
#: ../sysdeps/sun4/siglist.c:38
|
||||||
msgid "Bad argument to system call"
|
msgid "Bad argument to system call"
|
||||||
msgstr "ವ್ಯವಸ್ಥೆಯ ಕೋಶಕ್ಕೆ ಸರಿಯಲ್ಲದ ಆರ್ಗ್ಯುಮೆಂಟ್"
|
msgstr "ವ್ಯವಸ್ಥೆಯ ಕೋಶಕ್ಕೆ ಸರಿಯಲ್ಲದ ಆರ್ಗ್ಯುಮೆಂಟ್"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:39 ../sysdeps/sun4/siglist.c:39
|
#: ../sysdeps/osf1/siglist.c:39
|
||||||
|
#: ../sysdeps/sun4/siglist.c:39
|
||||||
msgid "Broken pipe"
|
msgid "Broken pipe"
|
||||||
msgstr "ತುಂಡಾದ ಪೈಪ್"
|
msgstr "ತುಂಡಾದ ಪೈಪ್"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:40 ../sysdeps/sun4/siglist.c:40
|
#: ../sysdeps/osf1/siglist.c:40
|
||||||
|
#: ../sysdeps/sun4/siglist.c:40
|
||||||
msgid "Alarm clock"
|
msgid "Alarm clock"
|
||||||
msgstr "ಅಲಾರಮ್ ಗಡಿಯಾರ"
|
msgstr "ಅಲಾರಮ್ ಗಡಿಯಾರ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:41 ../sysdeps/sun4/siglist.c:41
|
#: ../sysdeps/osf1/siglist.c:41
|
||||||
|
#: ../sysdeps/sun4/siglist.c:41
|
||||||
msgid "Termination"
|
msgid "Termination"
|
||||||
msgstr "ಅಂತ್ಯಗೊಳಿಕೆ"
|
msgstr "ಅಂತ್ಯಗೊಳಿಕೆ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:42 ../sysdeps/sun4/siglist.c:42
|
#: ../sysdeps/osf1/siglist.c:42
|
||||||
|
#: ../sysdeps/sun4/siglist.c:42
|
||||||
msgid "Urgent condition on socket"
|
msgid "Urgent condition on socket"
|
||||||
msgstr "ಸಾಕೆಟ್ನಲ್ಲಿ ತುರ್ತು ಪರಿಸ್ಥಿತಿ"
|
msgstr "ಸಾಕೆಟ್ನಲ್ಲಿ ತುರ್ತು ಪರಿಸ್ಥಿತಿ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:43 ../sysdeps/sun4/siglist.c:43
|
#: ../sysdeps/osf1/siglist.c:43
|
||||||
|
#: ../sysdeps/sun4/siglist.c:43
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr "ನಿಲ್ಲಿಸು"
|
msgstr "ನಿಲ್ಲಿಸು"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:44 ../sysdeps/sun4/siglist.c:44
|
#: ../sysdeps/osf1/siglist.c:44
|
||||||
|
#: ../sysdeps/sun4/siglist.c:44
|
||||||
msgid "Keyboard stop"
|
msgid "Keyboard stop"
|
||||||
msgstr "ಕೀಲಿಮಣೆ ನಿಲುಗಡೆ"
|
msgstr "ಕೀಲಿಮಣೆ ನಿಲುಗಡೆ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:45 ../sysdeps/sun4/siglist.c:45
|
#: ../sysdeps/osf1/siglist.c:45
|
||||||
|
#: ../sysdeps/sun4/siglist.c:45
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "ಮುಂದುವರೆ"
|
msgstr "ಮುಂದುವರೆ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:46 ../sysdeps/sun4/siglist.c:46
|
#: ../sysdeps/osf1/siglist.c:46
|
||||||
|
#: ../sysdeps/sun4/siglist.c:46
|
||||||
msgid "Child status has changed"
|
msgid "Child status has changed"
|
||||||
msgstr "ಚೈಲ್ಡಿನ ಸ್ಥಿತಿ ಬದಲಾಗಿದೆ"
|
msgstr "ಚೈಲ್ಡಿನ ಸ್ಥಿತಿ ಬದಲಾಗಿದೆ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:47 ../sysdeps/sun4/siglist.c:47
|
#: ../sysdeps/osf1/siglist.c:47
|
||||||
|
#: ../sysdeps/sun4/siglist.c:47
|
||||||
msgid "Background read from tty"
|
msgid "Background read from tty"
|
||||||
msgstr "tty ಇಂದ ಓದಲಾದ ಹಿನ್ನಲೆ"
|
msgstr "tty ಇಂದ ಓದಲಾದ ಹಿನ್ನಲೆ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:48 ../sysdeps/sun4/siglist.c:48
|
#: ../sysdeps/osf1/siglist.c:48
|
||||||
|
#: ../sysdeps/sun4/siglist.c:48
|
||||||
msgid "Background write to tty"
|
msgid "Background write to tty"
|
||||||
msgstr "tty ಗೆ ಹಿನ್ನಲೆ ಬರೆಯುವಿಕೆ"
|
msgstr "tty ಗೆ ಹಿನ್ನಲೆ ಬರೆಯುವಿಕೆ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:49 ../sysdeps/sun4/siglist.c:49
|
#: ../sysdeps/osf1/siglist.c:49
|
||||||
|
#: ../sysdeps/sun4/siglist.c:49
|
||||||
msgid "I/O now possible"
|
msgid "I/O now possible"
|
||||||
msgstr "I/O ಈಗ ಸಾಧ್ಯವಿದೆ"
|
msgstr "I/O ಈಗ ಸಾಧ್ಯವಿದೆ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:50 ../sysdeps/sun4/siglist.c:50
|
#: ../sysdeps/osf1/siglist.c:50
|
||||||
|
#: ../sysdeps/sun4/siglist.c:50
|
||||||
msgid "CPU limit exceeded"
|
msgid "CPU limit exceeded"
|
||||||
msgstr "CPU ಮಿತಿಯನ್ನು ಮೀರಲಾಗಿದೆ"
|
msgstr "CPU ಮಿತಿಯನ್ನು ಮೀರಲಾಗಿದೆ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:51 ../sysdeps/sun4/siglist.c:51
|
#: ../sysdeps/osf1/siglist.c:51
|
||||||
|
#: ../sysdeps/sun4/siglist.c:51
|
||||||
msgid "File size limit exceeded"
|
msgid "File size limit exceeded"
|
||||||
msgstr "ಕಡತದ ಗಾತ್ರದ ಮಿತಿಯನ್ನು ಮೀರಲಾಗಿದೆ"
|
msgstr "ಕಡತದ ಗಾತ್ರದ ಮಿತಿಯನ್ನು ಮೀರಲಾಗಿದೆ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:52 ../sysdeps/sun4/siglist.c:52
|
#: ../sysdeps/osf1/siglist.c:52
|
||||||
|
#: ../sysdeps/sun4/siglist.c:52
|
||||||
msgid "Virtual alarm clock"
|
msgid "Virtual alarm clock"
|
||||||
msgstr "ವರ್ಚುವಲ್ ಅಲಾರಮ್ ಗಡಿಯಾರ"
|
msgstr "ವರ್ಚುವಲ್ ಅಲಾರಮ್ ಗಡಿಯಾರ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:53 ../sysdeps/sun4/siglist.c:53
|
#: ../sysdeps/osf1/siglist.c:53
|
||||||
|
#: ../sysdeps/sun4/siglist.c:53
|
||||||
msgid "Profiling alarm clock"
|
msgid "Profiling alarm clock"
|
||||||
msgstr "ಪ್ರೊಫೈಲಿಂಗ್ ಅಲಾರಮ್ ಗಡಿಯಾರ"
|
msgstr "ಪ್ರೊಫೈಲಿಂಗ್ ಅಲಾರಮ್ ಗಡಿಯಾರ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:54 ../sysdeps/sun4/siglist.c:54
|
#: ../sysdeps/osf1/siglist.c:54
|
||||||
|
#: ../sysdeps/sun4/siglist.c:54
|
||||||
msgid "Window size change"
|
msgid "Window size change"
|
||||||
msgstr "ವಿಂಡೋ ಗಾತ್ರದ ಬದಲಾವಣೆ"
|
msgstr "ವಿಂಡೋ ಗಾತ್ರದ ಬದಲಾವಣೆ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:55 ../sysdeps/sun4/siglist.c:55
|
#: ../sysdeps/osf1/siglist.c:55
|
||||||
|
#: ../sysdeps/sun4/siglist.c:55
|
||||||
msgid "Information request"
|
msgid "Information request"
|
||||||
msgstr "ಮಾಹಿತಿಯ ಮನವಿ"
|
msgstr "ಮಾಹಿತಿಯ ಮನವಿ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:56 ../sysdeps/sun4/siglist.c:56
|
#: ../sysdeps/osf1/siglist.c:56
|
||||||
|
#: ../sysdeps/sun4/siglist.c:56
|
||||||
msgid "User defined signal 1"
|
msgid "User defined signal 1"
|
||||||
msgstr "ಬಳಕೆದಾರ ಸೂಚಿತ ಸಂಕೇತ ೧"
|
msgstr "ಬಳಕೆದಾರ ಸೂಚಿತ ಸಂಕೇತ ೧"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:57 ../sysdeps/sun4/siglist.c:57
|
#: ../sysdeps/osf1/siglist.c:57
|
||||||
|
#: ../sysdeps/sun4/siglist.c:57
|
||||||
msgid "User defined signal 2"
|
msgid "User defined signal 2"
|
||||||
msgstr "ಬಳಕೆದಾರ ಸೂಚಿತ ಸಂಕೇತ ೨"
|
msgstr "ಬಳಕೆದಾರ ಸೂಚಿತ ಸಂಕೇತ ೨"
|
||||||
|
|
||||||
|
86
po/tg.po
86
po/tg.po
@@ -8,70 +8,72 @@ msgstr ""
|
|||||||
"Project-Id-Version: Tajik Gnome\n"
|
"Project-Id-Version: Tajik Gnome\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
|
||||||
"product=libgtop&keywords=I18N+L10N&component=general\n"
|
"product=libgtop&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2012-12-29 00:29+0000\n"
|
"POT-Creation-Date: 2013-12-19 14:39+0000\n"
|
||||||
"PO-Revision-Date: 2013-01-21 15:11+0500\n"
|
"PO-Revision-Date: 2013-12-20 13:36+0500\n"
|
||||||
"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
|
"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"Language: Tajik\n"
|
"Language: tg\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=2; plural=1;\n"
|
||||||
"X-Generator: Poedit 1.5.4\n"
|
"X-Generator: Poedit 1.6.3\n"
|
||||||
|
|
||||||
#: ../lib/read.c:51
|
#: ../lib/read.c:51
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "read %d byte"
|
msgid "read %d byte"
|
||||||
msgid_plural "read %d bytes"
|
msgid_plural "read %d bytes"
|
||||||
msgstr[0] ""
|
msgstr[0] "%d байти хондашуда"
|
||||||
msgstr[1] ""
|
msgstr[1] "%d байти хондашуда"
|
||||||
|
|
||||||
#: ../lib/read_data.c:51
|
#: ../lib/read_data.c:51
|
||||||
msgid "read data size"
|
msgid "read data size"
|
||||||
msgstr ""
|
msgstr "андозаи иттилооти хондашуда"
|
||||||
|
|
||||||
#: ../lib/read_data.c:70
|
#: ../lib/read_data.c:70
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "read %lu byte of data"
|
msgid "read %lu byte of data"
|
||||||
msgid_plural "read %lu bytes of data"
|
msgid_plural "read %lu bytes of data"
|
||||||
msgstr[0] ""
|
msgstr[0] "%lu байти иттилооти хондашуда"
|
||||||
msgstr[1] ""
|
msgstr[1] "%lu байти иттилооти хондашуда"
|
||||||
|
|
||||||
#: ../lib/write.c:51
|
#: ../lib/write.c:51
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "wrote %d byte"
|
msgid "wrote %d byte"
|
||||||
msgid_plural "wrote %d bytes"
|
msgid_plural "wrote %d bytes"
|
||||||
msgstr[0] ""
|
msgstr[0] "%d байти сабтшуда"
|
||||||
msgstr[1] ""
|
msgstr[1] "%d байти сабтшуда"
|
||||||
|
|
||||||
#: ../src/daemon/gnuserv.c:455
|
#: ../src/daemon/gnuserv.c:455
|
||||||
msgid "Enable debugging"
|
msgid "Enable debugging"
|
||||||
msgstr ""
|
msgstr "Фаъол кардани ислоҳи хатоҳо"
|
||||||
|
|
||||||
#: ../src/daemon/gnuserv.c:457
|
#: ../src/daemon/gnuserv.c:457
|
||||||
msgid "Enable verbose output"
|
msgid "Enable verbose output"
|
||||||
msgstr ""
|
msgstr "Фаъол кардани барориши ботафсил"
|
||||||
|
|
||||||
#: ../src/daemon/gnuserv.c:459
|
#: ../src/daemon/gnuserv.c:459
|
||||||
msgid "Don't fork into background"
|
msgid "Don't fork into background"
|
||||||
msgstr ""
|
msgstr "Нагузаштан ба пасзамина"
|
||||||
|
|
||||||
#: ../src/daemon/gnuserv.c:461
|
#: ../src/daemon/gnuserv.c:461
|
||||||
msgid "Invoked from inetd"
|
msgid "Invoked from inetd"
|
||||||
msgstr ""
|
msgstr "Дархостшуда аз inetd"
|
||||||
|
|
||||||
#: ../src/daemon/gnuserv.c:495
|
#: ../src/daemon/gnuserv.c:495
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Run '%s --help' to see a full list of available command line options.\n"
|
msgid "Run '%s --help' to see a full list of available command line options.\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Барои намоиш додани рӯйхати ҳамаи фармонҳои имконпазир '%s --help'-ро иҷро "
|
||||||
|
"намоед.\n"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:27 ../sysdeps/sun4/siglist.c:27
|
#: ../sysdeps/osf1/siglist.c:27 ../sysdeps/sun4/siglist.c:27
|
||||||
msgid "Hangup"
|
msgid "Hangup"
|
||||||
msgstr ""
|
msgstr "Боздоштан"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:28 ../sysdeps/sun4/siglist.c:28
|
#: ../sysdeps/osf1/siglist.c:28 ../sysdeps/sun4/siglist.c:28
|
||||||
msgid "Interrupt"
|
msgid "Interrupt"
|
||||||
msgstr ""
|
msgstr "Қатъ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:29 ../sysdeps/sun4/siglist.c:29
|
#: ../sysdeps/osf1/siglist.c:29 ../sysdeps/sun4/siglist.c:29
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
@@ -79,11 +81,11 @@ msgstr "Баромад"
|
|||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:30 ../sysdeps/sun4/siglist.c:30
|
#: ../sysdeps/osf1/siglist.c:30 ../sysdeps/sun4/siglist.c:30
|
||||||
msgid "Illegal instruction"
|
msgid "Illegal instruction"
|
||||||
msgstr ""
|
msgstr "Дастури нодуруст"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:31 ../sysdeps/sun4/siglist.c:31
|
#: ../sysdeps/osf1/siglist.c:31 ../sysdeps/sun4/siglist.c:31
|
||||||
msgid "Trace trap"
|
msgid "Trace trap"
|
||||||
msgstr ""
|
msgstr "Таҳлил"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:32 ../sysdeps/sun4/siglist.c:32
|
#: ../sysdeps/osf1/siglist.c:32 ../sysdeps/sun4/siglist.c:32
|
||||||
msgid "Abort"
|
msgid "Abort"
|
||||||
@@ -91,35 +93,35 @@ msgstr "Қатъ кардан"
|
|||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:33 ../sysdeps/sun4/siglist.c:33
|
#: ../sysdeps/osf1/siglist.c:33 ../sysdeps/sun4/siglist.c:33
|
||||||
msgid "EMT error"
|
msgid "EMT error"
|
||||||
msgstr ""
|
msgstr "Хатои EMT"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:34 ../sysdeps/sun4/siglist.c:34
|
#: ../sysdeps/osf1/siglist.c:34 ../sysdeps/sun4/siglist.c:34
|
||||||
msgid "Floating-point exception"
|
msgid "Floating-point exception"
|
||||||
msgstr ""
|
msgstr "Истиснои нуқтаи тағйирёбанда"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:35 ../sysdeps/sun4/siglist.c:35
|
#: ../sysdeps/osf1/siglist.c:35 ../sysdeps/sun4/siglist.c:35
|
||||||
msgid "Kill"
|
msgid "Kill"
|
||||||
msgstr ""
|
msgstr "Қатъ кардан"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:36 ../sysdeps/sun4/siglist.c:36
|
#: ../sysdeps/osf1/siglist.c:36 ../sysdeps/sun4/siglist.c:36
|
||||||
msgid "Bus error"
|
msgid "Bus error"
|
||||||
msgstr ""
|
msgstr "Хатои гузаргоҳ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:37 ../sysdeps/sun4/siglist.c:37
|
#: ../sysdeps/osf1/siglist.c:37 ../sysdeps/sun4/siglist.c:37
|
||||||
msgid "Segmentation violation"
|
msgid "Segmentation violation"
|
||||||
msgstr ""
|
msgstr "Вайронии қисматбандӣ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:38 ../sysdeps/sun4/siglist.c:38
|
#: ../sysdeps/osf1/siglist.c:38 ../sysdeps/sun4/siglist.c:38
|
||||||
msgid "Bad argument to system call"
|
msgid "Bad argument to system call"
|
||||||
msgstr ""
|
msgstr "Аргументи нокифоя барои дархости системавӣ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:39 ../sysdeps/sun4/siglist.c:39
|
#: ../sysdeps/osf1/siglist.c:39 ../sysdeps/sun4/siglist.c:39
|
||||||
msgid "Broken pipe"
|
msgid "Broken pipe"
|
||||||
msgstr ""
|
msgstr "Вуруди вайроншуда"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:40 ../sysdeps/sun4/siglist.c:40
|
#: ../sysdeps/osf1/siglist.c:40 ../sysdeps/sun4/siglist.c:40
|
||||||
msgid "Alarm clock"
|
msgid "Alarm clock"
|
||||||
msgstr "Соати зангдор\t"
|
msgstr "Соати зангдор"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:41 ../sysdeps/sun4/siglist.c:41
|
#: ../sysdeps/osf1/siglist.c:41 ../sysdeps/sun4/siglist.c:41
|
||||||
msgid "Termination"
|
msgid "Termination"
|
||||||
@@ -127,7 +129,7 @@ msgstr "Анҷоми кор"
|
|||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:42 ../sysdeps/sun4/siglist.c:42
|
#: ../sysdeps/osf1/siglist.c:42 ../sysdeps/sun4/siglist.c:42
|
||||||
msgid "Urgent condition on socket"
|
msgid "Urgent condition on socket"
|
||||||
msgstr ""
|
msgstr "Шарти таъҷилӣ дар бастагоҳ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:43 ../sysdeps/sun4/siglist.c:43
|
#: ../sysdeps/osf1/siglist.c:43 ../sysdeps/sun4/siglist.c:43
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
@@ -135,7 +137,7 @@ msgstr "Истодан"
|
|||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:44 ../sysdeps/sun4/siglist.c:44
|
#: ../sysdeps/osf1/siglist.c:44 ../sysdeps/sun4/siglist.c:44
|
||||||
msgid "Keyboard stop"
|
msgid "Keyboard stop"
|
||||||
msgstr ""
|
msgstr "Қатъи клавиатура"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:45 ../sysdeps/sun4/siglist.c:45
|
#: ../sysdeps/osf1/siglist.c:45 ../sysdeps/sun4/siglist.c:45
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
@@ -143,48 +145,48 @@ msgstr "Идома додан"
|
|||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:46 ../sysdeps/sun4/siglist.c:46
|
#: ../sysdeps/osf1/siglist.c:46 ../sysdeps/sun4/siglist.c:46
|
||||||
msgid "Child status has changed"
|
msgid "Child status has changed"
|
||||||
msgstr ""
|
msgstr "Вазъияти иловагӣ тағйир ёфт"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:47 ../sysdeps/sun4/siglist.c:47
|
#: ../sysdeps/osf1/siglist.c:47 ../sysdeps/sun4/siglist.c:47
|
||||||
msgid "Background read from tty"
|
msgid "Background read from tty"
|
||||||
msgstr ""
|
msgstr "Пасзаминаи хониш аз tty"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:48 ../sysdeps/sun4/siglist.c:48
|
#: ../sysdeps/osf1/siglist.c:48 ../sysdeps/sun4/siglist.c:48
|
||||||
msgid "Background write to tty"
|
msgid "Background write to tty"
|
||||||
msgstr ""
|
msgstr "Пасзаминаи сабт ба tty"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:49 ../sysdeps/sun4/siglist.c:49
|
#: ../sysdeps/osf1/siglist.c:49 ../sysdeps/sun4/siglist.c:49
|
||||||
msgid "I/O now possible"
|
msgid "I/O now possible"
|
||||||
msgstr ""
|
msgstr "I/O ҳоло имконпазир аст"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:50 ../sysdeps/sun4/siglist.c:50
|
#: ../sysdeps/osf1/siglist.c:50 ../sysdeps/sun4/siglist.c:50
|
||||||
msgid "CPU limit exceeded"
|
msgid "CPU limit exceeded"
|
||||||
msgstr ""
|
msgstr "Аз ҳудуди CPU афзуд"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:51 ../sysdeps/sun4/siglist.c:51
|
#: ../sysdeps/osf1/siglist.c:51 ../sysdeps/sun4/siglist.c:51
|
||||||
msgid "File size limit exceeded"
|
msgid "File size limit exceeded"
|
||||||
msgstr ""
|
msgstr "Аз ҳудуди андозаи файл афзуд"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:52 ../sysdeps/sun4/siglist.c:52
|
#: ../sysdeps/osf1/siglist.c:52 ../sysdeps/sun4/siglist.c:52
|
||||||
msgid "Virtual alarm clock"
|
msgid "Virtual alarm clock"
|
||||||
msgstr ""
|
msgstr "Соати зангдори виртуалӣ"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:53 ../sysdeps/sun4/siglist.c:53
|
#: ../sysdeps/osf1/siglist.c:53 ../sysdeps/sun4/siglist.c:53
|
||||||
msgid "Profiling alarm clock"
|
msgid "Profiling alarm clock"
|
||||||
msgstr ""
|
msgstr "Соати зангдори профил"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:54 ../sysdeps/sun4/siglist.c:54
|
#: ../sysdeps/osf1/siglist.c:54 ../sysdeps/sun4/siglist.c:54
|
||||||
msgid "Window size change"
|
msgid "Window size change"
|
||||||
msgstr ""
|
msgstr "Тағйири андозаи равзана"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:55 ../sysdeps/sun4/siglist.c:55
|
#: ../sysdeps/osf1/siglist.c:55 ../sysdeps/sun4/siglist.c:55
|
||||||
msgid "Information request"
|
msgid "Information request"
|
||||||
msgstr ""
|
msgstr "Дархости иттилоот"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:56 ../sysdeps/sun4/siglist.c:56
|
#: ../sysdeps/osf1/siglist.c:56 ../sysdeps/sun4/siglist.c:56
|
||||||
msgid "User defined signal 1"
|
msgid "User defined signal 1"
|
||||||
msgstr ""
|
msgstr "Сигнали интихобшудаи 1"
|
||||||
|
|
||||||
#: ../sysdeps/osf1/siglist.c:57 ../sysdeps/sun4/siglist.c:57
|
#: ../sysdeps/osf1/siglist.c:57 ../sysdeps/sun4/siglist.c:57
|
||||||
msgid "User defined signal 2"
|
msgid "User defined signal 2"
|
||||||
msgstr ""
|
msgstr "Сигнали интихобшудаи 2"
|
||||||
|
@@ -12,8 +12,6 @@
|
|||||||
## Martin <martin@home-of-linux.org>
|
## Martin <martin@home-of-linux.org>
|
||||||
##
|
##
|
||||||
|
|
||||||
LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
|
|
||||||
|
|
||||||
INCLUDES = $(LIBGTOP_CFLAGS) @INCLUDES@ -D_BSD \
|
INCLUDES = $(LIBGTOP_CFLAGS) @INCLUDES@ -D_BSD \
|
||||||
-DLIBGTOP_COMPILE_SYSTEM="\"`uname -s`\"" \
|
-DLIBGTOP_COMPILE_SYSTEM="\"`uname -s`\"" \
|
||||||
-DLIBGTOP_COMPILE_RELEASE="\"`uname -r`\"" \
|
-DLIBGTOP_COMPILE_RELEASE="\"`uname -r`\"" \
|
||||||
|
@@ -11,7 +11,7 @@ libgtop_sysdeps_2_0_la_SOURCES = nosuid.c siglist.c sysinfo.c shm_limits.c \
|
|||||||
|
|
||||||
libgtop_sysdeps_2_0_la_LDFLAGS = $(LT_VERSION_INFO)
|
libgtop_sysdeps_2_0_la_LDFLAGS = $(LT_VERSION_INFO)
|
||||||
|
|
||||||
libgtop_sysdeps_suid_2_0_la_LIBADD = $(KVM_LIBS) $(EXTRA_SYSDEPS_LIBS)
|
libgtop_sysdeps_suid_2_0_la_LIBADD = $(KVM_LIBS)
|
||||||
libgtop_sysdeps_suid_2_0_la_SOURCES = suid_open.c close.c swap.c \
|
libgtop_sysdeps_suid_2_0_la_SOURCES = suid_open.c close.c swap.c \
|
||||||
proclist.c procstate.c procuid.c \
|
proclist.c procstate.c procuid.c \
|
||||||
proctime.c procmem.c procsignal.c \
|
proctime.c procmem.c procsignal.c \
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/mount.h>
|
#include <sys/mount.h>
|
||||||
#include <sys/statvfs.h>
|
#include <sys/statvfs.h>
|
||||||
#if __FreeBSD_version >= 600000 || defined(__FreeBSD_kernel__)
|
#if 0
|
||||||
#include <libgeom.h>
|
#include <libgeom.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#include <devstat.h>
|
#include <devstat.h>
|
||||||
@@ -32,7 +32,7 @@ _glibtop_get_fsusage_read_write (glibtop *server, glibtop_fsusage *buf, const ch
|
|||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
struct statfs sfs;
|
struct statfs sfs;
|
||||||
#if __FreeBSD_version >= 600000 || defined(__FreeBSD_kernel__)
|
#if 0
|
||||||
struct devstat *ds;
|
struct devstat *ds;
|
||||||
void *sc;
|
void *sc;
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
@@ -49,7 +49,7 @@ _glibtop_get_fsusage_read_write (glibtop *server, glibtop_fsusage *buf, const ch
|
|||||||
glibtop_warn_io_r (server, "statfs");
|
glibtop_warn_io_r (server, "statfs");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#if __FreeBSD_version >= 600000 || defined(__FreeBSD_kernel__)
|
#if 0
|
||||||
ld[0] = 0;
|
ld[0] = 0;
|
||||||
ld[1] = 0;
|
ld[1] = 0;
|
||||||
result = geom_gettree (&gmp);
|
result = geom_gettree (&gmp);
|
||||||
|
@@ -43,10 +43,6 @@ glibtop_open_s (glibtop *server, const char *program_name,
|
|||||||
server->real_ncpu = ncpus - 1;
|
server->real_ncpu = ncpus - 1;
|
||||||
server->ncpu = MIN(GLIBTOP_NCPU - 1, server->real_ncpu);
|
server->ncpu = MIN(GLIBTOP_NCPU - 1, server->real_ncpu);
|
||||||
|
|
||||||
#if defined(__FreeBSD_kernel__)
|
|
||||||
server->os_version_code = __FreeBSD_kernel_version;
|
|
||||||
#else
|
|
||||||
server->os_version_code = __FreeBSD_version;
|
server->os_version_code = __FreeBSD_version;
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -38,10 +38,7 @@
|
|||||||
#include <sys/vnode.h>
|
#include <sys/vnode.h>
|
||||||
#undef _KVM_VNODE
|
#undef _KVM_VNODE
|
||||||
|
|
||||||
#define _KERNEL
|
|
||||||
#include <sys/pipe.h>
|
|
||||||
#include <sys/conf.h>
|
#include <sys/conf.h>
|
||||||
#undef _KERNEL
|
|
||||||
#if (__FreeBSD_version >= 800038) || (__FreeBSD_kernel_version >= 800038)
|
#if (__FreeBSD_version >= 800038) || (__FreeBSD_kernel_version >= 800038)
|
||||||
#define _WANT_FILE
|
#define _WANT_FILE
|
||||||
#include <sys/file.h>
|
#include <sys/file.h>
|
||||||
|
@@ -66,11 +66,12 @@ _glibtop_init_cpu_s (glibtop *server)
|
|||||||
/* Provides information about cpu usage. */
|
/* Provides information about cpu usage. */
|
||||||
|
|
||||||
#define FILENAME "/proc/stat"
|
#define FILENAME "/proc/stat"
|
||||||
|
#define STAT_BUFSIZ 81920
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_get_cpu_s (glibtop *server, glibtop_cpu *buf)
|
glibtop_get_cpu_s (glibtop *server, glibtop_cpu *buf)
|
||||||
{
|
{
|
||||||
char buffer [BUFSIZ], *p;
|
char buffer [STAT_BUFSIZ], *p;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
memset (buf, 0, sizeof (glibtop_cpu));
|
memset (buf, 0, sizeof (glibtop_cpu));
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <mntent.h>
|
#include <mntent.h>
|
||||||
|
|
||||||
|
|
||||||
@@ -197,7 +198,7 @@ glibtop_get_fsusage_s(glibtop *server, glibtop_fsusage *buf, const char *path)
|
|||||||
memset(buf, 0, sizeof(glibtop_fsusage));
|
memset(buf, 0, sizeof(glibtop_fsusage));
|
||||||
|
|
||||||
if (statvfs(path, &fsd) < 0) {
|
if (statvfs(path, &fsd) < 0) {
|
||||||
glibtop_warn_r(server, "statvfs '%s' failed", path);
|
glibtop_warn_r(server, "statvfs '%s' failed: %s", path, strerror (errno));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -61,13 +61,14 @@ static void set_linux_version(glibtop *server)
|
|||||||
/* Opens pipe to gtop server. Returns 0 on success and -1 on error. */
|
/* Opens pipe to gtop server. Returns 0 on success and -1 on error. */
|
||||||
|
|
||||||
#define FILENAME "/proc/stat"
|
#define FILENAME "/proc/stat"
|
||||||
|
#define STAT_BUFSIZ 81920
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_open_s (glibtop *server, const char *program_name,
|
glibtop_open_s (glibtop *server, const char *program_name,
|
||||||
const unsigned long features,
|
const unsigned long features,
|
||||||
const unsigned flags)
|
const unsigned flags)
|
||||||
{
|
{
|
||||||
char buffer [BUFSIZ], *p = buffer;
|
char buffer [STAT_BUFSIZ], *p = buffer;
|
||||||
|
|
||||||
server->name = program_name;
|
server->name = program_name;
|
||||||
|
|
||||||
|
@@ -51,7 +51,8 @@ init_sysinfo (glibtop *server)
|
|||||||
sysinfo.ncpu++) {
|
sysinfo.ncpu++) {
|
||||||
|
|
||||||
gchar **parts, **p;
|
gchar **parts, **p;
|
||||||
|
if (g_strrstr (processors[sysinfo.ncpu], "processor" ) == NULL)
|
||||||
|
continue;
|
||||||
glibtop_entry * const cpuinfo = &sysinfo.cpuinfo[sysinfo.ncpu];
|
glibtop_entry * const cpuinfo = &sysinfo.cpuinfo[sysinfo.ncpu];
|
||||||
|
|
||||||
cpuinfo->labels = g_ptr_array_new ();
|
cpuinfo->labels = g_ptr_array_new ();
|
||||||
|
@@ -1,21 +1,24 @@
|
|||||||
# $OpenBSD: Makefile.am,v 1.2 2011/05/23 19:35:52 jasper Exp $
|
|
||||||
|
|
||||||
INCLUDES = @INCLUDES@
|
INCLUDES = @INCLUDES@
|
||||||
|
|
||||||
noinst_LTLIBRARIES = libgtop_sysdeps-2.0.la libgtop_sysdeps_suid-2.0.la
|
noinst_LTLIBRARIES = libgtop_sysdeps-2.0.la libgtop_sysdeps_suid-2.0.la
|
||||||
|
|
||||||
libgtop_sysdeps_2_0_la_SOURCES = nosuid.c siglist.c sysinfo.c
|
libgtop_sysdeps_2_0_la_SOURCES = nosuid.c siglist.c sysinfo.c \
|
||||||
|
cpu.c loadavg.c \
|
||||||
|
uptime.c netlist.c fsusage.c mem.c \
|
||||||
|
mountlist.c procopenfiles.c procwd.c \
|
||||||
|
procaffinity.c glibtop_private.c open.c
|
||||||
|
|
||||||
libgtop_sysdeps_2_0_la_LDFLAGS = $(LT_VERSION_INFO)
|
libgtop_sysdeps_2_0_la_LDFLAGS = $(LT_VERSION_INFO)
|
||||||
|
|
||||||
libgtop_sysdeps_suid_2_0_la_LIBADD = $(KVM_LIBS)
|
libgtop_sysdeps_suid_2_0_la_LIBADD = $(KVM_LIBS)
|
||||||
libgtop_sysdeps_suid_2_0_la_SOURCES = open.c close.c cpu.c mem.c swap.c \
|
libgtop_sysdeps_suid_2_0_la_SOURCES = suid_open.c close.c swap.c \
|
||||||
uptime.c loadavg.c shm_limits.c msg_limits.c \
|
proclist.c procstate.c procuid.c \
|
||||||
sem_limits.c proclist.c procstate.c procuid.c \
|
proctime.c procmem.c procsignal.c \
|
||||||
proctime.c procmem.c procsignal.c prockernel.c \
|
prockernel.c procsegment.c procargs.c \
|
||||||
procsegment.c procargs.c procmap.c netlist.c \
|
procmap.c netload.c ppp.c
|
||||||
netload.c ppp.c procopenfiles.c fsusage.c \
|
|
||||||
procwd.c procaffinity.c glibtop_private.c
|
# TODO should be made nosuid like FreeBSD
|
||||||
|
libgtop_sysdeps_suid_2_0_la_SOURCES += shm_limits.c msg_limits.c sem_limits.c
|
||||||
|
|
||||||
libgtop_sysdeps_suid_2_0_la_LDFLAGS = $(LT_VERSION_INFO)
|
libgtop_sysdeps_suid_2_0_la_LDFLAGS = $(LT_VERSION_INFO)
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: close.c,v 1.2 2011/05/23 19:35:53 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998 Joshua Sled
|
/* Copyright (C) 1998 Joshua Sled
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: cpu.c,v 1.7 2011/07/10 15:23:01 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998 Joshua Sled
|
/* Copyright (C) 1998 Joshua Sled
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -44,7 +42,7 @@ static int mib2 [] = { CTL_KERN, KERN_CPTIME };
|
|||||||
/* Init function. */
|
/* Init function. */
|
||||||
|
|
||||||
void
|
void
|
||||||
_glibtop_init_cpu_p (glibtop *server)
|
_glibtop_init_cpu_s (glibtop *server)
|
||||||
{
|
{
|
||||||
server->sysdeps.cpu = _glibtop_sysdeps_cpu;
|
server->sysdeps.cpu = _glibtop_sysdeps_cpu;
|
||||||
}
|
}
|
||||||
@@ -52,7 +50,7 @@ _glibtop_init_cpu_p (glibtop *server)
|
|||||||
/* Provides information about cpu usage. */
|
/* Provides information about cpu usage. */
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_get_cpu_p (glibtop *server, glibtop_cpu *buf)
|
glibtop_get_cpu_s (glibtop *server, glibtop_cpu *buf)
|
||||||
{
|
{
|
||||||
gulong cpts [CPUSTATES];
|
gulong cpts [CPUSTATES];
|
||||||
|
|
||||||
|
@@ -1,15 +1,4 @@
|
|||||||
/* $OpenBSD: fsusage.c,v 1.4 2011/05/31 19:25:31 jasper Exp $ */
|
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
/*
|
|
||||||
* statvfs is lacking various members which are present in statfs,
|
|
||||||
* like f_(a)syncreads and f_(a)syncwrites. So eventhough we have
|
|
||||||
* statvfs, undef it here untill those members are added.
|
|
||||||
*/
|
|
||||||
#undef HAVE_SYS_STATVFS_H
|
|
||||||
#undef STAT_STATVFS
|
|
||||||
|
|
||||||
#include <glibtop.h>
|
#include <glibtop.h>
|
||||||
#include <glibtop/error.h>
|
#include <glibtop/error.h>
|
||||||
#include <glibtop/fsusage.h>
|
#include <glibtop/fsusage.h>
|
||||||
@@ -20,40 +9,28 @@
|
|||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#if defined (HAVE_SYS_STATVFS_H)
|
|
||||||
#include <sys/statvfs.h>
|
|
||||||
#else
|
|
||||||
#include <sys/mount.h>
|
#include <sys/mount.h>
|
||||||
#endif
|
#include <sys/statvfs.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
void
|
static const unsigned long _glibtop_sysdeps_fsusage =
|
||||||
_glibtop_openbsd_get_fsusage_read_write(glibtop *server,
|
(1L << GLIBTOP_FSUSAGE_BLOCKS) + (1L << GLIBTOP_FSUSAGE_BFREE)
|
||||||
glibtop_fsusage *buf,
|
+ (1L << GLIBTOP_FSUSAGE_BAVAIL) + (1L << GLIBTOP_FSUSAGE_FILES)
|
||||||
const char *path);
|
+ (1L << GLIBTOP_FSUSAGE_FFREE) + (1L << GLIBTOP_FSUSAGE_BLOCK_SIZE);
|
||||||
|
|
||||||
void
|
static void
|
||||||
_glibtop_openbsd_get_fsusage_read_write(glibtop *server,
|
_glibtop_get_fsusage_read_write (glibtop *server, glibtop_fsusage *buf, const char *path)
|
||||||
glibtop_fsusage *buf,
|
|
||||||
const char *path)
|
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
#if defined (STAT_STATVFS)
|
|
||||||
struct statvfs sfs;
|
|
||||||
#else
|
|
||||||
struct statfs sfs;
|
struct statfs sfs;
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (STAT_STATVFS)
|
|
||||||
result = statvfs (path, &sfs);
|
|
||||||
#else
|
|
||||||
result = statfs (path, &sfs);
|
result = statfs (path, &sfs);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (result == -1) {
|
if (result == -1) {
|
||||||
|
glibtop_warn_io_r (server, "statfs");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,3 +38,28 @@ _glibtop_openbsd_get_fsusage_read_write(glibtop *server,
|
|||||||
buf->write = sfs.f_syncwrites + sfs.f_asyncwrites;
|
buf->write = sfs.f_syncwrites + sfs.f_asyncwrites;
|
||||||
buf->flags |= (1 << GLIBTOP_FSUSAGE_READ) | (1 << GLIBTOP_FSUSAGE_WRITE);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: glibtop_machine.h,v 1.3 2011/05/23 19:35:53 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: glibtop_private.c,v 1.2 2011/05/23 19:35:53 jasper Exp $ */
|
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <glibtop.h>
|
#include <glibtop.h>
|
||||||
#include <glibtop/error.h>
|
#include <glibtop/error.h>
|
||||||
@@ -12,32 +10,6 @@
|
|||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
char *
|
|
||||||
execute_lsof(pid_t pid) {
|
|
||||||
char *output = NULL;
|
|
||||||
char *lsof;
|
|
||||||
char *command;
|
|
||||||
int exit_status;
|
|
||||||
|
|
||||||
lsof = g_find_program_in_path("lsof");
|
|
||||||
if (lsof == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
command = g_strdup_printf("%s -n -P -Fftn -p %d", lsof, pid);
|
|
||||||
g_free(lsof);
|
|
||||||
|
|
||||||
if (g_spawn_command_line_sync (command, &output, NULL, &exit_status, NULL)) {
|
|
||||||
if (exit_status != 0) {
|
|
||||||
g_warning("Could not execute \"%s\" (%i)\nMake sure lsof(8) is installed sgid kmem.",
|
|
||||||
command, exit_status);
|
|
||||||
output = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free(command);
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Ported from linux/glibtop_private.c */
|
/* Ported from linux/glibtop_private.c */
|
||||||
gboolean
|
gboolean
|
||||||
safe_readlink(const char *path, char *buf, int bufsiz)
|
safe_readlink(const char *path, char *buf, int bufsiz)
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: glibtop_private.h,v 1.2 2011/05/23 19:35:53 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 2007 Joe Marcus Clarke
|
/* Copyright (C) 2007 Joe Marcus Clarke
|
||||||
This file is part of LibGTop 2.0.
|
This file is part of LibGTop 2.0.
|
||||||
|
|
||||||
@@ -34,7 +32,6 @@
|
|||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
char *execute_lsof(pid_t pid);
|
|
||||||
gboolean safe_readlink(const char *path, char *buf, int bufsiz);
|
gboolean safe_readlink(const char *path, char *buf, int bufsiz);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: glibtop_server.h,v 1.2 2011/05/23 19:35:53 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -26,11 +24,7 @@
|
|||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define GLIBTOP_SUID_CPU (1 << GLIBTOP_SYSDEPS_CPU)
|
|
||||||
#define GLIBTOP_SUID_MEM (1 << GLIBTOP_SYSDEPS_MEM)
|
|
||||||
#define GLIBTOP_SUID_SWAP (1 << GLIBTOP_SYSDEPS_SWAP)
|
#define GLIBTOP_SUID_SWAP (1 << GLIBTOP_SYSDEPS_SWAP)
|
||||||
#define GLIBTOP_SUID_UPTIME (1 << GLIBTOP_SYSDEPS_UPTIME)
|
|
||||||
#define GLIBTOP_SUID_LOADAVG (1 << GLIBTOP_SYSDEPS_LOADAVG)
|
|
||||||
#define GLIBTOP_SUID_SHM_LIMITS (1 << GLIBTOP_SYSDEPS_SHM_LIMITS)
|
#define GLIBTOP_SUID_SHM_LIMITS (1 << GLIBTOP_SYSDEPS_SHM_LIMITS)
|
||||||
#define GLIBTOP_SUID_MSG_LIMITS (1 << GLIBTOP_SYSDEPS_MSG_LIMITS)
|
#define GLIBTOP_SUID_MSG_LIMITS (1 << GLIBTOP_SYSDEPS_MSG_LIMITS)
|
||||||
#define GLIBTOP_SUID_SEM_LIMITS (1 << GLIBTOP_SYSDEPS_SEM_LIMITS)
|
#define GLIBTOP_SUID_SEM_LIMITS (1 << GLIBTOP_SYSDEPS_SEM_LIMITS)
|
||||||
@@ -45,8 +39,12 @@ G_BEGIN_DECLS
|
|||||||
#define GLIBTOP_SUID_PROC_ARGS (1 << GLIBTOP_SYSDEPS_PROC_ARGS)
|
#define GLIBTOP_SUID_PROC_ARGS (1 << GLIBTOP_SYSDEPS_PROC_ARGS)
|
||||||
#define GLIBTOP_SUID_PROC_MAP (1 << GLIBTOP_SYSDEPS_PROC_MAP)
|
#define GLIBTOP_SUID_PROC_MAP (1 << GLIBTOP_SYSDEPS_PROC_MAP)
|
||||||
#define GLIBTOP_SUID_NETLOAD (1 << GLIBTOP_SYSDEPS_NETLOAD)
|
#define GLIBTOP_SUID_NETLOAD (1 << GLIBTOP_SYSDEPS_NETLOAD)
|
||||||
#define GLIBTOP_SUID_NETLIST 0
|
|
||||||
#define GLIBTOP_SUID_PPP (1 << GLIBTOP_SYSDEPS_PPP)
|
#define GLIBTOP_SUID_PPP (1 << GLIBTOP_SYSDEPS_PPP)
|
||||||
|
#define GLIBTOP_SUID_CPU 0
|
||||||
|
#define GLIBTOP_SUID_MEM 0
|
||||||
|
#define GLIBTOP_SUID_UPTIME 0
|
||||||
|
#define GLIBTOP_SUID_LOADAVG 0
|
||||||
|
#define GLIBTOP_SUID_NETLIST 0
|
||||||
#define GLIBTOP_SUID_PROC_WD 0
|
#define GLIBTOP_SUID_PROC_WD 0
|
||||||
#define GLIBTOP_SUID_PROC_AFFINITY 0
|
#define GLIBTOP_SUID_PROC_AFFINITY 0
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: glibtop_suid.h,v 1.2 2011/05/23 19:35:53 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: loadavg.c,v 1.2 2011/05/23 19:35:53 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998 Joshua Sled
|
/* Copyright (C) 1998 Joshua Sled
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -34,7 +32,7 @@ static const unsigned long _glibtop_sysdeps_loadavg =
|
|||||||
/* Init function. */
|
/* Init function. */
|
||||||
|
|
||||||
void
|
void
|
||||||
_glibtop_init_loadavg_p (glibtop *server)
|
_glibtop_init_loadavg_s (glibtop *server)
|
||||||
{
|
{
|
||||||
server->sysdeps.loadavg = _glibtop_sysdeps_loadavg;
|
server->sysdeps.loadavg = _glibtop_sysdeps_loadavg;
|
||||||
}
|
}
|
||||||
@@ -42,7 +40,7 @@ _glibtop_init_loadavg_p (glibtop *server)
|
|||||||
/* Provides load averange. */
|
/* Provides load averange. */
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_get_loadavg_p (glibtop *server, glibtop_loadavg *buf)
|
glibtop_get_loadavg_s (glibtop *server, glibtop_loadavg *buf)
|
||||||
{
|
{
|
||||||
double ldavg[3];
|
double ldavg[3];
|
||||||
int i;
|
int i;
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: mem.c,v 1.11 2011/07/10 15:23:01 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998 Joshua Sled
|
/* Copyright (C) 1998 Joshua Sled
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -30,9 +28,7 @@
|
|||||||
|
|
||||||
#include <sys/mount.h>
|
#include <sys/mount.h>
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
#include <sys/vmmeter.h>
|
|
||||||
#include <uvm/uvm_extern.h>
|
#include <uvm/uvm_extern.h>
|
||||||
#include <uvm/uvm_param.h>
|
|
||||||
|
|
||||||
static const unsigned long _glibtop_sysdeps_mem =
|
static const unsigned long _glibtop_sysdeps_mem =
|
||||||
(1L << GLIBTOP_MEM_TOTAL) + (1L << GLIBTOP_MEM_USED) +
|
(1L << GLIBTOP_MEM_TOTAL) + (1L << GLIBTOP_MEM_USED) +
|
||||||
@@ -50,29 +46,17 @@ static int pageshift; /* log base 2 of the pagesize */
|
|||||||
/* define pagetok in terms of pageshift */
|
/* define pagetok in terms of pageshift */
|
||||||
#define pagetok(size) ((size) << pageshift)
|
#define pagetok(size) ((size) << pageshift)
|
||||||
|
|
||||||
/* nlist structure for kernel access */
|
|
||||||
static struct nlist nlst [] = {
|
|
||||||
{ "_bufpages" },
|
|
||||||
{ 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
/* MIB array for sysctl */
|
/* MIB array for sysctl */
|
||||||
static int vmmeter_mib [] = { CTL_VM, VM_METER };
|
|
||||||
static int uvmexp_mib [] = { CTL_VM, VM_UVMEXP };
|
static int uvmexp_mib [] = { CTL_VM, VM_UVMEXP };
|
||||||
static int bcstats_mib [] = { CTL_VFS, VFS_GENERIC, VFS_BCACHESTAT };
|
static int bcstats_mib [] = { CTL_VFS, VFS_GENERIC, VFS_BCACHESTAT };
|
||||||
|
|
||||||
/* Init function. */
|
/* Init function. */
|
||||||
|
|
||||||
void
|
void
|
||||||
_glibtop_init_mem_p (glibtop *server)
|
_glibtop_init_mem_s (glibtop *server)
|
||||||
{
|
{
|
||||||
register int pagesize;
|
register int pagesize;
|
||||||
|
|
||||||
if (kvm_nlist (server->machine.kd, nlst) < 0) {
|
|
||||||
glibtop_warn_io_r (server, "kvm_nlist (mem)");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get the page size and calculate pageshift from it */
|
/* get the page size and calculate pageshift from it */
|
||||||
pagesize = sysconf(_SC_PAGESIZE);
|
pagesize = sysconf(_SC_PAGESIZE);
|
||||||
pageshift = 0;
|
pageshift = 0;
|
||||||
@@ -88,14 +72,10 @@ _glibtop_init_mem_p (glibtop *server)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_get_mem_p (glibtop *server, glibtop_mem *buf)
|
glibtop_get_mem_s (glibtop *server, glibtop_mem *buf)
|
||||||
{
|
{
|
||||||
struct vmtotal vmt;
|
|
||||||
struct uvmexp uvmexp;
|
struct uvmexp uvmexp;
|
||||||
struct bcachestats bcstats;
|
struct bcachestats bcstats;
|
||||||
u_int v_used_count;
|
|
||||||
u_int v_total_count;
|
|
||||||
u_int v_free_count;
|
|
||||||
size_t length;
|
size_t length;
|
||||||
|
|
||||||
glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_MEM), 0);
|
glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_MEM), 0);
|
||||||
@@ -106,13 +86,6 @@ glibtop_get_mem_p (glibtop *server, glibtop_mem *buf)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Get the data from sysctl */
|
/* Get the data from sysctl */
|
||||||
length = sizeof (vmt);
|
|
||||||
if (sysctl (vmmeter_mib, 2, &vmt, &length, NULL, 0)) {
|
|
||||||
glibtop_warn_io_r (server, "sysctl (vm.vmmeter)");
|
|
||||||
bzero(&vmt, sizeof(length));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
length = sizeof (uvmexp);
|
length = sizeof (uvmexp);
|
||||||
if (sysctl (uvmexp_mib, 2, &uvmexp, &length, NULL, 0)) {
|
if (sysctl (uvmexp_mib, 2, &uvmexp, &length, NULL, 0)) {
|
||||||
glibtop_warn_io_r (server, "sysctl (vm.uvmexp)");
|
glibtop_warn_io_r (server, "sysctl (vm.uvmexp)");
|
||||||
@@ -127,21 +100,12 @@ glibtop_get_mem_p (glibtop *server, glibtop_mem *buf)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* t_arm = active real memory
|
|
||||||
* t_rm = total real memory in use
|
|
||||||
* t_free = free memory pages
|
|
||||||
*/
|
|
||||||
v_total_count = vmt.t_rm + vmt.t_free;
|
|
||||||
v_used_count = vmt.t_rm;
|
|
||||||
v_free_count = vmt.t_free;
|
|
||||||
|
|
||||||
/* convert memory stats to Kbytes */
|
/* convert memory stats to Kbytes */
|
||||||
buf->total = (guint64) pagetok (v_total_count) << LOG1024;
|
buf->total = (guint64) pagetok (uvmexp.npages) << LOG1024;
|
||||||
buf->used = (guint64) pagetok (v_used_count) << LOG1024;
|
buf->used = (guint64) pagetok (uvmexp.npages - uvmexp.free) << LOG1024;
|
||||||
buf->free = (guint64) pagetok (v_free_count) << LOG1024;
|
buf->free = (guint64) pagetok (uvmexp.free) << LOG1024;
|
||||||
buf->locked = (guint64) pagetok (uvmexp.wired) << LOG1024;
|
buf->locked = (guint64) pagetok (uvmexp.wired) << LOG1024;
|
||||||
buf->shared = (guint64) pagetok (vmt.t_rmshr) << LOG1024;
|
buf->shared = (guint64) pagetok (0 /* XXX */) << LOG1024;
|
||||||
buf->cached = (guint64) pagetok (bcstats.numbufpages) << LOG1024;
|
buf->cached = (guint64) pagetok (bcstats.numbufpages) << LOG1024;
|
||||||
buf->buffer = 0;
|
buf->buffer = 0;
|
||||||
|
|
||||||
|
168
sysdeps/openbsd/mountlist.c
Normal file
168
sysdeps/openbsd/mountlist.c
Normal file
@@ -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);
|
||||||
|
}
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: msg_limits.c,v 1.3 2011/05/23 19:35:54 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: netlist.c,v 1.2 2011/05/23 19:35:54 jasper Exp $ */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file is part of LibGTop 2.0.
|
This file is part of LibGTop 2.0.
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: netload.c,v 1.4 2011/06/20 09:50:04 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -36,12 +34,12 @@
|
|||||||
|
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
#ifdef HAVE_NET_IF_VAR_H
|
|
||||||
#include <net/if_var.h>
|
#include <net/if_var.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#define _KERNEL
|
||||||
#include <netinet/in_var.h>
|
#include <netinet/in_var.h>
|
||||||
|
#undef _KERNEL
|
||||||
#include <netinet6/in6_var.h>
|
#include <netinet6/in6_var.h>
|
||||||
|
|
||||||
static const unsigned long _glibtop_sysdeps_netload =
|
static const unsigned long _glibtop_sysdeps_netload =
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: nosuid.c,v 1.2 2011/05/23 19:35:54 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -23,16 +21,8 @@
|
|||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <glibtop.h>
|
#include <glibtop.h>
|
||||||
#include <glibtop/open.h>
|
|
||||||
#include <glibtop/close.h>
|
#include <glibtop/close.h>
|
||||||
|
|
||||||
void
|
|
||||||
glibtop_open_s (glibtop *server,
|
|
||||||
const char *program_name,
|
|
||||||
const unsigned long features,
|
|
||||||
const unsigned flags)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_close_s (glibtop *server)
|
glibtop_close_s (glibtop *server)
|
||||||
{ }
|
{ }
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: open.c,v 1.4 2011/05/23 19:35:54 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998 Joshua Sled
|
/* Copyright (C) 1998 Joshua Sled
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -22,74 +20,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
#include <sys/types.h>
|
||||||
#include <glibtop.h>
|
#include <glibtop.h>
|
||||||
#include <glibtop/error.h>
|
|
||||||
#include <glibtop/open.h>
|
#include <glibtop/open.h>
|
||||||
#include <glibtop/init_hooks.h>
|
|
||||||
|
|
||||||
/* !!! THIS FUNCTION RUNS SUID ROOT - CHANGE WITH CAUTION !!! */
|
#include <glibtop_private.h>
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_init_p (glibtop *server, const unsigned long features,
|
glibtop_open_s (glibtop *server, const char *program_name,
|
||||||
const unsigned flags)
|
|
||||||
{
|
|
||||||
const _glibtop_init_func_t *init_fkt;
|
|
||||||
|
|
||||||
if (server == NULL)
|
|
||||||
glibtop_error_r (NULL, "glibtop_init_p (server == NULL)");
|
|
||||||
|
|
||||||
/* Do the initialization, but only if not already initialized. */
|
|
||||||
|
|
||||||
if ((server->flags & _GLIBTOP_INIT_STATE_SYSDEPS) == 0) {
|
|
||||||
glibtop_open_p (server, "glibtop", features, flags);
|
|
||||||
|
|
||||||
for (init_fkt = _glibtop_init_hook_p; *init_fkt; init_fkt++)
|
|
||||||
(*init_fkt) (server);
|
|
||||||
|
|
||||||
server->flags |= _GLIBTOP_INIT_STATE_SYSDEPS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
glibtop_open_p (glibtop *server, const char *program_name,
|
|
||||||
const unsigned long features,
|
const unsigned long features,
|
||||||
const unsigned flags)
|
const unsigned flags)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
|
||||||
fprintf (stderr, "DEBUG (%d): glibtop_open_p ()\n", getpid ());
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* !!! WE ARE ROOT HERE - CHANGE WITH CAUTION !!! */
|
|
||||||
|
|
||||||
server->machine.uid = getuid ();
|
|
||||||
server->machine.euid = geteuid ();
|
|
||||||
server->machine.gid = getgid ();
|
|
||||||
server->machine.egid = getegid ();
|
|
||||||
|
|
||||||
server->os_version_code = OpenBSD;
|
server->os_version_code = OpenBSD;
|
||||||
|
|
||||||
/* Setup machine-specific data */
|
|
||||||
server->machine.kd = kvm_open (NULL, NULL, NULL, O_RDONLY, "kvm_open");
|
|
||||||
|
|
||||||
if (server->machine.kd == NULL)
|
|
||||||
glibtop_error_io_r (server, "kvm_open");
|
|
||||||
|
|
||||||
/* Drop priviledges. */
|
|
||||||
|
|
||||||
if (setreuid (server->machine.euid, server->machine.uid))
|
|
||||||
_exit (1);
|
|
||||||
|
|
||||||
if (setregid (server->machine.egid, server->machine.gid))
|
|
||||||
_exit (1);
|
|
||||||
|
|
||||||
/* !!! END OF SUID ROOT PART !!! */
|
|
||||||
|
|
||||||
/* Our effective uid is now those of the user invoking the server,
|
|
||||||
* so we do no longer have any priviledges. */
|
|
||||||
|
|
||||||
/* NOTE: On FreeBSD, we do not need to be suid root, we just need to
|
|
||||||
* be sgid kmem.
|
|
||||||
*
|
|
||||||
* The server will only use setegid() to get back it's priviledges,
|
|
||||||
* so it will fail if it is suid root and not sgid kmem. */
|
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: ppp.c,v 1.3 2011/05/23 19:35:54 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $OpenBSD: procaffinity.c,v 1.1 2009/10/16 10:56:04 jasper Exp $
|
* TODO (procaffinity stub)
|
||||||
* procaffinity stub.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: procargs.c,v 1.3 2011/05/23 19:35:54 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998 Joshua Sled
|
/* Copyright (C) 1998 Joshua Sled
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -69,7 +67,7 @@ glibtop_get_proc_args_p (glibtop *server, glibtop_proc_args *buf,
|
|||||||
/* Get the process data */
|
/* Get the process data */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid,
|
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid,
|
||||||
sizeof (*pinfo), &count);
|
sizeof (*pinfo), &count);
|
||||||
if ((pinfo == NULL) || (count < 1)) {
|
if (pinfo == NULL) {
|
||||||
glibtop_suid_leave (server);
|
glibtop_suid_leave (server);
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: prockernel.c,v 1.4 2011/05/31 14:02:26 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998 Joshua Sled
|
/* Copyright (C) 1998 Joshua Sled
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -36,12 +34,13 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
static const unsigned long _glibtop_sysdeps_proc_kernel_pstats =
|
static const unsigned long _glibtop_sysdeps_proc_kernel_pstats =
|
||||||
|
(1L << GLIBTOP_PROC_KERNEL_K_FLAGS) +
|
||||||
(1L << GLIBTOP_PROC_KERNEL_MIN_FLT) +
|
(1L << GLIBTOP_PROC_KERNEL_MIN_FLT) +
|
||||||
(1L << GLIBTOP_PROC_KERNEL_MAJ_FLT);
|
(1L << GLIBTOP_PROC_KERNEL_MAJ_FLT);
|
||||||
|
|
||||||
static const unsigned long _glibtop_sysdeps_proc_kernel_wchan =
|
static const unsigned long _glibtop_sysdeps_proc_kernel_wchan =
|
||||||
(1L << GLIBTOP_PROC_KERNEL_NWCHAN) +
|
(1L << GLIBTOP_PROC_KERNEL_WCHAN) +
|
||||||
(1L << GLIBTOP_PROC_KERNEL_WCHAN);
|
(1L << GLIBTOP_PROC_KERNEL_NWCHAN);
|
||||||
|
|
||||||
/* Init function. */
|
/* Init function. */
|
||||||
|
|
||||||
@@ -70,20 +69,39 @@ glibtop_get_proc_kernel_p (glibtop *server,
|
|||||||
/* It does not work for the swapper task. */
|
/* It does not work for the swapper task. */
|
||||||
if (pid == 0) return;
|
if (pid == 0) return;
|
||||||
|
|
||||||
|
glibtop_suid_enter (server);
|
||||||
|
|
||||||
/* Get the process information */
|
/* Get the process information */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid,
|
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid,
|
||||||
sizeof(*pinfo), &count);
|
sizeof(*pinfo), &count);
|
||||||
if ((pinfo == NULL) || (count != 1)) {
|
if (pinfo == NULL) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
|
glibtop_suid_leave (server);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pinfo->p_wmesg[0])
|
glibtop_suid_leave (server);
|
||||||
g_strlcpy(buf->wchan, pinfo->p_wmesg[0], sizeof(buf->wchan));
|
|
||||||
|
|
||||||
buf->min_flt = pinfo[0].p_uru_minflt;
|
#define PROC_WCHAN p_wchan
|
||||||
buf->maj_flt = pinfo[0].p_uru_majflt;
|
#define PROC_WMESG p_wmesg
|
||||||
|
|
||||||
buf->flags |= (_glibtop_sysdeps_proc_kernel_wchan
|
buf->nwchan = (unsigned long) pinfo [0].PROC_WCHAN;
|
||||||
| _glibtop_sysdeps_proc_kernel_pstats);
|
|
||||||
|
buf->flags |= (1L << GLIBTOP_PROC_KERNEL_NWCHAN);
|
||||||
|
|
||||||
|
if (pinfo [0].PROC_WCHAN && pinfo [0].PROC_WMESG[0] != 0) {
|
||||||
|
g_strlcpy (buf->wchan, pinfo [0].PROC_WMESG,
|
||||||
|
sizeof buf->wchan);
|
||||||
|
buf->flags |= (1L << GLIBTOP_PROC_KERNEL_WCHAN);
|
||||||
|
} else {
|
||||||
|
buf->wchan [0] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf->k_flags = (unsigned long) pinfo [0].p_flag;
|
||||||
|
buf->min_flt = (unsigned long) pinfo [0].p_uru_minflt;
|
||||||
|
buf->maj_flt = (unsigned long) pinfo [0].p_uru_majflt;
|
||||||
|
|
||||||
|
buf->flags |= _glibtop_sysdeps_proc_kernel_pstats;
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: proclist.c,v 1.3 2011/05/23 19:35:55 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998 Joshua Sled
|
/* Copyright (C) 1998 Joshua Sled
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: patch-sysdeps_openbsd_procmap_c,v 1.7 2012/03/11 08:45:24 ajacoutot Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998 Joshua Sled
|
/* Copyright (C) 1998 Joshua Sled
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -184,7 +182,7 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
|||||||
|
|
||||||
/* Get the process data */
|
/* Get the process data */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, sizeof(struct kinfo_proc), &count);
|
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, sizeof(struct kinfo_proc), &count);
|
||||||
if ((pinfo == NULL) || (count < 1)) {
|
if (pinfo == NULL) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
return (glibtop_map_entry*) g_array_free(maps, TRUE);
|
return (glibtop_map_entry*) g_array_free(maps, TRUE);
|
||||||
}
|
}
|
||||||
@@ -193,8 +191,11 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
|||||||
|
|
||||||
if (kvm_read (server->machine.kd,
|
if (kvm_read (server->machine.kd,
|
||||||
(unsigned long) pinfo [0].p_vmspace,
|
(unsigned long) pinfo [0].p_vmspace,
|
||||||
(char *) &vmspace, sizeof (vmspace)) != sizeof (vmspace))
|
(char *) &vmspace, sizeof (vmspace)) != sizeof (vmspace)) {
|
||||||
glibtop_error_io_r (server, "kvm_read (vmspace)");
|
glibtop_warn_io_r (server, "kvm_read (vmspace)");
|
||||||
|
glibtop_suid_leave (server);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
RB_INIT(&root);
|
RB_INIT(&root);
|
||||||
nentries = load_vmmap_entries(server,
|
nentries = load_vmmap_entries(server,
|
||||||
@@ -238,6 +239,7 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
|||||||
&vnode, sizeof (vnode)) != sizeof (vnode)) {
|
&vnode, sizeof (vnode)) != sizeof (vnode)) {
|
||||||
glibtop_warn_io_r (server, "kvm_read (vnode)");
|
glibtop_warn_io_r (server, "kvm_read (vnode)");
|
||||||
unload_vmmap_entries(RB_ROOT(&root));
|
unload_vmmap_entries(RB_ROOT(&root));
|
||||||
|
glibtop_suid_leave (server);
|
||||||
return (glibtop_map_entry*) g_array_free(maps, TRUE);
|
return (glibtop_map_entry*) g_array_free(maps, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,8 +252,12 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
|||||||
|
|
||||||
if (kvm_read (server->machine.kd,
|
if (kvm_read (server->machine.kd,
|
||||||
(unsigned long) vnode.v_data,
|
(unsigned long) vnode.v_data,
|
||||||
&inode, sizeof (inode)) != sizeof (inode))
|
&inode, sizeof (inode)) != sizeof (inode)) {
|
||||||
glibtop_error_io_r (server, "kvm_read (inode)");
|
glibtop_warn_io_r (server, "kvm_read (inode)");
|
||||||
|
unload_vmmap_entries(RB_ROOT(&root));
|
||||||
|
glibtop_suid_leave (server);
|
||||||
|
return (glibtop_map_entry*) g_array_free(maps, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
inum = inode.i_number;
|
inum = inode.i_number;
|
||||||
dev = inode.i_dev;
|
dev = inode.i_dev;
|
||||||
@@ -278,6 +284,8 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf,
|
|||||||
mentry->perm |= GLIBTOP_MAP_PERM_EXECUTE;
|
mentry->perm |= GLIBTOP_MAP_PERM_EXECUTE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glibtop_suid_leave (server);
|
||||||
|
|
||||||
buf->flags = _glibtop_sysdeps_proc_map;
|
buf->flags = _glibtop_sysdeps_proc_map;
|
||||||
|
|
||||||
buf->number = maps->len;
|
buf->number = maps->len;
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: procmem.c,v 1.4 2011/05/24 10:40:47 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998 Joshua Sled
|
/* Copyright (C) 1998 Joshua Sled
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
|
@@ -1,8 +1,7 @@
|
|||||||
/* $OpenBSD: procopenfiles.c,v 1.2 2011/05/23 19:35:55 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
Copyright (C) 2004 Nicol\ufffds Lichtmaier
|
Copyright (C) 2004 Nicol\ufffds Lichtmaier
|
||||||
Copyright (C) 2007 Joe Marcus Clarke
|
Copyright (C) 2007 Joe Marcus Clarke
|
||||||
|
Copyright (C) 2013 Robert Nagy
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
Modified by Nicol\ufffds Lichtmaier to give a process open files.
|
Modified by Nicol\ufffds Lichtmaier to give a process open files.
|
||||||
@@ -33,7 +32,12 @@
|
|||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
|
#define _KERNEL
|
||||||
|
#include <sys/file.h>
|
||||||
|
#undef _KERNEL
|
||||||
|
#include <sys/mount.h>
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
|
#include <sys/vnode.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -46,6 +50,20 @@ static const unsigned long _glibtop_sysdeps_proc_open_files =
|
|||||||
(1L << GLIBTOP_PROC_OPEN_FILES_TOTAL)|
|
(1L << GLIBTOP_PROC_OPEN_FILES_TOTAL)|
|
||||||
(1L << GLIBTOP_PROC_OPEN_FILES_SIZE);
|
(1L << GLIBTOP_PROC_OPEN_FILES_SIZE);
|
||||||
|
|
||||||
|
kvm_t *kd;
|
||||||
|
|
||||||
|
struct filearg {
|
||||||
|
SLIST_ENTRY(filearg) next;
|
||||||
|
dev_t dev;
|
||||||
|
ino_t ino;
|
||||||
|
char *name;
|
||||||
|
TAILQ_HEAD(fuserhead, fuser) fusers;
|
||||||
|
};
|
||||||
|
|
||||||
|
SLIST_HEAD(fileargs, filearg);
|
||||||
|
|
||||||
|
struct fileargs fileargs = SLIST_HEAD_INITIALIZER(fileargs);
|
||||||
|
|
||||||
/* Init function. */
|
/* Init function. */
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -54,167 +72,121 @@ _glibtop_init_proc_open_files_s (glibtop *server)
|
|||||||
server->sysdeps.proc_open_files = _glibtop_sysdeps_proc_open_files;
|
server->sysdeps.proc_open_files = _glibtop_sysdeps_proc_open_files;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GArray *
|
static char *
|
||||||
parse_output(const char *output) {
|
addr_to_string(struct kinfo_file *kf)
|
||||||
GArray *entries;
|
{
|
||||||
char **lines;
|
char *buffer = NULL;
|
||||||
char *ftype = NULL;
|
struct in_addr faddr;
|
||||||
char *fname = NULL;
|
|
||||||
guint i;
|
|
||||||
guint len;
|
|
||||||
int fd = -1;
|
|
||||||
|
|
||||||
entries = g_array_new(FALSE, FALSE, sizeof(glibtop_open_files_entry));
|
memcpy(&faddr, kf->inp_faddru, sizeof(faddr));
|
||||||
|
|
||||||
lines = g_strsplit(output, "\n", 0);
|
if ((kf->so_protocol == IPPROTO_TCP) ||
|
||||||
len = g_strv_length(lines);
|
(kf->so_protocol == IPPROTO_UDP)) {
|
||||||
|
if (kf->inp_fport) {
|
||||||
for (i = 0; i < len && lines[i]; i++) {
|
buffer = g_strdup(faddr.s_addr == INADDR_ANY ? "*" :
|
||||||
glibtop_open_files_entry entry = {0};
|
inet_ntoa(faddr));
|
||||||
|
}
|
||||||
if (strlen(lines[i]) < 2)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!g_str_has_prefix(lines[i], "f") &&
|
|
||||||
!g_str_has_prefix(lines[i], "t") &&
|
|
||||||
!g_str_has_prefix(lines[i], "n"))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (g_str_has_prefix(lines[i], "f")) {
|
|
||||||
if (!g_ascii_isdigit(*(lines[i] + 1)))
|
|
||||||
i += 2;
|
|
||||||
else
|
|
||||||
fd = atoi(lines[i] + 1);
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_str_has_prefix(lines[i], "t")) {
|
return buffer;
|
||||||
ftype = lines[i];
|
|
||||||
ftype++;
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
fname = lines[i];
|
|
||||||
fname++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ftype == NULL || fname == NULL)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!strcmp(ftype, "unix")) {
|
|
||||||
entry.type = GLIBTOP_FILE_TYPE_LOCALSOCKET;
|
|
||||||
g_strlcpy(entry.info.localsock.name, fname,
|
|
||||||
sizeof(entry.info.localsock.name));
|
|
||||||
} else if (!strcmp(ftype, "PIPE")) {
|
|
||||||
entry.type = GLIBTOP_FILE_TYPE_PIPE;
|
|
||||||
} else if (!strcmp(ftype, "VREG") ||
|
|
||||||
!strcmp(ftype, "GDIR") ||
|
|
||||||
!strcmp(ftype, "GREG") ||
|
|
||||||
!strcmp(ftype, "VCHR") ||
|
|
||||||
!strcmp(ftype, "VBLK") ||
|
|
||||||
!strcmp(ftype, "DIR") ||
|
|
||||||
!strcmp(ftype, "LINK") ||
|
|
||||||
!strcmp(ftype, "REG") ||
|
|
||||||
!strcmp(ftype, "VDIR")) {
|
|
||||||
entry.type = GLIBTOP_FILE_TYPE_FILE;
|
|
||||||
g_strlcpy(entry.info.file.name, fname,
|
|
||||||
sizeof(entry.info.file.name));
|
|
||||||
} else if (!strcmp(ftype, "IPv4")) {
|
|
||||||
char **hosts;
|
|
||||||
char **remote_host;
|
|
||||||
|
|
||||||
if (!strstr(fname, "->")) {
|
|
||||||
remote_host = g_strsplit(fname, ":", 0);
|
|
||||||
} else {
|
|
||||||
hosts = g_strsplit(fname, "->", 0);
|
|
||||||
if (g_strv_length(hosts) < 2) {
|
|
||||||
g_strfreev(hosts);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
remote_host = g_strsplit(hosts[1], ":", 0);
|
|
||||||
g_strfreev(hosts);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_strv_length(remote_host) < 2) {
|
|
||||||
g_strfreev(remote_host);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
entry.type = GLIBTOP_FILE_TYPE_INETSOCKET;
|
|
||||||
if (!strcmp(remote_host[0], "*"))
|
|
||||||
g_strlcpy(entry.info.sock.dest_host, "0.0.0.0",
|
|
||||||
sizeof(entry.info.sock.dest_host));
|
|
||||||
else
|
|
||||||
g_strlcpy(entry.info.sock.dest_host,
|
|
||||||
remote_host[0],
|
|
||||||
sizeof(entry.info.sock.dest_host));
|
|
||||||
entry.info.sock.dest_port = atoi(remote_host[1]);
|
|
||||||
|
|
||||||
g_strfreev(remote_host);
|
|
||||||
} else if (!strcmp(ftype, "IPv6")) {
|
|
||||||
char **hosts;
|
|
||||||
char **remote_host;
|
|
||||||
|
|
||||||
if (!strstr(fname, "->")) {
|
|
||||||
remote_host = g_strsplit(fname, ":", 0);
|
|
||||||
} else {
|
|
||||||
hosts = g_strsplit(fname, "->", 0);
|
|
||||||
if (g_strv_length(hosts) < 2) {
|
|
||||||
g_strfreev(hosts);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
remote_host = g_strsplit(hosts[1], "]", 0);
|
|
||||||
g_strfreev(hosts);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_strv_length(remote_host) < 2) {
|
|
||||||
g_strfreev(remote_host);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
entry.type = GLIBTOP_FILE_TYPE_INET6SOCKET;
|
|
||||||
if (!strcmp(remote_host[0], "*"))
|
|
||||||
g_strlcpy(entry.info.sock.dest_host, "0.0.0.0",
|
|
||||||
sizeof(entry.info.sock.dest_host));
|
|
||||||
else
|
|
||||||
g_strlcpy(entry.info.sock.dest_host,
|
|
||||||
remote_host[0] + 1,
|
|
||||||
sizeof(entry.info.sock.dest_host));
|
|
||||||
entry.info.sock.dest_port = atoi(remote_host[1] + 1);
|
|
||||||
|
|
||||||
g_strfreev(remote_host);
|
|
||||||
} else
|
|
||||||
continue;
|
|
||||||
|
|
||||||
entry.fd = fd;
|
|
||||||
|
|
||||||
fd = -1;
|
|
||||||
ftype = NULL;
|
|
||||||
fname = NULL;
|
|
||||||
|
|
||||||
g_array_append_val(entries, entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_strfreev(lines);
|
|
||||||
|
|
||||||
return entries;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
glibtop_open_files_entry *
|
glibtop_open_files_entry *
|
||||||
glibtop_get_proc_open_files_s (glibtop *server, glibtop_proc_open_files *buf, pid_t pid)
|
glibtop_get_proc_open_files_s (glibtop *server, glibtop_proc_open_files *buf, pid_t pid)
|
||||||
{
|
{
|
||||||
char *output;
|
struct kinfo_file *kf, *kflast;
|
||||||
|
int cnt;
|
||||||
|
char kbuf[_POSIX2_LINE_MAX];
|
||||||
GArray *entries;
|
GArray *entries;
|
||||||
|
|
||||||
memset(buf, 0, sizeof (glibtop_proc_open_files));
|
memset(buf, 0, sizeof (glibtop_proc_open_files));
|
||||||
|
|
||||||
output = execute_lsof(pid);
|
if ((kd = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, kbuf)) == NULL)
|
||||||
if (output == NULL) return NULL;
|
g_warning("%s", kbuf);
|
||||||
|
|
||||||
entries = parse_output(output);
|
if ((kf = kvm_getfiles(kd, KERN_FILE_BYPID, pid, sizeof(*kf), &cnt)) == NULL)
|
||||||
|
g_warning("%s", kvm_geterr(kd));
|
||||||
|
|
||||||
g_free(output);
|
entries = g_array_new(FALSE, FALSE, sizeof(glibtop_open_files_entry));
|
||||||
|
|
||||||
|
for (kflast = &kf[cnt]; kf < kflast; ++kf) {
|
||||||
|
glibtop_open_files_entry entry = {0};
|
||||||
|
|
||||||
|
if (kf->fd_fd < 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (kf->f_type == DTYPE_SOCKET) {
|
||||||
|
if (kf->so_family == AF_LOCAL) {
|
||||||
|
entry.type = GLIBTOP_FILE_TYPE_LOCALSOCKET;
|
||||||
|
static char *stypename[] = {
|
||||||
|
"unused", /* 0 */
|
||||||
|
"stream",
|
||||||
|
"dgram",
|
||||||
|
"raw",
|
||||||
|
"rdm",
|
||||||
|
"seqpak"
|
||||||
|
};
|
||||||
|
#define STYPEMAX 5
|
||||||
|
char *stype, stypebuf[24];
|
||||||
|
|
||||||
|
if (kf->so_type > STYPEMAX) {
|
||||||
|
snprintf(stypebuf, sizeof(stypebuf), "?%d", kf->so_type);
|
||||||
|
stype = stypebuf;
|
||||||
|
} else {
|
||||||
|
stype = stypename[kf->so_type];
|
||||||
|
}
|
||||||
|
g_strlcpy(entry.info.localsock.name, stype,
|
||||||
|
sizeof(entry.info.localsock.name));
|
||||||
|
} else if (kf->so_family == AF_INET ||
|
||||||
|
kf->so_family == AF_INET6) {
|
||||||
|
char *addrstr;
|
||||||
|
|
||||||
|
if (kf->so_family == AF_INET)
|
||||||
|
entry.type = GLIBTOP_FILE_TYPE_INETSOCKET;
|
||||||
|
else
|
||||||
|
entry.type = GLIBTOP_FILE_TYPE_INET6SOCKET;
|
||||||
|
|
||||||
|
addrstr = addr_to_string(kf);
|
||||||
|
g_strlcpy(entry.info.sock.dest_host,
|
||||||
|
addrstr,
|
||||||
|
sizeof(entry.info.sock.dest_host));
|
||||||
|
g_free(addrstr);
|
||||||
|
entry.info.sock.dest_port = kf->inp_fport ? ntohs(kf->inp_fport) : 0;
|
||||||
|
}
|
||||||
|
} else if (kf->f_type == DTYPE_PIPE) {
|
||||||
|
entry.type = GLIBTOP_FILE_TYPE_PIPE;
|
||||||
|
} else if (kf->f_type == DTYPE_VNODE) {
|
||||||
|
int badtype = 0;
|
||||||
|
char nbuf[MAXPATHLEN];
|
||||||
|
|
||||||
|
entry.type = GLIBTOP_FILE_TYPE_FILE;
|
||||||
|
|
||||||
|
if ((kf->v_type == VNON) ||
|
||||||
|
(kf->v_type == VBAD) ||
|
||||||
|
(kf->v_tag == VT_NON && !(kf->v_flag & VCLONE))) {
|
||||||
|
badtype = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (badtype)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ((kf->v_type == VBLK) ||
|
||||||
|
(kf->v_type == VCHR)) {
|
||||||
|
snprintf(nbuf, sizeof(nbuf), "/dev/%s",
|
||||||
|
devname(kf->va_rdev, kf->v_type == VCHR ? S_IFCHR : S_IFBLK));
|
||||||
|
} else {
|
||||||
|
snprintf(nbuf, sizeof(nbuf), "inode %llu on %s", kf->va_fileid,
|
||||||
|
kf->f_mntonname);
|
||||||
|
}
|
||||||
|
g_strlcpy(entry.info.file.name, nbuf,
|
||||||
|
sizeof(entry.info.file.name));
|
||||||
|
} else
|
||||||
|
continue;
|
||||||
|
|
||||||
|
entry.fd = kf->fd_fd;
|
||||||
|
|
||||||
|
g_array_append_val(entries, entry);
|
||||||
|
}
|
||||||
|
|
||||||
buf->flags = _glibtop_sysdeps_proc_open_files;
|
buf->flags = _glibtop_sysdeps_proc_open_files;
|
||||||
buf->number = entries->len;
|
buf->number = entries->len;
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: procsegment.c,v 1.2 2011/05/23 19:35:55 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998 Joshua Sled
|
/* Copyright (C) 1998 Joshua Sled
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -32,13 +30,18 @@
|
|||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
|
|
||||||
static const unsigned long _glibtop_sysdeps_proc_segment = 0;
|
static const unsigned long _glibtop_sysdeps_proc_segment =
|
||||||
|
(1L << GLIBTOP_PROC_SEGMENT_TEXT_RSS) +
|
||||||
|
(1L << GLIBTOP_PROC_SEGMENT_DATA_RSS);
|
||||||
|
|
||||||
|
static int pagesize;
|
||||||
|
|
||||||
/* Init function. */
|
/* Init function. */
|
||||||
|
|
||||||
void
|
void
|
||||||
_glibtop_init_proc_segment_p (glibtop *server)
|
_glibtop_init_proc_segment_p (glibtop *server)
|
||||||
{
|
{
|
||||||
|
pagesize = getpagesize ();
|
||||||
server->sysdeps.proc_segment = _glibtop_sysdeps_proc_segment;
|
server->sysdeps.proc_segment = _glibtop_sysdeps_proc_segment;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,35 +52,26 @@ glibtop_get_proc_segment_p (glibtop *server,
|
|||||||
glibtop_proc_segment *buf,
|
glibtop_proc_segment *buf,
|
||||||
pid_t pid)
|
pid_t pid)
|
||||||
{
|
{
|
||||||
|
struct kinfo_proc *pinfo;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_PROC_SEGMENT), 0);
|
glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_PROC_SEGMENT), 0);
|
||||||
|
|
||||||
memset (buf, 0, sizeof (glibtop_proc_segment));
|
memset (buf, 0, sizeof (glibtop_proc_segment));
|
||||||
|
|
||||||
#if 0
|
/* It does not work for the swapper task. */
|
||||||
|
if (pid == 0) return;
|
||||||
|
|
||||||
/* Get the process info from the kernel */
|
/* Get the process info from the kernel */
|
||||||
kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, count);
|
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid,
|
||||||
if (*count != 1) {
|
sizeof (*pinfo), &count);
|
||||||
return; /* the zeroed-out buffer indicating no data */
|
if (pinfo == NULL) {
|
||||||
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* trs: text resident set size
|
buf->text_rss = pinfo[0].p_vm_tsize * pagesize;
|
||||||
pinfo[0]->kp_eproc.e_xrssize;
|
buf->data_rss = pinfo[0].p_vm_dsize * pagesize;
|
||||||
*/
|
|
||||||
/* buf->trs = pinfo[0]->kp_eproc.e_xrssize; */
|
|
||||||
/* lrs: shared-lib resident set size
|
|
||||||
? */
|
|
||||||
/* drs: data resident set size
|
|
||||||
pinfo[0]->kp_eproc.e_vm.vm_map.vm_dsize;
|
|
||||||
*/
|
|
||||||
/* dt: dirty pages
|
|
||||||
*/
|
|
||||||
/* start_code: address of beginning of code segment
|
|
||||||
|
|
||||||
*/
|
buf->flags = _glibtop_sysdeps_proc_segment;
|
||||||
/* end_code: address of end of code segment
|
|
||||||
*/
|
|
||||||
/* start_stack: address of the bottom of stack segment
|
|
||||||
*/
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: procsignal.c,v 1.3 2011/05/23 19:35:55 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998 Joshua Sled
|
/* Copyright (C) 1998 Joshua Sled
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -62,7 +60,7 @@ glibtop_get_proc_signal_p (glibtop *server,
|
|||||||
/* Get the process information */
|
/* Get the process information */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid,
|
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid,
|
||||||
sizeof (*pinfo), &count);
|
sizeof (*pinfo), &count);
|
||||||
if ((pinfo == NULL) || (count != 1)) {
|
if (pinfo == NULL) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: procstate.c,v 1.3 2011/05/23 19:35:55 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998 Joshua Sled
|
/* Copyright (C) 1998 Joshua Sled
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -64,7 +62,7 @@ glibtop_get_proc_state_p (glibtop *server,
|
|||||||
/* Get the process information */
|
/* Get the process information */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid,
|
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid,
|
||||||
sizeof (*pinfo), &count);
|
sizeof (*pinfo), &count);
|
||||||
if ((pinfo == NULL) || (count != 1)) {
|
if (pinfo == NULL) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: proctime.c,v 1.5 2011/07/10 15:29:26 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -58,59 +56,6 @@ _glibtop_init_proc_time_p (glibtop *server)
|
|||||||
_glibtop_sysdeps_proc_time_user;
|
_glibtop_sysdeps_proc_time_user;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Taken from /usr/src/sys/kern/kern_resource.c */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Transform the running time and tick information in proc p into user,
|
|
||||||
* system, and interrupt time usage.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void
|
|
||||||
calcru(struct proc *p, struct timeval *up, struct timeval *sp,
|
|
||||||
struct timeval *ip)
|
|
||||||
{
|
|
||||||
quad_t totusec;
|
|
||||||
u_quad_t u, st, ut, it, tot;
|
|
||||||
long sec, usec;
|
|
||||||
struct timeval tv;
|
|
||||||
|
|
||||||
st = p->p_sticks;
|
|
||||||
ut = p->p_uticks;
|
|
||||||
it = p->p_iticks;
|
|
||||||
|
|
||||||
tot = st + ut + it;
|
|
||||||
if (tot == 0) {
|
|
||||||
st = 1;
|
|
||||||
tot = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
sec = p->p_rtime.tv_sec;
|
|
||||||
usec = p->p_rtime.tv_usec;
|
|
||||||
|
|
||||||
totusec = (quad_t)sec * 1000000 + usec;
|
|
||||||
|
|
||||||
if (totusec < 0) {
|
|
||||||
/* XXX no %qd in kernel. Truncate. */
|
|
||||||
fprintf (stderr, "calcru: negative time: %ld usec\n",
|
|
||||||
(long)totusec);
|
|
||||||
totusec = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
u = totusec;
|
|
||||||
st = (u * st) / tot;
|
|
||||||
sp->tv_sec = st / 1000000;
|
|
||||||
sp->tv_usec = st % 1000000;
|
|
||||||
ut = (u * ut) / tot;
|
|
||||||
up->tv_sec = ut / 1000000;
|
|
||||||
up->tv_usec = ut % 1000000;
|
|
||||||
if (ip != NULL) {
|
|
||||||
it = (u * it) / tot;
|
|
||||||
ip->tv_sec = it / 1000000;
|
|
||||||
ip->tv_usec = it % 1000000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Provides detailed information about a process. */
|
/* Provides detailed information about a process. */
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -131,7 +76,7 @@ glibtop_get_proc_time_p (glibtop *server, glibtop_proc_time *buf,
|
|||||||
/* Get the process information */
|
/* Get the process information */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid,
|
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid,
|
||||||
sizeof (*pinfo), &count);
|
sizeof (*pinfo), &count);
|
||||||
if ((pinfo == NULL) || (count != 1)) {
|
if (pinfo == NULL) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: procuid.c,v 1.3 2011/05/23 19:35:56 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -67,7 +65,7 @@ glibtop_get_proc_uid_p (glibtop *server, glibtop_proc_uid *buf,
|
|||||||
/* Get the process information */
|
/* Get the process information */
|
||||||
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid,
|
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid,
|
||||||
sizeof (*pinfo), &count);
|
sizeof (*pinfo), &count);
|
||||||
if ((pinfo == NULL) || (count != 1)) {
|
if (pinfo == NULL) {
|
||||||
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: procwd.c,v 1.2 2011/05/23 19:35:56 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 2007 Joe Marcus Clarke
|
/* Copyright (C) 2007 Joe Marcus Clarke
|
||||||
This file is part of LibGTop 2.
|
This file is part of LibGTop 2.
|
||||||
|
|
||||||
@@ -41,84 +39,9 @@ _glibtop_init_proc_wd_s(glibtop *server)
|
|||||||
server->sysdeps.proc_wd = _glibtop_sysdeps_proc_wd;
|
server->sysdeps.proc_wd = _glibtop_sysdeps_proc_wd;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GPtrArray *
|
|
||||||
parse_output(const char *output, glibtop_proc_wd *buf)
|
|
||||||
{
|
|
||||||
GPtrArray *dirs;
|
|
||||||
char **lines;
|
|
||||||
gboolean nextwd = FALSE;
|
|
||||||
gboolean nextrtd = FALSE;
|
|
||||||
gboolean havertd = FALSE;
|
|
||||||
guint i;
|
|
||||||
guint len;
|
|
||||||
|
|
||||||
dirs = g_ptr_array_sized_new(1);
|
|
||||||
|
|
||||||
lines = g_strsplit(output, "\n", 0);
|
|
||||||
len = g_strv_length(lines);
|
|
||||||
|
|
||||||
for (i = 0; i < len && lines[i]; i++) {
|
|
||||||
if (strlen(lines[i]) < 2)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!strcmp(lines[i], "fcwd")) {
|
|
||||||
nextwd = TRUE;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strcmp(lines[i], "frtd")) {
|
|
||||||
nextrtd = TRUE;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!g_str_has_prefix(lines[i], "n"))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (nextwd) {
|
|
||||||
g_ptr_array_add(dirs, g_strdup(lines[i] + 1));
|
|
||||||
nextwd = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nextrtd && !havertd) {
|
|
||||||
g_strlcpy(buf->root, lines[i] + 1,
|
|
||||||
sizeof(buf->root));
|
|
||||||
buf->flags |= (1 << GLIBTOP_PROC_WD_ROOT);
|
|
||||||
nextrtd = FALSE;
|
|
||||||
havertd = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
g_strfreev(lines);
|
|
||||||
|
|
||||||
return dirs;
|
|
||||||
}
|
|
||||||
|
|
||||||
char**
|
char**
|
||||||
glibtop_get_proc_wd_s(glibtop *server, glibtop_proc_wd *buf, pid_t pid)
|
glibtop_get_proc_wd_s(glibtop *server, glibtop_proc_wd *buf, pid_t pid)
|
||||||
{
|
{
|
||||||
char path[MAXPATHLEN];
|
/* TODO */
|
||||||
char *output;
|
|
||||||
|
|
||||||
memset (buf, 0, sizeof (glibtop_proc_wd));
|
|
||||||
|
|
||||||
g_snprintf(path, sizeof(path), "/proc/%u/file", pid);
|
|
||||||
if (safe_readlink(path, buf->exe, sizeof(buf->exe)))
|
|
||||||
buf->flags |= (1 << GLIBTOP_PROC_WD_EXE);
|
|
||||||
|
|
||||||
output = execute_lsof(pid);
|
|
||||||
if (output != NULL) {
|
|
||||||
GPtrArray *dirs;
|
|
||||||
|
|
||||||
dirs = parse_output(output, buf);
|
|
||||||
g_free(output);
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: sem_limits.c,v 1.3 2011/05/23 19:35:56 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: shm_limits.c,v 1.3 2011/05/23 19:35:56 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: siglist.c,v 1.2 2011/05/23 19:35:56 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
|
92
sysdeps/openbsd/suid_open.c
Normal file
92
sysdeps/openbsd/suid_open.c
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
/* Copyright (C) 1998 Joshua Sled
|
||||||
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
|
Contributed by Joshua Sled <jsled@xcf.berkeley.edu>, July 1998.
|
||||||
|
|
||||||
|
LibGTop 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 of the License,
|
||||||
|
or (at your option) any later version.
|
||||||
|
|
||||||
|
LibGTop 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 LibGTop; see the file COPYING. If not, write to the
|
||||||
|
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
#include <glibtop.h>
|
||||||
|
#include <glibtop/error.h>
|
||||||
|
#include <glibtop/cpu.h>
|
||||||
|
#include <glibtop/open.h>
|
||||||
|
#include <glibtop/init_hooks.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* !!! THIS FUNCTION RUNS SUID ROOT - CHANGE WITH CAUTION !!! */
|
||||||
|
|
||||||
|
void
|
||||||
|
glibtop_init_p (glibtop *server, const unsigned long features,
|
||||||
|
const unsigned flags)
|
||||||
|
{
|
||||||
|
const _glibtop_init_func_t *init_fkt;
|
||||||
|
|
||||||
|
if (server == NULL)
|
||||||
|
glibtop_error_r (NULL, "glibtop_init_p (server == NULL)");
|
||||||
|
|
||||||
|
/* Do the initialization, but only if not already initialized. */
|
||||||
|
|
||||||
|
if ((server->flags & _GLIBTOP_INIT_STATE_SYSDEPS) == 0) {
|
||||||
|
glibtop_open_p (server, "glibtop", features, flags);
|
||||||
|
|
||||||
|
for (init_fkt = _glibtop_init_hook_p; *init_fkt; init_fkt++)
|
||||||
|
(*init_fkt) (server);
|
||||||
|
|
||||||
|
server->flags |= _GLIBTOP_INIT_STATE_SYSDEPS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
glibtop_open_p (glibtop *server, const char *program_name,
|
||||||
|
const unsigned long features,
|
||||||
|
const unsigned flags)
|
||||||
|
{
|
||||||
|
char errbuf[_POSIX2_LINE_MAX];
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf (stderr, "DEBUG (%d): glibtop_open_p ()\n", getpid ());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* !!! WE ARE ROOT HERE - CHANGE WITH CAUTION !!! */
|
||||||
|
server->machine.uid = getuid ();
|
||||||
|
server->machine.euid = geteuid ();
|
||||||
|
server->machine.gid = getgid ();
|
||||||
|
server->machine.egid = getegid ();
|
||||||
|
/* Setup machine-specific data */
|
||||||
|
server->machine.kd = kvm_openfiles (NULL, NULL, NULL, O_RDONLY, errbuf);
|
||||||
|
|
||||||
|
if (server->machine.kd == NULL)
|
||||||
|
glibtop_error_io_r (server, "kvm_open");
|
||||||
|
|
||||||
|
/* Drop priviledges. */
|
||||||
|
|
||||||
|
if (setreuid (server->machine.euid, server->machine.uid))
|
||||||
|
_exit (1);
|
||||||
|
|
||||||
|
if (setregid (server->machine.egid, server->machine.gid))
|
||||||
|
_exit (1);
|
||||||
|
|
||||||
|
/* !!! END OF SUID ROOT PART !!! */
|
||||||
|
|
||||||
|
/* Our effective uid is now those of the user invoking the server,
|
||||||
|
* so we do no longer have any priviledges. */
|
||||||
|
|
||||||
|
/* NOTE: On OpenBSD, we do not need to be suid root, we just need to
|
||||||
|
* be sgid kmem.
|
||||||
|
*
|
||||||
|
* The server will only use setegid() to get back it's priviledges,
|
||||||
|
* so it will fail if it is suid root and not sgid kmem. */
|
||||||
|
}
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: swap.c,v 1.7 2011/07/10 15:23:01 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: sysinfo.c,v 1.4 2011/05/31 14:02:26 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: uptime.c,v 1.6 2011/06/01 07:24:49 jasper Exp $ */
|
|
||||||
|
|
||||||
/* Copyright (C) 1998-99 Martin Baulig
|
/* Copyright (C) 1998-99 Martin Baulig
|
||||||
This file is part of LibGTop 1.0.
|
This file is part of LibGTop 1.0.
|
||||||
|
|
||||||
@@ -39,7 +37,7 @@ static const unsigned long _required_cpu_flags =
|
|||||||
/* Init function. */
|
/* Init function. */
|
||||||
|
|
||||||
void
|
void
|
||||||
_glibtop_init_uptime_p (glibtop *server)
|
_glibtop_init_uptime_s (glibtop *server)
|
||||||
{
|
{
|
||||||
server->sysdeps.uptime = _glibtop_sysdeps_uptime;
|
server->sysdeps.uptime = _glibtop_sysdeps_uptime;
|
||||||
}
|
}
|
||||||
@@ -47,7 +45,7 @@ _glibtop_init_uptime_p (glibtop *server)
|
|||||||
/* Provides uptime and idle time. */
|
/* Provides uptime and idle time. */
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_get_uptime_p (glibtop *server, glibtop_uptime *buf)
|
glibtop_get_uptime_s (glibtop *server, glibtop_uptime *buf)
|
||||||
{
|
{
|
||||||
time_t now;
|
time_t now;
|
||||||
int mib[2];
|
int mib[2];
|
||||||
@@ -65,7 +63,7 @@ glibtop_get_uptime_p (glibtop *server, glibtop_uptime *buf)
|
|||||||
buf->boot_time = boottime.tv_sec;
|
buf->boot_time = boottime.tv_sec;
|
||||||
}
|
}
|
||||||
|
|
||||||
glibtop_get_cpu_p (server, &cpu);
|
glibtop_get_cpu_s (server, &cpu);
|
||||||
|
|
||||||
/* Put something clever in buf->idletime: CP_IDLE. */
|
/* Put something clever in buf->idletime: CP_IDLE. */
|
||||||
buf->idletime = (double) cpu.idle / (double) cpu.frequency;
|
buf->idletime = (double) cpu.idle / (double) cpu.frequency;
|
||||||
|
Reference in New Issue
Block a user