On Thu, 26 Nov 2009, bill robertson wrote:

Hi,

> There is a problem with fopen() and I suspect fcreate(), etc in
> philes.c. In philes.c, you will notice that hb_fsOpen is cast to
> HB_NHANDLE which is typedef as a pointer to unsigned int in
> hbdefs.h. This means that the F_ERROR (-1) is made positive (2^32-1
> or +4,294,967,295) so you have an invalid file pointer if a file
> doesn't exist.
> For example this pgm returns invalid handle 2^32-1
> //-----------------------------------------
> function main()
> ? "File Handle:", fopen("Nonsense.file")
> return 0

You are right and it's side effect of hack I added here:

2009-11-14 04:21 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
  * harbour/include/hbdefs.h
    * added small hack to eliminate negative handles from 32 bit windows
      builds. Please remember that this trick can work only in 32 bit
      windows version. In 64 bit ones valid handle after casting to integer
      value can give negative 64 bit number so checking for wrong handle
      please compare them with FS_ERROR (-1) instead of using < 0 or sth
      like that. Otherwise your code may not work properly with some new
      windows versions or may even suddenly stop to work with existing
      ones even if they worked for some time without problems.

I'll remove it soon.
Thank you for the information.
To all users. Please remember that on some platforms negative handles
can be valid and only -1 indicates wrong handle (0 is valid handle on
all supported platforms).

best regards,
Przemek
_______________________________________________
Harbour mailing list (attachment size limit: 40KB)
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to