On 29 Jun 06, at 0:19, Marc Santhoff wrote:
> Am Donnerstag, den 29.06.2006, 00:04 +0200 schrieb Michael Van Canneyt:
 .
 .
> My approach to detect failing FindFirst/FindNext would be to do
> something like this:
> 
> <--- rtl/unix/sysutils.pp:549 --->
> Function GlobToTSearchRec (Var Info : TSearchRec) : Boolean;
> 
> Var SInfo : Stat;
>     p     : Pglob;
>     GlobSearchRec : PGlobSearchrec;
> 
> begin
>   GlobSearchRec:=Info.FindHandle;
>   P:=GlobSearchRec^.GlobHandle;
>   Result:=P<>Nil;
>   If Result then
>     begin
>     GlobSearchRec^.GlobHandle:=P^.Next;
>     Result:=Fpstat(GlobSearchRec^.Path+StrPas(p^.name),SInfo)>=0;
> +    if NOT Result then
> +      begin
> +        fpseterrno(??? anything "legal" representing the system error);
> +      end;
>     Info.PathOnly:=GlobSearchRec^.Path;
>     If Result then
> </--->
> 
> I'd appreciate hints on doing it this way (getting system error number
> by "fpgetCerrno()"?) or some better technique.
> 
> If the errno variants are not reliable it could be done by
> 
> 1. using an additional out-parameter value
> 2. changing the result from boolean to interger or longint returning the
> error number
> 
> But both methods would break old code.

If I understand it correctly, GlobToTSearchRec is 
an internal function (not available in 
interface), and only used in function DoFind. 
Changing e.g. its return value shouldn't cause 
any harm.

Tomas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to