[fpc-pascal] getlastoserror giving wrong value?

Marc Santhoff M.Santhoff at t-online.de
Fri Dec 21 16:10:34 CET 2007


Am Freitag, den 21.12.2007, 13:37 +0100 schrieb Jonas Maebe:
> On 21 Dec 2007, at 06:37, Marc Santhoff wrote:
> 
> > when I try to use getlastoserror something "funny" happens.
> >
> > We're dealing with:
> >
> > $ ll /home/marc/program/Test_C/unreadable/
> > ls: : Permission denied
> >
> > The source:
> >
> >   tmp := aFile^ + '/' + dirrec.Name;
> >   writeln('file: '+ tmp );
> >   n := fpaccess(tmp , R_OK);
> >   writeln(n);
> >   n := getlastoserror;
> >   writeln(n);
> >
> > The output:
> >
> > file: /home/marc/program/Test_C/unreadable/
> > -1
> > -65523
> 
> Regardless of what the real problem is, the above code is wrong:  
> writeln (obviously) also makes use of OS functions to write things  
> out to the screen, and if one of those (temporarily) fails for some  
> reason (e.g., ESysEINTR) then your call to getlastoserror will return  
> the result of that failure. Just like with ioresult, you always have  
> to store the result of getlastoserror immediately in a local variable  
> after the operation you want to check.

I know and the writeln was inserted later to be sure the system call
fails (=-1). If the line is commented out the results are the same in
both cases.

Marc





More information about the fpc-pascal mailing list