lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Tue, Nov 15, 2011 at 8:25 AM, Duncan Cross <duncan.cross@gmail.com> wrote:
> On Tue, Nov 15, 2011 at 5:15 AM, James McKaskill <james@foobar.co.nz> wrote:
>>
>> On Nov 14, 2011, at 19:30 , Duncan Cross wrote:
>>>
>>> This is fantastic news! Thanks so much for your work, and thanks too
>>> to the anonymous sponsor.
>>>
>>> One thing - I'm not certain this is related to the addition of
>>> callbacks, but I was just experimenting with Win32 calls and found
>>> that GetLastError() seems to return the wrong value (127,
>>> ERROR_PROC_NOT_FOUND) the first time it's called. This is a minimal
>>> test case:
>>>
>>>  local ffi = require("ffi")
>>>
>>>  ffi.cdef [[
>>>  uint32_t GetLastError();
>>>  void SetLastError(uint32_t code);
>>>  ]]
>>>
>>>  ffi.C.SetLastError(0)
>>>  print(ffi.C.GetLastError()) -- 127
>>>  ffi.C.SetLastError(0)
>>>  print(ffi.C.GetLastError()) -- 0
>>>
>>> (I'm explicitly setting the error here, but I discovered it because it
>>> was hiding a parameter error while I was experimenting with trying to
>>> call RegisterClassExA().)
>>>
>>> -Duncan
>>>
>>
>> I would not suggest trying to get errors using Get/SetLastError as they will be invalidated by the vm. If you really want the error use ffi.errno().
>>
>> -- James
>>
>>
>
> It was specifically addressed before that it should work, and is not
> the same thing as errno:
>
> http://lua-users.org/lists/lua-l/2011-05/msg00219.html
>
> "I've fixed this in git HEAD. LuaJIT now preserves errno across hooks,
> memory allocations, invocations of the JIT compiler and other internal
> VM activity. Ditto for GetLastError() on Windows.
>
> (...)
>
> On Windows you need to declare and call GetLastError() yourself (note:
> this does _not_ hold the same value as errno)."
>
> -Duncan
>

It's also mentioned at the end of the documentation for ffi.errno():

http://luajit.org/ext_ffi_api.html#ffi_errno

-Duncan