FPPS4/sys/kern/kern_uuid.pas

60 lines
994 B
Plaintext

unit kern_uuid;
{$mode ObjFPC}{$H+}
{$CALLING SysV_ABI_CDecl}
interface
uses
SysUtils;
type
p_uuid=^t_uuid;
t_uuid=TGuid;
{$IF sizeof(t_uuid)<>16}{$STOP sizeof(t_uuid)<>16}{$ENDIF}
function sys_uuidgen(store:Pointer;count:Integer):Integer;
implementation
uses
errno,
systm;
function kern_uuidgen(store:p_uuid;count:ptrint):p_uuid;
var
n:ptrint;
begin
For n:=0 to count-1 do
begin
CreateGUID(store[n]);
end;
Exit(store);
end;
function sys_uuidgen(store:Pointer;count:Integer):Integer;
var
kstore:p_uuid;
begin
{
* Limit the number of UUIDs that can be created at the same time
* to some arbitrary number. This isn't really necessary, but I
* like to have some sort of upper-bound that's less than 2G :-)
* XXX probably needs to be tunable.
}
if (count < 1) or (count > 2048) then
Exit(EINVAL);
kstore:=AllocMem(count * sizeof(t_uuid));
kern_uuidgen(store, count);
Result:=copyout(kstore, store, count * sizeof(t_uuid));
FreeMem(kstore);
end;
end.