mirror of https://github.com/red-prig/fpPS4.git
60 lines
994 B
Plaintext
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.
|
|
|