Selaa lähdekoodia

* pathname functions

git-svn-id: trunk@17692 -
marco 14 vuotta sitten
vanhempi
commit
964597ad6a
1 muutettua tiedostoa jossa 36 lisäystä ja 1 poistoa
  1. 36 1
      rtl/freebsd/freebsd.pas

+ 36 - 1
rtl/freebsd/freebsd.pas

@@ -202,9 +202,14 @@ Const
  MAP_NOSYNC       = $0800; { page to but do not sync underlying file}
  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
 
-Uses
+Uses Sysctl,
 {$ifndef FPC_USE_LIBC}  SysCall; {$else} InitC; {$endif}
 
 {$IFNDEF FPC_USE_LIBC}
@@ -304,4 +309,34 @@ begin
 end;
 {$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.