On 31 Oct 2012, at 14:35, Giuliano Colla wrote:

Jonas Maebe ha scritto:


FPC 2.6 added support for file locking on Unix platforms. You probably should use

  USBOut := FileOpen(UsbDev,fmOpenWrite or fmShareDenyNone);

Otherwise FileOpen will try to get an exclusive (write) lock on that device, which may well not be possible.

Understood, thank you. But shouldn't it be the other way around, i.e. one should explicitly request an exclusive lock?

No, that is how the behaviour of this function is defined. Looking at the documentation, is seems that file locking for Unix was already implemented in FPC 2.4.0 though, so maybe that won't be the problem after all.

Moreover I don't understand why the call returns a -1, meaning that the Open failed, without rising an exception.

Does FileOpen raise an exception in Delphi when locking fails?


I have no idea,

It's always a good idea to look at the documentation first. At least the FPC documentation clearly states that it will return -1 on error: http://www.freepascal.org/docs-html/rtl/sysutils/fileopen.html

but if it doesn't it's a Delphi bug, I'd say. What are exceptions there for, if not for telling you that what you requested cannot be done?

There are multiple ways to indicate a failure. Exceptions are a very expensive way for doing so, and generally should only be used in cases that are truly exceptional and/or indicate a fatal error. In other cases, using a special return value is generally much more appropriate.


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

Reply via email to