So the question still stands - how do you use define-foreign-enum when
the enum doesn't have a name, is only typedef'd?

---------- Forwarded message ----------
From: Jeremy Sydik <[EMAIL PROTECTED]>
Date: Dec 12, 2007 12:50 AM
Subject: Re: [Chicken-users] define-foreign-enum with a typedef
To: Shawn Rutledge <[EMAIL PROTECTED]>


Alright, looking at the code I've worked on and the dbus code, I'm
seeing that this works:

typedef enum _DBusBusType
{
  DBUS_BUS_SESSION,    /**< The login session bus */
  DBUS_BUS_SYSTEM,     /**< The systemwide bus */
  DBUS_BUS_STARTER     /**< The bus that started us, if any */
} DBusBusType;

(define-foreign-enum (dbus:bus (enum "_DBusBusType"))
         (dbus:session-bus DBUS_BUS_SESSION)
         (dbus:system-bus DBUS_BUS_SYSTEM)
         (dbus:starter-bus DBUS_BUS_STARTER) )

gets rid of the incomplete type problem.  dbus.h doesn't have the
_DBusBusType declaration
though, so I'll have to leave it to someone else to clarify the proper
solution

--Jeremy



On Dec 12, 2007, at 1:00 AM, Shawn Rutledge wrote:

> Of course BTW I didn't expect it to do anything yet, just compile...
>
> On Dec 11, 2007 11:56 PM, Shawn Rutledge
> <[EMAIL PROTECTED]> wrote:
>> OK, I'll attach the whole thing; still very small.
>>
>> Thanks for your help.  I'm probably being stupid about something.
>>
>>
>> On Dec 11, 2007 10:49 PM, Jeremy Sydik <[EMAIL PROTECTED]> wrote:
>>> Hmmm... without a bigger code snip, it's hard to say for certain,
>>> but I
>>> would guess
>>> that somewhere you're declaring a foreign with the C name instead
>>> of the
>>> Scheme one.  Something like
>>>
>>> ;; Incorrect
>>> (define dbus:foo
>>> (foreign-lambda unsigned-int
>>> DBusBusType))
>>>
>>> instead of
>>>
>>> ;; Correct
>>> (define dbus:foo
>>> (foreign-lambda unsigned-int
>>> dbus:bus))
>>>
>>>
>>> As another possibiility, make sure you're quoting the symbols when
>>> you use
>>> them
>>> -- this one bit me a few times.
>>>
>>> --Jeremy
>>>
>>>
>>> On Dec 11, 2007, at 11:37 PM, Shawn Rutledge wrote:
>>> On Dec 11, 2007 10:27 PM, Jeremy Sydik <[EMAIL PROTECTED]> wrote:
>>> It seems to work for me:
>>>
>>> (pp (dbus:bus->number 'dbus:session-bus))
>>> (pp (number->dbus:bus 1))
>>>
>>> -->
>>>
>>> 0
>>> dbus:system-bus
>>>
>>> How is it failing for you?
>>>
>>> [proton][10:27:21 PM] make
>>> csc -dynamic -I/usr/include/dbus-1.0/ -I/usr/lib/dbus-1.0/include -o
>>> dbus-egg.so dbus.scm -ldbus-1
>>> dbus-egg.c: In function `stub25':
>>> dbus-egg.c:43: error: variable `t0' has initializer but incomplete
>>> type
>>> dbus-egg.c:43: error: conversion to incomplete type
>>> dbus-egg.c:43: error: storage size of 't0' isn't known
>>> *** Shell command terminated with exit status 1: gcc dbus-egg.c -o
>>> dbus-egg.o -c -fno-strict-aliasing -DHAVE_CHICKEN_CONFIG_H -Os
>>> -fomit-frame-pointer -fPIC -DPIC -DC_SHARED -I /usr/local/include
>>> -I/usr/include/dbus-1.0/ -I/usr/lib/dbus-1.0/include
>>> make: *** [dbus-egg.so] Error 1
>>>
>>> Line 43 is:
>>>
>>> enum DBusBusType t0=(enum DBusBusType )C_num_to_int(C_a0);
>>>
>>>
>>


_______________________________________________
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to