Hi Alex,

> Hi Jon,
>
> so the only remaining issue with eum64 is currently the fact that
> fcntl() gives a runtime error on the Mac:
>
>> MacBook-Air:picoLispEmu jkleiser$ ./pil +
>> [/Users/jkleiser/.pil/history:1] File lock: Invalid argument
>
> This happens when it tries to lock the history file of the line editor
> in debug mode. But it will probably also happen in other cases where
> files need to be locked (e.g. in the database).
>
>
> The corresponding source is line 28 of "src64/io.l":
>
>    (code 'lockFileAC)
>       st2 (Flock)  # 'l_type'
>       ld (Flock L_START) 0  # Start position ('l_whence' is SEEK_SET)
>       shr A 16  # Get length
>       ld (Flock L_LEN) A  # Length
>       do
>          cc fcntl(C F_SETLKW Flock)  # Try to lock
>
> This boils down to (line 19477 of "src64/emu.base.c"):
>
>           // lockFileAC:
>    2644,  //   18454: st2 (Flock)
>    2645,  //   18455: ld (Flock . 4) 0
>    2646,  //   18456: shr A 16
>    2647,  //   18457: ld (Flock . 12) A
>    2650,  //   18458: cc fcntl (C 14 Flock)
>
> The '14' here is the value of F_SETLKW on x86-32 Debian. It is system
> dependent, and is perhaps different on the Mac.

Yes, this is from my Mac's ...Headers/sys/fcntl.h:

#define F_SETLKW        9               /* F_SETLK; wait if blocked */

Does this "9" explain our fcntl() problem?

/Jon

> The last line results in the call (line 39073):
>
>    case 2650:  // cc fcntl (C 14 Flock)
>       A.l = (uint32_t)fcntl((int)C.n, 14, (int)((uint64_t)(unsigned
> long)((uint8_t*)Data+7844)));
>       break;
>
> So either the value '14' is wrong here, or the whole call to fcntl().
>
> The value of F_SETLKW is taken from the standard output of the command
> 'src64/sysdefs', which is compiled in the build process on the host
> system.
>
>
> Anybody has an idea what is wrong? Any Mac programmer awake?
>
> Cheers,
> - Alex


-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe

Reply via email to