hsc: Passing -1 as CString/Ptr a?
Volker Stolz
vs@foldr.org
Thu, 22 Nov 2001 13:57:32 +0100
Hi, I want to invoke the C-function 'dlsym', which has three
possible options for a parameter of type (void*):
- NULL
- void* to a string, i.e. CString in Haskell
- RTLD_NEXT = (void *)(-1)
The first two ones are no problem, I can use a CString and
'nullPtr'. For the last one, I have the problem that in
the "Next"-case I cannot write
pack :: Flag -> CString
pack Null = nullPtr
pack Name str = str
pack Next = #const RTLD_NEXT
because there's no way to cast Int to a Ptr -- at least I
didn't find any. Unluckily, the C-codes (void *)(-1) even
gets expanded by hsc to the literal "4294967295" which can't be
right either.
So currently I'm facing two possible solutions:
pack Next = nullPtr `plusPtr` 4294967295 (expanded from "... #const RTLD_NEXT")
or
pack Next = nullPtr `plusPtr` (-1) (which is not a good idea since it doesn't
use the C-constant)
"Ptr" is abstract so I cannot create this Ptr myself. Maybe the Ptr-module
just lacks a 'minusOnePtr' similar to 'nullPtr'?
--
Volker Stolz * vs@foldr.org * PGP + S/MIME