Compare commits

..

1 Commits

Author SHA1 Message Date
Benoît Dejean
6c95195787 Build daemon on linux.
svn path=/branches/linux_daemon/; revision=2615
2007-06-25 21:43:20 +00:00
17 changed files with 358 additions and 664 deletions

8
NEWS
View File

@@ -1,11 +1,3 @@
9 July 2007: Overview of changes in 2.19.5
==========================================
* linux:
- fixed proc_map for >= 2.6.22
* freebsd:
- implemented procwd and procopenfiles
Joe Marcus Clarke
18 June 2007: Overview of changes in 2.19.4
===========================================
* solaris:

View File

@@ -4,7 +4,7 @@ dnl
m4_define([libgtop_major_version], [2])
m4_define([libgtop_minor_version], [19])
m4_define([libgtop_micro_version], [5])
m4_define([libgtop_micro_version], [4])
m4_define([libgtop_version], [libgtop_major_version.libgtop_minor_version.libgtop_micro_version])
dnl increment if the interface has additions, changes, removals.

View File

@@ -63,9 +63,9 @@ AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[
case "$host_os" in
linux*)
libgtop_sysdeps_dir=linux
libgtop_use_machine_h=no
libgtop_use_machine_h=yes
libgtop_have_sysinfo=yes
libgtop_need_server=no
libgtop_need_server=yes
;;
netbsd*|openbsd*|bsdi*)
libgtop_sysdeps_dir=bsd

View File

@@ -1,15 +1,3 @@
2007-07-09 I. Felix <ifelix@svn.gnome.org>
* ta.po: Tamil Translation updated by Tirumurthi Vasudevan
2007-07-07 Takeshi AIHANA <takeshi.aihana@gmail.com>
* ja.po: Updated Japanese translation.
2007-06-27 Clytie Siddall <clytie@riverland.net.au>
* vi.po: Updated Vietnamese translation.
2007-06-23 Kjartan Maraas <kmaraas@gnome.org>
* nb.po: Updated Norwegian bokmål translation.

164
po/ja.po
View File

@@ -1,192 +1,208 @@
# libgtop ja.po.
# Copyright (C) 1998,2000,2002-2007 Free Software Foundation, Inc.
# Copyright (C) 1998,2000,2002-2005 Free Software Foundation, Inc.
# Eiichiro ITANI <emu@ceres.dti.ne.jp>, 1998
# Takayuki KUSANO <AE5T-KSN@asahi-net.or.jp>, 2000, 2002.
# Yukihiro Nakai <nakai@gnome.gr.jp>, 2000.
# KAMAGASAKO Masatoshi <emerald@gnome.gr.jp>, 2003.
# Takeshi AIHANA <takeshi.aihana@gmail.com>, 2004-2007.
# Takeshi AIHANA <aihana@gnome.gr.jp>, 2004,2005.
#
msgid ""
msgstr ""
"Project-Id-Version: libgtop trunk\n"
"Project-Id-Version: libgtop HEAD\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-07-08 01:03+0900\n"
"PO-Revision-Date: 2007-07-08 01:03+0900\n"
"Last-Translator: Takeshi AIHANA <takeshi.aihana@gmail.com>\n"
"POT-Creation-Date: 2006-10-30 01:37+0900\n"
"PO-Revision-Date: 2006-10-30 01:38+0900\n"
"Last-Translator: Satoru SATOH <ss@gnome.gr.jp>\n"
"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../lib/read.c:51
#: ../lib/read.c:65
#, c-format
msgid "read %d byte"
msgid_plural "read %d bytes"
msgstr[0] " %dバイト読み込み"
msgstr[1] " %dバイト読み込み"
msgstr[0] "%d バイト読み込み"
#: ../lib/read_data.c:51
#: ../lib/read_data.c:53
msgid "read data size"
msgstr "データの読み込みサイズ"
#: ../lib/read_data.c:70
#: ../lib/read_data.c:72
#, c-format
msgid "read %lu byte of data"
msgid_plural "read %lu bytes of data"
msgstr[0] " %luバイトデータの読み込み"
msgstr[1] " %luバイトデータの読み込み"
msgstr[0] "%lu バイトデータの読み込み"
#: ../lib/write.c:51
#: ../lib/write.c:53
#, c-format
msgid "wrote %d byte"
msgid_plural "wrote %d bytes"
msgstr[0] " %dバイトの書き込み"
msgstr[1] " %dバイトの書き込み"
msgstr[0] "%d バイトの書き込み"
#: ../src/daemon/gnuserv.c:458
#: ../src/daemon/gnuserv.c:460
msgid "Enable debugging"
msgstr "デバッグを有効にする"
#: ../src/daemon/gnuserv.c:460
msgid "DEBUG"
msgstr "DEBUG"
#: ../src/daemon/gnuserv.c:462
msgid "Enable verbose output"
msgstr "詳細な出力にする"
#: ../src/daemon/gnuserv.c:462
msgid "VERBOSE"
msgstr "VERBOSE"
#: ../src/daemon/gnuserv.c:464
msgid "Don't fork into background"
msgstr "子プロセスをバックグラウンドに回さない"
#: ../src/daemon/gnuserv.c:464
msgid "NO-DAEMON"
msgstr "NO-DAEMON"
#: ../src/daemon/gnuserv.c:466
msgid "Invoked from inetd"
msgstr "`inetd` から起動する"
#: ../src/daemon/gnuserv.c:498
#, c-format
msgid "Run '%s --help' to see a full list of available command line options.\n"
msgstr ""
"利用可能なコマンド・ラインのオプション一覧を表示する場合は '%s --help' を実行"
"して下さい\n"
#: ../src/daemon/gnuserv.c:466
msgid "INETD"
msgstr "INETD"
#: ../sysdeps/osf1/siglist.c:27 ../sysdeps/sun4/siglist.c:27
#: ../src/daemon/gnuserv.c:500
#, c-format
msgid ""
"Error on option %s: %s.\n"
"Run '%s --help' to see a full list of available command line options.\n"
msgstr ""
"オプション%sでエラー: %s\n"
"コマンドラインオプションに使えるもの一覧を見るには'%s --help'を実行してくださ"
"い。\n"
#: ../sysdeps/osf1/siglist.c:29 ../sysdeps/sun4/siglist.c:29
msgid "Hangup"
msgstr "ハングアップ"
#: ../sysdeps/osf1/siglist.c:28 ../sysdeps/sun4/siglist.c:28
#: ../sysdeps/osf1/siglist.c:30 ../sysdeps/sun4/siglist.c:30
msgid "Interrupt"
msgstr "インタラプト"
#: ../sysdeps/osf1/siglist.c:29 ../sysdeps/sun4/siglist.c:29
#: ../sysdeps/osf1/siglist.c:31 ../sysdeps/sun4/siglist.c:31
msgid "Quit"
msgstr "終了"
#: ../sysdeps/osf1/siglist.c:30 ../sysdeps/sun4/siglist.c:30
#: ../sysdeps/osf1/siglist.c:32 ../sysdeps/sun4/siglist.c:32
msgid "Illegal instruction"
msgstr "不正なインストラクション"
#: ../sysdeps/osf1/siglist.c:31 ../sysdeps/sun4/siglist.c:31
#: ../sysdeps/osf1/siglist.c:33 ../sysdeps/sun4/siglist.c:33
msgid "Trace trap"
msgstr "トレーストラップ"
#: ../sysdeps/osf1/siglist.c:32 ../sysdeps/sun4/siglist.c:32
msgid "Abort"
msgstr "停止"
#: ../sysdeps/osf1/siglist.c:33 ../sysdeps/sun4/siglist.c:33
msgid "EMT error"
msgstr "EMT エラー"
#: ../sysdeps/osf1/siglist.c:34 ../sysdeps/sun4/siglist.c:34
msgid "Abort"
msgstr "終了"
#: ../sysdeps/osf1/siglist.c:35 ../sysdeps/sun4/siglist.c:35
msgid "EMT error"
msgstr "EMTエラー"
#: ../sysdeps/osf1/siglist.c:36 ../sysdeps/sun4/siglist.c:36
msgid "Floating-point exception"
msgstr "浮動小数点例外"
#: ../sysdeps/osf1/siglist.c:35 ../sysdeps/sun4/siglist.c:35
#: ../sysdeps/osf1/siglist.c:37 ../sysdeps/sun4/siglist.c:37
msgid "Kill"
msgstr "強制終了"
msgstr "kill"
#: ../sysdeps/osf1/siglist.c:36 ../sysdeps/sun4/siglist.c:36
#: ../sysdeps/osf1/siglist.c:38 ../sysdeps/sun4/siglist.c:38
msgid "Bus error"
msgstr "バスエラー"
#: ../sysdeps/osf1/siglist.c:37 ../sysdeps/sun4/siglist.c:37
#: ../sysdeps/osf1/siglist.c:39 ../sysdeps/sun4/siglist.c:39
msgid "Segmentation violation"
msgstr "セグメンテーションバイオレーション"
#: ../sysdeps/osf1/siglist.c:38 ../sysdeps/sun4/siglist.c:38
#: ../sysdeps/osf1/siglist.c:40 ../sysdeps/sun4/siglist.c:40
msgid "Bad argument to system call"
msgstr "システムコールの引数が誤っています"
#: ../sysdeps/osf1/siglist.c:39 ../sysdeps/sun4/siglist.c:39
#: ../sysdeps/osf1/siglist.c:41 ../sysdeps/sun4/siglist.c:41
msgid "Broken pipe"
msgstr "パイプ破壊"
#: ../sysdeps/osf1/siglist.c:40 ../sysdeps/sun4/siglist.c:40
#: ../sysdeps/osf1/siglist.c:42 ../sysdeps/sun4/siglist.c:42
msgid "Alarm clock"
msgstr "アラームクロック"
#: ../sysdeps/osf1/siglist.c:41 ../sysdeps/sun4/siglist.c:41
#: ../sysdeps/osf1/siglist.c:43 ../sysdeps/sun4/siglist.c:43
msgid "Termination"
msgstr "ターミネーション"
#: ../sysdeps/osf1/siglist.c:42 ../sysdeps/sun4/siglist.c:42
#: ../sysdeps/osf1/siglist.c:44 ../sysdeps/sun4/siglist.c:44
msgid "Urgent condition on socket"
msgstr "ソケットの緊急状態"
#: ../sysdeps/osf1/siglist.c:43 ../sysdeps/sun4/siglist.c:43
#: ../sysdeps/osf1/siglist.c:45 ../sysdeps/sun4/siglist.c:45
msgid "Stop"
msgstr "ストップ"
#: ../sysdeps/osf1/siglist.c:44 ../sysdeps/sun4/siglist.c:44
#: ../sysdeps/osf1/siglist.c:46 ../sysdeps/sun4/siglist.c:46
msgid "Keyboard stop"
msgstr "キーボード停止"
msgstr "キーボードストップ"
#: ../sysdeps/osf1/siglist.c:45 ../sysdeps/sun4/siglist.c:45
#: ../sysdeps/osf1/siglist.c:47 ../sysdeps/sun4/siglist.c:47
msgid "Continue"
msgstr "コンティニュー"
#: ../sysdeps/osf1/siglist.c:46 ../sysdeps/sun4/siglist.c:46
#: ../sysdeps/osf1/siglist.c:48 ../sysdeps/sun4/siglist.c:48
msgid "Child status has changed"
msgstr "子プロセス状態が変更された"
#: ../sysdeps/osf1/siglist.c:47 ../sysdeps/sun4/siglist.c:47
msgid "Background read from tty"
msgstr "TTY からのバックグラウンド読み込み"
#: ../sysdeps/osf1/siglist.c:48 ../sysdeps/sun4/siglist.c:48
msgid "Background write to tty"
msgstr "TTY へのバックグラウンド書き込み"
#: ../sysdeps/osf1/siglist.c:49 ../sysdeps/sun4/siglist.c:49
msgid "Background read from tty"
msgstr "ttyからのバックグラウンド読み込み"
#: ../sysdeps/osf1/siglist.c:50 ../sysdeps/sun4/siglist.c:50
msgid "Background write to tty"
msgstr "ttyへのバックグラウンド書き込み"
#: ../sysdeps/osf1/siglist.c:51 ../sysdeps/sun4/siglist.c:51
msgid "I/O now possible"
msgstr "I/Oが使用可能"
#: ../sysdeps/osf1/siglist.c:50 ../sysdeps/sun4/siglist.c:50
msgid "CPU limit exceeded"
msgstr "CPU の限界を越えた"
#: ../sysdeps/osf1/siglist.c:51 ../sysdeps/sun4/siglist.c:51
msgid "File size limit exceeded"
msgstr "ファイルサイズの限界を越えた"
#: ../sysdeps/osf1/siglist.c:52 ../sysdeps/sun4/siglist.c:52
msgid "CPU limit exceeded"
msgstr "CPU限界を越えた"
#: ../sysdeps/osf1/siglist.c:53 ../sysdeps/sun4/siglist.c:53
msgid "File size limit exceeded"
msgstr "ファイルサイズ限界を越えた"
#: ../sysdeps/osf1/siglist.c:54 ../sysdeps/sun4/siglist.c:54
msgid "Virtual alarm clock"
msgstr "仮想アラームクロック"
#: ../sysdeps/osf1/siglist.c:53 ../sysdeps/sun4/siglist.c:53
#: ../sysdeps/osf1/siglist.c:55 ../sysdeps/sun4/siglist.c:55
msgid "Profiling alarm clock"
msgstr "アラームクロックのプロファイル"
#: ../sysdeps/osf1/siglist.c:54 ../sysdeps/sun4/siglist.c:54
#: ../sysdeps/osf1/siglist.c:56 ../sysdeps/sun4/siglist.c:56
msgid "Window size change"
msgstr "ウィンドウサイズの変更"
#: ../sysdeps/osf1/siglist.c:55 ../sysdeps/sun4/siglist.c:55
#: ../sysdeps/osf1/siglist.c:57 ../sysdeps/sun4/siglist.c:57
msgid "Information request"
msgstr "情報リクエスト"
#: ../sysdeps/osf1/siglist.c:56 ../sysdeps/sun4/siglist.c:56
#: ../sysdeps/osf1/siglist.c:58 ../sysdeps/sun4/siglist.c:58
msgid "User defined signal 1"
msgstr "ユーザ定義シグナル"
msgstr "ユーザ定義シグナル 1"
#: ../sysdeps/osf1/siglist.c:57 ../sysdeps/sun4/siglist.c:57
#: ../sysdeps/osf1/siglist.c:59 ../sysdeps/sun4/siglist.c:59
msgid "User defined signal 2"
msgstr "ユーザ定義シグナル"
msgstr "ユーザ定義シグナル 2"

154
po/ta.po
View File

@@ -9,223 +9,205 @@ msgid ""
msgstr ""
"Project-Id-Version: ta\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-05-14 03:41+0100\n"
"PO-Revision-Date: 2007-07-08 17:29+0530\n"
"Last-Translator: Dr.T.Vasudevan <agnihot3@gmail.com>\n"
"POT-Creation-Date: 2005-09-25 18:15+0200\n"
"PO-Revision-Date: 2007-04-27 11:03+0530\n"
"Last-Translator: \n"
"Language-Team: <en@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"0500\n"
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: Plural-Forms: nplurals=2; plural=(n != 1);\n"
"\n"
#: ../lib/read.c:51
#: lib/read.c:65
#, c-format
msgid "read %d byte"
msgid_plural "read %d bytes"
msgstr[0] "%d பைட்கள் படி"
msgstr[1] "%d பைட்கள் படி"
#: ../lib/read_data.c:51
#: lib/read_data.c:53
msgid "read data size"
msgstr "படித்த தகவல் அளவு"
#: ../lib/read_data.c:70
#: lib/read_data.c:72
#, c-format
msgid "read %lu byte of data"
msgid_plural "read %lu bytes of data"
msgstr[0] "தரவின் %lu பைட்டை வாசிக்கவும்"
msgstr[1] "தரவின் %lu பைட்டுக்களை வாசிக்கவும்"
#: ../lib/write.c:51
#: lib/write.c:52
#, c-format
msgid "wrote %d byte"
msgid_plural "wrote %d bytes"
msgstr[0] "எழுதிய %d பைட்"
msgstr[1] "எழுதிய %d பைட்டுகள்"
#: ../src/daemon/gnuserv.c:458
#: src/daemon/gnuserv.c:460
msgid "Enable debugging"
msgstr "பிழை திருத்தலை செயல்படுத்து"
#: ../src/daemon/gnuserv.c:460
#: src/daemon/gnuserv.c:460
msgid "DEBUG"
msgstr "DEBUG(டீபக்)"
#: src/daemon/gnuserv.c:462
msgid "Enable verbose output"
msgstr "வெர்போஸ் விளைவை செயல்படுத்து"
#: ../src/daemon/gnuserv.c:462
#: src/daemon/gnuserv.c:462
msgid "VERBOSE"
msgstr "VERBOSE(வெற்போஸ்)"
#: src/daemon/gnuserv.c:464
msgid "Don't fork into background"
msgstr "பின்னனியை பிளக்காதே"
#: ../src/daemon/gnuserv.c:464
#: src/daemon/gnuserv.c:464
msgid "NO-DAEMON"
msgstr "NO-DAEMON(நோ-டொமொன்)"
#: src/daemon/gnuserv.c:466
msgid "Invoked from inetd"
msgstr "inetd லிருந்து செயல்படுத்து"
#: ../src/daemon/gnuserv.c:498
#, c-format
msgid "Run '%s --help' to see a full list of available command line options.\n"
msgstr "Rus '%s--help' இயக்கி கட்டளைவரி தேர்வுகளை காணவும்.\n"
#: src/daemon/gnuserv.c:466
msgid "INETD"
msgstr "INETD(இனிட்டி)"
#: ../sysdeps/osf1/siglist.c:27
#: ../sysdeps/sun4/siglist.c:27
#: src/daemon/gnuserv.c:500
#, c-format
msgid ""
"Error on option %s: %s.\n"
"Run '%s --help' to see a full list of available command line options.\n"
msgstr ""
"தேர்வில் பிழை %s: %s.\n"
"Rus '%s--help' இயக்கி கட்டளைவரி தேர்வுகளை பெற்றுக்கொள்ளவும் \n"
#: sysdeps/osf1/siglist.c:28 sysdeps/sun4/siglist.c:28
msgid "Hangup"
msgstr "தொங்கியது"
#: ../sysdeps/osf1/siglist.c:28
#: ../sysdeps/sun4/siglist.c:28
#: sysdeps/osf1/siglist.c:29 sysdeps/sun4/siglist.c:29
msgid "Interrupt"
msgstr "தடை"
#: ../sysdeps/osf1/siglist.c:29
#: ../sysdeps/sun4/siglist.c:29
#: sysdeps/osf1/siglist.c:30 sysdeps/sun4/siglist.c:30
msgid "Quit"
msgstr "வெளிச்செல்"
#: ../sysdeps/osf1/siglist.c:30
#: ../sysdeps/sun4/siglist.c:30
#: sysdeps/osf1/siglist.c:31 sysdeps/sun4/siglist.c:31
msgid "Illegal instruction"
msgstr "தவறான செய்தி"
#: ../sysdeps/osf1/siglist.c:31
#: ../sysdeps/sun4/siglist.c:31
#: sysdeps/osf1/siglist.c:32 sysdeps/sun4/siglist.c:32
msgid "Trace trap"
msgstr "தடம் காண்"
#: ../sysdeps/osf1/siglist.c:32
#: ../sysdeps/sun4/siglist.c:32
#: sysdeps/osf1/siglist.c:33 sysdeps/sun4/siglist.c:33
msgid "Abort"
msgstr "தடைசெய்"
#: ../sysdeps/osf1/siglist.c:33
#: ../sysdeps/sun4/siglist.c:33
#: sysdeps/osf1/siglist.c:34 sysdeps/sun4/siglist.c:34
msgid "EMT error"
msgstr "EMT பிழை"
#: ../sysdeps/osf1/siglist.c:34
#: ../sysdeps/sun4/siglist.c:34
#: sysdeps/osf1/siglist.c:35 sysdeps/sun4/siglist.c:35
msgid "Floating-point exception"
msgstr "பின்ன பிழை"
#: ../sysdeps/osf1/siglist.c:35
#: ../sysdeps/sun4/siglist.c:35
#: sysdeps/osf1/siglist.c:36 sysdeps/sun4/siglist.c:36
msgid "Kill"
msgstr "கொலை செய்"
#: ../sysdeps/osf1/siglist.c:36
#: ../sysdeps/sun4/siglist.c:36
#: sysdeps/osf1/siglist.c:37 sysdeps/sun4/siglist.c:37
msgid "Bus error"
msgstr "பஸ் பிழை"
#: ../sysdeps/osf1/siglist.c:37
#: ../sysdeps/sun4/siglist.c:37
#: sysdeps/osf1/siglist.c:38 sysdeps/sun4/siglist.c:38
msgid "Segmentation violation"
msgstr "செக்மன்டேஷன் மீறல்"
#: ../sysdeps/osf1/siglist.c:38
#: ../sysdeps/sun4/siglist.c:38
#: sysdeps/osf1/siglist.c:39 sysdeps/sun4/siglist.c:39
msgid "Bad argument to system call"
msgstr "கணினி அழைப்புக்கு மோசமான அளவுரு"
#: ../sysdeps/osf1/siglist.c:39
#: ../sysdeps/sun4/siglist.c:39
#: sysdeps/osf1/siglist.c:40 sysdeps/sun4/siglist.c:40
msgid "Broken pipe"
msgstr "உடைந்த பாதை"
#: ../sysdeps/osf1/siglist.c:40
#: ../sysdeps/sun4/siglist.c:40
#: sysdeps/osf1/siglist.c:41 sysdeps/sun4/siglist.c:41
msgid "Alarm clock"
msgstr "அல்லாரம் கடிகாரம்"
#: ../sysdeps/osf1/siglist.c:41
#: ../sysdeps/sun4/siglist.c:41
#: sysdeps/osf1/siglist.c:42 sysdeps/sun4/siglist.c:42
msgid "Termination"
msgstr "முடிவு"
#: ../sysdeps/osf1/siglist.c:42
#: ../sysdeps/sun4/siglist.c:42
#: sysdeps/osf1/siglist.c:43 sysdeps/sun4/siglist.c:43
msgid "Urgent condition on socket"
msgstr "சாக்கெட்டின் அவசர நிலை"
#: ../sysdeps/osf1/siglist.c:43
#: ../sysdeps/sun4/siglist.c:43
#: sysdeps/osf1/siglist.c:44 sysdeps/sun4/siglist.c:44
msgid "Stop"
msgstr "நிறுத்து"
#: ../sysdeps/osf1/siglist.c:44
#: ../sysdeps/sun4/siglist.c:44
#: sysdeps/osf1/siglist.c:45 sysdeps/sun4/siglist.c:45
msgid "Keyboard stop"
msgstr "விசைப்பலகை நிறுத்தம்"
#: ../sysdeps/osf1/siglist.c:45
#: ../sysdeps/sun4/siglist.c:45
#: sysdeps/osf1/siglist.c:46 sysdeps/sun4/siglist.c:46
msgid "Continue"
msgstr "தொடரவும்"
#: ../sysdeps/osf1/siglist.c:46
#: ../sysdeps/sun4/siglist.c:46
#: sysdeps/osf1/siglist.c:47 sysdeps/sun4/siglist.c:47
msgid "Child status has changed"
msgstr "சேய்நிலை மாற்றப்பட்டது"
#: ../sysdeps/osf1/siglist.c:47
#: ../sysdeps/sun4/siglist.c:47
#: sysdeps/osf1/siglist.c:48 sysdeps/sun4/siglist.c:48
msgid "Background read from tty"
msgstr "tty யின் பின்னியில் படி"
#: ../sysdeps/osf1/siglist.c:48
#: ../sysdeps/sun4/siglist.c:48
#: sysdeps/osf1/siglist.c:49 sysdeps/sun4/siglist.c:49
msgid "Background write to tty"
msgstr "tty யின் பின்னியில் எழுது"
#: ../sysdeps/osf1/siglist.c:49
#: ../sysdeps/sun4/siglist.c:49
#: sysdeps/osf1/siglist.c:50 sysdeps/sun4/siglist.c:50
msgid "I/O now possible"
msgstr "I/O இப்போது முடியும்"
#: ../sysdeps/osf1/siglist.c:50
#: ../sysdeps/sun4/siglist.c:50
#: sysdeps/osf1/siglist.c:51 sysdeps/sun4/siglist.c:51
msgid "CPU limit exceeded"
msgstr "CPU எல்லை கடந்தது"
#: ../sysdeps/osf1/siglist.c:51
#: ../sysdeps/sun4/siglist.c:51
#: sysdeps/osf1/siglist.c:52 sysdeps/sun4/siglist.c:52
msgid "File size limit exceeded"
msgstr "முழு அளவு எல்லை கடந்தது"
#: ../sysdeps/osf1/siglist.c:52
#: ../sysdeps/sun4/siglist.c:52
#: sysdeps/osf1/siglist.c:53 sysdeps/sun4/siglist.c:53
msgid "Virtual alarm clock"
msgstr "மெய்நிகர் எச்சரிக்கை கடிகாரம்"
#: ../sysdeps/osf1/siglist.c:53
#: ../sysdeps/sun4/siglist.c:53
#: sysdeps/osf1/siglist.c:54 sysdeps/sun4/siglist.c:54
msgid "Profiling alarm clock"
msgstr "எச்சரிக்கை கடிகாத்தின் விவரம்"
#: ../sysdeps/osf1/siglist.c:54
#: ../sysdeps/sun4/siglist.c:54
#: sysdeps/osf1/siglist.c:55 sysdeps/sun4/siglist.c:55
msgid "Window size change"
msgstr "சாளர அளவு மாற்றம்"
#: ../sysdeps/osf1/siglist.c:55
#: ../sysdeps/sun4/siglist.c:55
#: sysdeps/osf1/siglist.c:56 sysdeps/sun4/siglist.c:56
msgid "Information request"
msgstr "தகவல் கோரிக்கை"
#: ../sysdeps/osf1/siglist.c:56
#: ../sysdeps/sun4/siglist.c:56
#: sysdeps/osf1/siglist.c:57 sysdeps/sun4/siglist.c:57
msgid "User defined signal 1"
msgstr "பயனீட்டாளர் குறித்த சங்கேதம் 1"
#: ../sysdeps/osf1/siglist.c:57
#: ../sysdeps/sun4/siglist.c:57
#: sysdeps/osf1/siglist.c:58 sysdeps/sun4/siglist.c:58
msgid "User defined signal 2"
msgstr "பயனீட்டாளர் குறித்த சங்கேதம் 2"
#~ msgid "DEBUG"
#~ msgstr "DEBUG(டீபக்)"
#~ msgid "VERBOSE"
#~ msgstr "VERBOSE(வெற்போஸ்)"
#~ msgid "NO-DAEMON"
#~ msgstr "NO-DAEMON(நோ-டொமொன்)"
#~ msgid "INETD"
#~ msgstr "INETD(இனிட்டி)"

191
po/vi.po
View File

@@ -1,228 +1,205 @@
# Vietnamese translation for libgtop.
# Copyright © 2007 Gnome i18n Project for Vietnamese.
# Nguyễn Thái Ngọc Duy <pclouds@gmx.net>, 2002.
# Clytie Siddall <clytie@riverland.net.au>, 2005-2007.
# Copyright © 2005 Gnome i18n Project for Vietnamese.
# pclouds <pclouds@gmx.net>, 2002.
# Clytie Siddall <clytie@riverland.net.au>, 2005.
#
msgid ""
""
msgstr "Project-Id-Version: libgtop GNOME 2.20\n"
msgstr ""
"Project-Id-Version: libgtop GNOME 2.10\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-05-14 03:41+0100\n"
"PO-Revision-Date: 2007-06-27 17:37+09300\n"
"POT-Creation-Date: 2005-09-25 18:15+0200\n"
"PO-Revision-Date: 2005-07-01 18:03+0930\n"
"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
"Language-Team: Vietnamese <gnomevi-list@lists.sourceforge.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: LocFactoryEditor 1.6.4a5\n"
"Plural-Forms: nplurals=1; plural=0\n"
"X-Generator: LocFactoryEditor 1.2.2\n"
#: ../lib/read.c:51
#: lib/read.c:65
#, c-format
msgid "read %d byte"
msgid_plural "read %d bytes"
msgstr[0] "đã đọc %d byte"
#: ../lib/read_data.c:51
#: lib/read_data.c:53
msgid "read data size"
msgstr "đã đọc kích c dữ liệu"
msgstr "đã đọc kích thước dữ liệu"
#: ../lib/read_data.c:70
#: lib/read_data.c:72
#, c-format
msgid "read %lu byte of data"
msgid_plural "read %lu bytes of data"
msgstr[0] "đã đọc %lu byte dữ liệu"
#: ../lib/write.c:51
#: lib/write.c:52
#, c-format
msgid "wrote %d byte"
msgid_plural "wrote %d bytes"
msgstr[0] "đã ghi %d byte"
#: ../src/daemon/gnuserv.c:458
#: src/daemon/gnuserv.c:460
msgid "Enable debugging"
msgstr "Bật khả năng gỡ lỗi"
msgstr "Bật gỡ lỗi"
#: ../src/daemon/gnuserv.c:460
#: src/daemon/gnuserv.c:460
msgid "DEBUG"
msgstr "GỠ LỖI"
#: src/daemon/gnuserv.c:462
msgid "Enable verbose output"
msgstr "Bật khả năng xuất chi tiết"
msgstr "Bật xuất chi tiết"
#: ../src/daemon/gnuserv.c:462
#: src/daemon/gnuserv.c:462
msgid "VERBOSE"
msgstr "CHI TIẾT"
#: src/daemon/gnuserv.c:464
msgid "Don't fork into background"
msgstr "Không tạo tiến trình con vào nền"
#: ../src/daemon/gnuserv.c:464
#: src/daemon/gnuserv.c:464
msgid "NO-DAEMON"
msgstr "KHÔNG TRÌNH NỀN"
#: src/daemon/gnuserv.c:466
msgid "Invoked from inetd"
msgstr "Được gọi từ inetd"
#: ../src/daemon/gnuserv.c:498
#, c-format
msgid "Run '%s --help' to see a full list of available command line options.\n"
msgstr "Chạy lệnh « %s --help » để xem danh sách các tùy chọn dòng lệnh sẵn sàng.\n"
#: src/daemon/gnuserv.c:466
msgid "INETD"
msgstr "INETD"
#: ../sysdeps/osf1/siglist.c:27
#: ../sysdeps/sun4/siglist.c:27
#: src/daemon/gnuserv.c:500
#, c-format
msgid ""
"Error on option %s: %s.\n"
"Run '%s --help' to see a full list of available command line options.\n"
msgstr ""
"Lỗi tùy chọn %s: %s.\n"
"Chạy «%s --help» để xem danh sách toàn bộ các tùy chọn có thể.\n"
#: sysdeps/osf1/siglist.c:28 sysdeps/sun4/siglist.c:28
msgid "Hangup"
msgstr "Treo máy"
#: ../sysdeps/osf1/siglist.c:28
#: ../sysdeps/sun4/siglist.c:28
#: sysdeps/osf1/siglist.c:29 sysdeps/sun4/siglist.c:29
msgid "Interrupt"
msgstr "Ngắt"
#: ../sysdeps/osf1/siglist.c:29
#: ../sysdeps/sun4/siglist.c:29
#: sysdeps/osf1/siglist.c:30 sysdeps/sun4/siglist.c:30
msgid "Quit"
msgstr "Thoát"
#: ../sysdeps/osf1/siglist.c:30
#: ../sysdeps/sun4/siglist.c:30
#: sysdeps/osf1/siglist.c:31 sysdeps/sun4/siglist.c:31
msgid "Illegal instruction"
msgstr "Lệnh bị cấm"
#: ../sysdeps/osf1/siglist.c:31
#: ../sysdeps/sun4/siglist.c:31
#: sysdeps/osf1/siglist.c:32 sysdeps/sun4/siglist.c:32
msgid "Trace trap"
msgstr "Bẫy theo vết"
#: ../sysdeps/osf1/siglist.c:32
#: ../sysdeps/sun4/siglist.c:32
#: sysdeps/osf1/siglist.c:33 sysdeps/sun4/siglist.c:33
msgid "Abort"
msgstr "Hủy"
#: ../sysdeps/osf1/siglist.c:33
#: ../sysdeps/sun4/siglist.c:33
#: sysdeps/osf1/siglist.c:34 sysdeps/sun4/siglist.c:34
msgid "EMT error"
msgstr "Lỗi EMT"
#: ../sysdeps/osf1/siglist.c:34
#: ../sysdeps/sun4/siglist.c:34
#: sysdeps/osf1/siglist.c:35 sysdeps/sun4/siglist.c:35
msgid "Floating-point exception"
msgstr "Ngoại lệ điểm phù động"
#: ../sysdeps/osf1/siglist.c:35
#: ../sysdeps/sun4/siglist.c:35
#: sysdeps/osf1/siglist.c:36 sysdeps/sun4/siglist.c:36
msgid "Kill"
msgstr "Buộc chấm dứt"
#: ../sysdeps/osf1/siglist.c:36
#: ../sysdeps/sun4/siglist.c:36
#: sysdeps/osf1/siglist.c:37 sysdeps/sun4/siglist.c:37
msgid "Bus error"
msgstr "Lỗi mạch"
msgstr "Lỗi Bus"
#: ../sysdeps/osf1/siglist.c:37
#: ../sysdeps/sun4/siglist.c:37
#: sysdeps/osf1/siglist.c:38 sysdeps/sun4/siglist.c:38
msgid "Segmentation violation"
msgstr "Vi phạm phân đoạn"
#: ../sysdeps/osf1/siglist.c:38
#: ../sysdeps/sun4/siglist.c:38
#: sysdeps/osf1/siglist.c:39 sysdeps/sun4/siglist.c:39
msgid "Bad argument to system call"
msgstr "Đối số sai với cuộc gọi hệ thống"
msgstr "Đối số sai với lời gọi hệ thống"
#: ../sysdeps/osf1/siglist.c:39
#: ../sysdeps/sun4/siglist.c:39
#: sysdeps/osf1/siglist.c:40 sysdeps/sun4/siglist.c:40
msgid "Broken pipe"
msgstr "Ống dẫn bị ngắt"
msgstr "Ống dẫn bị gãy"
#: ../sysdeps/osf1/siglist.c:40
#: ../sysdeps/sun4/siglist.c:40
#: sysdeps/osf1/siglist.c:41 sysdeps/sun4/siglist.c:41
msgid "Alarm clock"
msgstr "Đồng hồ báo động"
#: ../sysdeps/osf1/siglist.c:41
#: ../sysdeps/sun4/siglist.c:41
#: sysdeps/osf1/siglist.c:42 sysdeps/sun4/siglist.c:42
msgid "Termination"
msgstr "Kết thúc"
#: ../sysdeps/osf1/siglist.c:42
#: ../sysdeps/sun4/siglist.c:42
#: sysdeps/osf1/siglist.c:43 sysdeps/sun4/siglist.c:43
msgid "Urgent condition on socket"
msgstr "Hoàn cảnh khẩn trên ổ cắm"
#: ../sysdeps/osf1/siglist.c:43
#: ../sysdeps/sun4/siglist.c:43
#: sysdeps/osf1/siglist.c:44 sysdeps/sun4/siglist.c:44
msgid "Stop"
msgstr "Dừng"
#: ../sysdeps/osf1/siglist.c:44
#: ../sysdeps/sun4/siglist.c:44
#: sysdeps/osf1/siglist.c:45 sysdeps/sun4/siglist.c:45
msgid "Keyboard stop"
msgstr "Dừng bàn phím"
#: ../sysdeps/osf1/siglist.c:45
#: ../sysdeps/sun4/siglist.c:45
#: sysdeps/osf1/siglist.c:46 sysdeps/sun4/siglist.c:46
msgid "Continue"
msgstr "Tiếp tục"
#: ../sysdeps/osf1/siglist.c:46
#: ../sysdeps/sun4/siglist.c:46
#: sysdeps/osf1/siglist.c:47 sysdeps/sun4/siglist.c:47
msgid "Child status has changed"
msgstr "Trạng thái tiến trình con đã thay đổi"
#: ../sysdeps/osf1/siglist.c:47
#: ../sysdeps/sun4/siglist.c:47
#: sysdeps/osf1/siglist.c:48 sysdeps/sun4/siglist.c:48
msgid "Background read from tty"
msgstr "Đọc từ tty (chế độ nền)"
#: ../sysdeps/osf1/siglist.c:48
#: ../sysdeps/sun4/siglist.c:48
#: sysdeps/osf1/siglist.c:49 sysdeps/sun4/siglist.c:49
msgid "Background write to tty"
msgstr "Ghi vào tty (chế độ nền)"
#: ../sysdeps/osf1/siglist.c:49
#: ../sysdeps/sun4/siglist.c:49
#: sysdeps/osf1/siglist.c:50 sysdeps/sun4/siglist.c:50
msgid "I/O now possible"
msgstr "giờ có thể dùng Vào/Ra"
msgstr "mới có thể dùng gõ/xuất"
#: ../sysdeps/osf1/siglist.c:50
#: ../sysdeps/sun4/siglist.c:50
#: sysdeps/osf1/siglist.c:51 sysdeps/sun4/siglist.c:51
msgid "CPU limit exceeded"
msgstr "Vượt quá giới hạn CPU"
#: ../sysdeps/osf1/siglist.c:51
#: ../sysdeps/sun4/siglist.c:51
#: sysdeps/osf1/siglist.c:52 sysdeps/sun4/siglist.c:52
msgid "File size limit exceeded"
msgstr "Vượt quá giới hạn kích c tập tin"
msgstr "Vượt quá giới hạn kích thước tập tin"
#: ../sysdeps/osf1/siglist.c:52
#: ../sysdeps/sun4/siglist.c:52
#: sysdeps/osf1/siglist.c:53 sysdeps/sun4/siglist.c:53
msgid "Virtual alarm clock"
msgstr "Đồng hồ báo động ảo"
#: ../sysdeps/osf1/siglist.c:53
#: ../sysdeps/sun4/siglist.c:53
#: sysdeps/osf1/siglist.c:54 sysdeps/sun4/siglist.c:54
msgid "Profiling alarm clock"
msgstr "Đồng hồ bảo động đo hiệu suất"
msgstr "Lấy thông tin về đồng hồ bảo động"
#: ../sysdeps/osf1/siglist.c:54
#: ../sysdeps/sun4/siglist.c:54
#: sysdeps/osf1/siglist.c:55 sysdeps/sun4/siglist.c:55
msgid "Window size change"
msgstr "Thay đổi kích c cửa sổ"
msgstr "Thay đổi kích thước cửa sổ"
#: ../sysdeps/osf1/siglist.c:55
#: ../sysdeps/sun4/siglist.c:55
#: sysdeps/osf1/siglist.c:56 sysdeps/sun4/siglist.c:56
msgid "Information request"
msgstr "Yêu cầu thông tin"
#: ../sysdeps/osf1/siglist.c:56
#: ../sysdeps/sun4/siglist.c:56
#: sysdeps/osf1/siglist.c:57 sysdeps/sun4/siglist.c:57
msgid "User defined signal 1"
msgstr "Tín hiệu do người dùng xác định 1"
msgstr "Tín hiệu do người dùng định nghĩa 1"
#: ../sysdeps/osf1/siglist.c:57
#: ../sysdeps/sun4/siglist.c:57
#: sysdeps/osf1/siglist.c:58 sysdeps/sun4/siglist.c:58
msgid "User defined signal 2"
msgstr "Tín hiệu do người dùng xác định 2"
#~ msgid "DEBUG"
#~ msgstr "GỠ LỖI"
#~ msgid "VERBOSE"
#~ msgstr "CHI TIẾT"
#~ msgid "NO-DAEMON"
#~ msgstr "KHÔNG TRÌNH NỀN"
#~ msgid "INETD"
#~ msgstr "INETD"
msgstr "Tín hiệu do người dùng định nghĩa 2"

View File

@@ -1,11 +1,3 @@
2007-07-01 Benoît Dejean <benoit@placenet.org>
Fixe some problems as well as implements procwd and procopenfiles
for FreeBSD using a wrapper around lsof. This same backend should
also work on kFreeBSD.
Patch by Joe Marcus Clarke <marcus@freebsd.org>
2007-02-18 Benoît Dejean <benoit@placenet.org>
* AUTHORS:

View File

@@ -5,9 +5,7 @@ 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 shm_limits.c \
cpu.c msg_limits.c sem_limits.c loadavg.c \
uptime.c netlist.c fsusage.c mem.c \
procopenfiles.c procwd.c \
glibtop_private.c
uptime.c netlist.c fsusage.c mem.c
libgtop_sysdeps_2_0_la_LDFLAGS = $(LT_VERSION_INFO)
@@ -16,11 +14,11 @@ libgtop_sysdeps_suid_2_0_la_SOURCES = open.c close.c swap.c \
proclist.c procstate.c procuid.c \
proctime.c procmem.c procsignal.c \
prockernel.c procsegment.c procargs.c \
procmap.c netload.c ppp.c
procmap.c netload.c ppp.c procopenfiles.c
libgtop_sysdeps_suid_2_0_la_LDFLAGS = $(LT_VERSION_INFO)
libgtopinclude_HEADERS = glibtop_server.h glibtop_machine.h \
glibtop_suid.h glibtop_private.h
glibtop_suid.h
libgtopincludedir = $(includedir)/libgtop-2.0

View File

@@ -1,54 +0,0 @@
#include <config.h>
#include <glibtop.h>
#include <glibtop/error.h>
#include "glibtop_private.h"
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <glib.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)", command,
exit_status);
output = NULL;
}
}
g_free(command);
return output;
}
/* Ported from linux/glibtop_private.c */
gboolean
safe_readlink(const char *path, char *buf, int bufsiz)
{
int ret;
ret = readlink(path, buf, bufsiz - 1);
if (ret == -1) {
g_warning("Could not read link %s : %s", path, strerror(errno));
return FALSE;
}
buf[ret] = '\0';
return TRUE;
}

View File

@@ -1,40 +0,0 @@
/* Copyright (C) 2007 Joe Marcus Clarke
This file is part of LibGTop 2.0.
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.
*/
#ifndef __FREEBSD__GLIBTOP_PRIVATE_H__
#define __FREEBSD__GLIBTOP_PRIVATE_H__
#include <glibtop.h>
#include <glibtop/error.h>
#include <glib.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
G_BEGIN_DECLS
char *execute_lsof(pid_t pid);
gboolean safe_readlink(const char *path, char *buf, int bufsiz);
G_END_DECLS
#endif /* __FREEBSD__GLIBTOP_PRIVATE_H__ */

View File

@@ -45,7 +45,6 @@ G_BEGIN_DECLS
#define GLIBTOP_SUID_MSG_LIMITS 0
#define GLIBTOP_SUID_SEM_LIMITS 0
#define GLIBTOP_SUID_NETLIST 0
#define GLIBTOP_SUID_PROC_WD 0
G_END_DECLS

View File

@@ -40,7 +40,7 @@ static const unsigned long _glibtop_sysdeps_proclist =
* buf->flags is only set if the call succeeded, in this case pids_chain,
* a list of the pids of all currently running processes is returned,
* buf->number is the number of elements of this list and buf->size is
* the size of one single element (sizeof (pid_t)). The total size is
* the size of one single element (sizeof (unsigned)). The total size is
* stored in buf->total.
*
* The calling function has to free the memory to which a pointer is returned.
@@ -61,7 +61,7 @@ _glibtop_init_proclist_p (glibtop *server)
server->sysdeps.proclist = _glibtop_sysdeps_proclist;
}
pid_t *
unsigned *
glibtop_get_proclist_p (glibtop *server, glibtop_proclist *buf,
gint64 which, gint64 arg)
{
@@ -90,18 +90,18 @@ glibtop_get_proclist_p (glibtop *server, glibtop_proclist *buf,
len /= sizeof (struct kinfo_proc);
pids = g_array_sized_new (FALSE, FALSE, sizeof (pid_t), len);
pids = g_array_sized_new (FALSE, FALSE, sizeof (unsigned), len);
for (i = 0; i < len; i++) {
pid_t pid;
unsigned pid;
pid = (pid_t) pinfo[i].ki_pid;
pid = (unsigned) pinfo[i].ki_pid;
switch (which & GLIBTOP_KERN_PROC_MASK) {
case GLIBTOP_KERN_PROC_ALL:
break;
case GLIBTOP_KERN_PROC_PID:
if ((pid_t) arg != pid)
if ((unsigned) arg != pid)
continue;
break;
case GLIBTOP_KERN_PROC_UID:
@@ -144,9 +144,9 @@ glibtop_get_proclist_p (glibtop *server, glibtop_proclist *buf,
g_free (pinfo);
buf->flags = _glibtop_sysdeps_proclist;
buf->size = sizeof (pid_t);
buf->size = sizeof (unsigned);
buf->number = pids->len;
buf->total = buf->number * buf->size;
return (pid_t *) g_array_free (pids, FALSE);
return (unsigned *) g_array_free (pids, FALSE);
}

View File

@@ -1,6 +1,5 @@
/* Copyright (C) 1998-99 Martin Baulig
Copyright (C) 2004 Nicol<6F>s Lichtmaier
Copyright (C) 2007 Joe Marcus Clarke
This file is part of LibGTop 1.0.
Modified by Nicol<6F>s Lichtmaier to give a process open files.
@@ -27,11 +26,8 @@
#include <glibtop.h>
#include <glibtop/error.h>
#include <glibtop/procopenfiles.h>
#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
#include "glibtop_private.h"
#include <glibtop_suid.h>
static const unsigned long _glibtop_sysdeps_proc_open_files =
(1L << GLIBTOP_PROC_OPEN_FILES_NUMBER)|
@@ -46,139 +42,10 @@ _glibtop_init_proc_open_files_s (glibtop *server)
server->sysdeps.proc_open_files = _glibtop_sysdeps_proc_open_files;
}
static GArray *
parse_output(const char *output) {
GArray *entries;
char **lines;
char *ftype = NULL;
char *fname = NULL;
guint i;
guint len;
int fd = -1;
entries = g_array_new(FALSE, FALSE, sizeof(glibtop_open_files_entry));
lines = g_strsplit(output, "\n", 0);
len = g_strv_length(lines);
for (i = 0; i < len && lines[i]; i++) {
glibtop_open_files_entry entry = {0};
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")) {
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
continue;
entry.fd = fd;
fd = -1;
ftype = NULL;
fname = NULL;
g_array_append_val(entries, entry);
}
g_strfreev(lines);
return entries;
}
/* XXX Unimplemented on FreeBSD */
glibtop_open_files_entry *
glibtop_get_proc_open_files_s (glibtop *server, glibtop_proc_open_files *buf, pid_t pid)
{
char *output;
GArray *entries;
memset(buf, 0, sizeof (glibtop_proc_open_files));
output = execute_lsof(pid);
if (output == NULL) return NULL;
entries = parse_output(output);
g_free(output);
buf->flags = _glibtop_sysdeps_proc_open_files;
buf->number = entries->len;
buf->size = sizeof(glibtop_open_files_entry);
buf->total = buf->number * buf->size;
return (glibtop_open_files_entry*)g_array_free(entries, FALSE);
return NULL;
}

View File

@@ -1,121 +0,0 @@
/* Copyright (C) 2007 Joe Marcus Clarke
This file is part of LibGTop 2.
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/procwd.h>
#include <glibtop/error.h>
#include <glibtop_private.h>
#include <sys/types.h>
#include <sys/param.h>
#include <string.h>
static const unsigned long _glibtop_sysdeps_proc_wd =
(1 << GLIBTOP_PROC_WD_EXE) |
(1 << GLIBTOP_PROC_WD_ROOT) |
(1 << GLIBTOP_PROC_WD_NUMBER);
void
_glibtop_init_proc_wd_s(glibtop *server)
{
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**
glibtop_get_proc_wd_s(glibtop *server, glibtop_proc_wd *buf, pid_t pid)
{
char path[MAXPATHLEN];
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;
}

View File

@@ -1,6 +1,6 @@
INCLUDES = @INCLUDES@
noinst_LTLIBRARIES = libgtop_sysdeps-2.0.la
noinst_LTLIBRARIES = libgtop_sysdeps-2.0.la libgtop_sysdeps_suid-2.0.la
libgtop_sysdeps_2_0_la_SOURCES = open.c close.c cpu.c mem.c swap.c \
uptime.c loadavg.c shm_limits.c msg_limits.c \
@@ -18,3 +18,7 @@ libgtopinclude_HEADERS = glibtop_server.h glibtop_machine.h
libgtopincludedir = $(includedir)/libgtop-2.0
noinst_HEADERS = glibtop_private.h
libgtop_sysdeps_suid_2_0_la_SOURCES = suid.c
libgtop_sysdeps_suid_2_0_la_LDFLAGS = $(LT_VERSION_INFO)

94
sysdeps/linux/suid.c Normal file
View File

@@ -0,0 +1,94 @@
/* 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/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)
{
#ifdef DEBUG
fprintf (stderr, "DEBUG (%d): glibtop_open_p ()\n", getpid ());
#endif
#if 0
/* !!! 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 = __FreeBSD_version;
/* 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);
#endif
/* !!! 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. */
}