Browse Source

--- Merging r17681 into '.':
U rtl/freebsd/sysctlh.inc
--- Merging r17692 into '.':
U rtl/freebsd/freebsd.pas

# revisions: 17681,17692
------------------------------------------------------------------------
r17681 | marco | 2011-06-07 14:22:01 +0200 (Tue, 07 Jun 2011) | 2 lines
Changed paths:
M /trunk/rtl/freebsd/sysctlh.inc

* some more KERN_PROC constants.

------------------------------------------------------------------------
------------------------------------------------------------------------
r17692 | marco | 2011-06-08 12:44:56 +0200 (Wed, 08 Jun 2011) | 2 lines
Changed paths:
M /trunk/rtl/freebsd/freebsd.pas

* pathname functions

------------------------------------------------------------------------

git-svn-id: branches/fixes_2_4@17699 -

marco 14 years ago
parent
commit
7a49367da6
2 changed files with 52 additions and 1 deletions
  1. 36 1
      rtl/freebsd/freebsd.pas
  2. 16 0
      rtl/freebsd/sysctlh.inc

+ 36 - 1
rtl/freebsd/freebsd.pas

@@ -202,9 +202,14 @@ Const
  MAP_NOSYNC       = $0800; { page to but do not sync underlying file}
  MAP_NOSYNC       = $0800; { page to but do not sync underlying file}
  MAP_NOCORE       = $20000;{ dont include these pages in a coredump}
  MAP_NOCORE       = $20000;{ dont include these pages in a coredump}
 
 
+
+function kernproc_getgenvalue(pid:pid_t;kernproc_variable:cint;var s:ansistring):cint;
+function kernproc_getargs(pid:pid_t;var fn:ansistring):cint;
+function kernproc_getpath(pid:pid_t;var fn:ansistring):cint;
+
 implementation
 implementation
 
 
-Uses
+Uses Sysctl,
 {$ifndef FPC_USE_LIBC}  SysCall; {$else} InitC; {$endif}
 {$ifndef FPC_USE_LIBC}  SysCall; {$else} InitC; {$endif}
 
 
 {$IFNDEF FPC_USE_LIBC}
 {$IFNDEF FPC_USE_LIBC}
@@ -304,4 +309,34 @@ begin
 end;
 end;
 {$ENDIF}
 {$ENDIF}
 
 
+function kernproc_getgenvalue(pid:pid_t;kernproc_variable:cint;var s:ansistring):cint;
+
+var mib: array[0..3] of cint;
+    argv_len : size_t;
+    ret:cint;
+Begin
+  mib[0]:=CTL_KERN;
+  mib[1]:=kern_proc;
+  Mib[2]:=kernproc_variable;
+  Mib[3]:=pid;
+  setlength(s,arg_max);
+  argv_len:=ARG_MAX;
+  ret:=fpsysctl(@mib, high(mib)+1, @s[1], @argv_len, NIL, 0);
+  if ret<>-1 then
+    setlength(s,argv_len)
+   else
+    setlength(s,0);
+  kernproc_getgenvalue:=ret;
+end;
+
+function kernproc_getargs(pid:pid_t;var fn:ansistring):cint;
+begin
+  kernproc_getargs:=kernproc_getgenvalue(pid,KERN_PROC_ARGS,fn);
+end;
+
+function kernproc_getpath(pid:pid_t;var fn:ansistring):cint;
+begin
+  kernproc_getpath:=kernproc_getgenvalue(pid,KERN_PROC_PATHNAME,fn);
+end;
+
 end.
 end.

+ 16 - 0
rtl/freebsd/sysctlh.inc

@@ -139,6 +139,22 @@ Const
         KERN_PROC_UID           = 5;    {  by effective uid }
         KERN_PROC_UID           = 5;    {  by effective uid }
         KERN_PROC_RUID          = 6;    {  by real uid }
         KERN_PROC_RUID          = 6;    {  by real uid }
         KERN_PROC_ARGS          = 7;    {  get/set arguments/proctitle }
         KERN_PROC_ARGS          = 7;    {  get/set arguments/proctitle }
+ 	KERN_PROC_PROC          = 8;    {  only return procs }
+        KERN_PROC_SV_NAME       = 9;    {  get syscall vector name }
+        KERN_PROC_RGID          = 10;   {  by real group id }
+        KERN_PROC_GID           = 11;   {  by effective group id }
+        KERN_PROC_PATHNAME      = 12;   {  path to executable }
+        KERN_PROC_OVMMAP        = 13;   {  Old VM map entries for process }
+        KERN_PROC_OFILEDESC     = 14;   {  Old file descriptors for process }
+        KERN_PROC_KSTACK        = 15;   {  Kernel stacks for process }
+        KERN_PROC_INC_THREAD    = $10;  {
+                                         * modifier for pid, pgrp, tty,
+                                         * uid, ruid, gid, rgid and proc
+                                         * This effectively uses 16-31
+                                         }
+        KERN_PROC_VMMAP         = 32;   { VM map entries for process }
+        KERN_PROC_FILEDESC      = 33;   { File descriptors for process }
+        KERN_PROC_GROUPS        = 34;   { process groups }
 
 
 {
 {
  * KERN_IPC identifiers
  * KERN_IPC identifiers