On Tue, Dec 15, 2009 at 6:12 PM, Nikolaus Rath <nikol...@rath.org> wrote:
>> Can you create a small example, which reproduce the problem and send it to 
>> me?
>
> The attached file should reproduce the problem, but it needs the fuse
> headers to be installed (Debian/Ubuntu: libfuse-dev). Let me know if
> you don't have them/don't want to install them, then I'll come up with
> my own header instead.

Okey. That helped. The problem was in pygccxml - it didn't calculate
right a struct dependencies in case of variables. To be more specific,
fuse structs contains variables, which are pointers to functions and
pygccxml failed in this case.

I committed the fix. You will need to update pygccxml and Py++ projects.

I also attached the generated file.

-- 
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/
# This file has been generated by Py++.

import ctypes

import ctypes_utils

libfuse_lib = ctypes.CDLL( r"libfuse.so" )

libfuse_lib.undecorated_names = {#mapping between decorated and undecorated names
    "extern int fuse_session_loop_mt(fuse_session * se) [free function]" : "fuse_session_loop_mt", 
    "extern int fuse_reply_statfs(fuse_req_t req, statvfs const * stbuf) [free function]" : "fuse_reply_statfs", 
    "extern int fuse_reply_iov(fuse_req_t req, iovec const * iov, int count) [free function]" : "fuse_reply_iov", 
    "extern void fuse_opt_free_args(fuse_args * args) [free function]" : "fuse_opt_free_args", 
    "extern void fuse_reply_none(fuse_req_t req) [free function]" : "fuse_reply_none", 
    "extern int fuse_reply_write(fuse_req_t req, size_t count) [free function]" : "fuse_reply_write", 
    "extern int fuse_reply_err(fuse_req_t req, int err) [free function]" : "fuse_reply_err", 
    "extern fuse_session * fuse_lowlevel_new(fuse_args * args, fuse_lowlevel_ops const * op, size_t op_size, void * userdata) [free function]" : "fuse_lowlevel_new", 
    "extern int fuse_reply_readlink(fuse_req_t req, char const * link) [free function]" : "fuse_reply_readlink", 
    "extern int fuse_opt_add_arg(fuse_args * args, char const * arg) [free function]" : "fuse_opt_add_arg", 
    "extern int fuse_req_interrupted(fuse_req_t req) [free function]" : "fuse_req_interrupted", 
    "extern void fuse_unmount(char const * mountpoint, fuse_chan * ch) [free function]" : "fuse_unmount", 
    "extern void fuse_session_remove_chan(fuse_chan * ch) [free function]" : "fuse_session_remove_chan", 
    "extern fuse_session * fuse_session_new(fuse_session_ops * op, void * data) [free function]" : "fuse_session_new", 
    "extern int fuse_chan_recv(fuse_chan * * ch, char * buf, size_t size) [free function]" : "fuse_chan_recv", 
    "extern size_t fuse_chan_bufsize(fuse_chan * ch) [free function]" : "fuse_chan_bufsize", 
    "extern int fuse_chan_fd(fuse_chan * ch) [free function]" : "fuse_chan_fd", 
    "extern void fuse_session_process(fuse_session * se, char const * buf, size_t len, fuse_chan * ch) [free function]" : "fuse_session_process", 
    "extern void fuse_session_add_chan(fuse_session * se, fuse_chan * ch) [free function]" : "fuse_session_add_chan", 
    "extern int fuse_session_loop(fuse_session * se) [free function]" : "fuse_session_loop", 
    "extern fuse_chan * fuse_mount(char const * mountpoint, fuse_args * args) [free function]" : "fuse_mount", 
    "extern int fuse_session_exited(fuse_session * se) [free function]" : "fuse_session_exited", 
    "extern void fuse_req_interrupt_func(fuse_req_t req, fuse_interrupt_func_t func, void * data) [free function]" : "fuse_req_interrupt_func", 
    "extern void fuse_remove_signal_handlers(fuse_session * se) [free function]" : "fuse_remove_signal_handlers", 
    "extern fuse_session * fuse_chan_session(fuse_chan * ch) [free function]" : "fuse_chan_session", 
    "extern int fuse_opt_add_opt(char * * opts, char const * opt) [free function]" : "fuse_opt_add_opt", 
    "extern int fuse_opt_insert_arg(fuse_args * args, int pos, char const * arg) [free function]" : "fuse_opt_insert_arg", 
    "extern int fuse_parse_cmdline(fuse_args * args, char * * mountpoint, int * multithreaded, int * foreground) [free function]" : "fuse_parse_cmdline", 
    "extern int fuse_reply_xattr(fuse_req_t req, size_t count) [free function]" : "fuse_reply_xattr", 
    "extern int fuse_reply_lock(fuse_req_t req, flock * lock) [free function]" : "fuse_reply_lock", 
    "extern void * fuse_req_userdata(fuse_req_t req) [free function]" : "fuse_req_userdata", 
    "extern int fuse_opt_parse(fuse_args * args, void * data, fuse_opt const * opts, fuse_opt_proc_t proc) [free function]" : "fuse_opt_parse", 
    "extern int fuse_lowlevel_is_lib_option(char const * opt) [free function]" : "fuse_lowlevel_is_lib_option", 
    "extern int fuse_reply_buf(fuse_req_t req, char const * buf, size_t size) [free function]" : "fuse_reply_buf", 
    "extern void * fuse_chan_data(fuse_chan * ch) [free function]" : "fuse_chan_data", 
    "extern int fuse_chan_send(fuse_chan * ch, iovec const * iov, size_t count) [free function]" : "fuse_chan_send", 
    "extern int fuse_reply_entry(fuse_req_t req, fuse_entry_param const * e) [free function]" : "fuse_reply_entry", 
    "extern void fuse_session_exit(fuse_session * se) [free function]" : "fuse_session_exit", 
    "extern int fuse_reply_attr(fuse_req_t req, stat const * attr, double attr_timeout) [free function]" : "fuse_reply_attr", 
    "extern void fuse_session_reset(fuse_session * se) [free function]" : "fuse_session_reset", 
    "extern int fuse_reply_create(fuse_req_t req, fuse_entry_param const * e, fuse_file_info const * fi) [free function]" : "fuse_reply_create", 
    "extern int fuse_reply_open(fuse_req_t req, fuse_file_info const * fi) [free function]" : "fuse_reply_open", 
    "extern size_t fuse_add_direntry(fuse_req_t req, char * buf, size_t bufsize, char const * name, stat const * stbuf, off_t off) [free function]" : "fuse_add_direntry", 
    "extern void fuse_session_destroy(fuse_session * se) [free function]" : "fuse_session_destroy", 
    "extern int fuse_set_signal_handlers(fuse_session * se) [free function]" : "fuse_set_signal_handlers", 
    "extern int fuse_opt_match(fuse_opt const * opts, char const * opt) [free function]" : "fuse_opt_match", 
    "extern void fuse_chan_destroy(fuse_chan * ch) [free function]" : "fuse_chan_destroy", 
    "extern int fuse_daemonize(int foreground) [free function]" : "fuse_daemonize", 
    "extern fuse_chan * fuse_session_next_chan(fuse_session * se, fuse_chan * ch) [free function]" : "fuse_session_next_chan", 
    "extern int fuse_version() [free function]" : "fuse_version", 
    "extern fuse_ctx const * fuse_req_ctx(fuse_req_t req) [free function]" : "fuse_req_ctx", 
    "fuse_session_loop_mt" : "extern int fuse_session_loop_mt(fuse_session * se) [free function]", 
    "fuse_reply_statfs" : "extern int fuse_reply_statfs(fuse_req_t req, statvfs const * stbuf) [free function]", 
    "fuse_reply_iov" : "extern int fuse_reply_iov(fuse_req_t req, iovec const * iov, int count) [free function]", 
    "fuse_opt_free_args" : "extern void fuse_opt_free_args(fuse_args * args) [free function]", 
    "fuse_reply_none" : "extern void fuse_reply_none(fuse_req_t req) [free function]", 
    "fuse_reply_write" : "extern int fuse_reply_write(fuse_req_t req, size_t count) [free function]", 
    "fuse_reply_err" : "extern int fuse_reply_err(fuse_req_t req, int err) [free function]", 
    "fuse_lowlevel_new" : "extern fuse_session * fuse_lowlevel_new(fuse_args * args, fuse_lowlevel_ops const * op, size_t op_size, void * userdata) [free function]", 
    "fuse_reply_readlink" : "extern int fuse_reply_readlink(fuse_req_t req, char const * link) [free function]", 
    "fuse_opt_add_arg" : "extern int fuse_opt_add_arg(fuse_args * args, char const * arg) [free function]", 
    "fuse_req_interrupted" : "extern int fuse_req_interrupted(fuse_req_t req) [free function]", 
    "fuse_unmount" : "extern void fuse_unmount(char const * mountpoint, fuse_chan * ch) [free function]", 
    "fuse_session_remove_chan" : "extern void fuse_session_remove_chan(fuse_chan * ch) [free function]", 
    "fuse_session_new" : "extern fuse_session * fuse_session_new(fuse_session_ops * op, void * data) [free function]", 
    "fuse_chan_recv" : "extern int fuse_chan_recv(fuse_chan * * ch, char * buf, size_t size) [free function]", 
    "fuse_chan_bufsize" : "extern size_t fuse_chan_bufsize(fuse_chan * ch) [free function]", 
    "fuse_chan_fd" : "extern int fuse_chan_fd(fuse_chan * ch) [free function]", 
    "fuse_session_process" : "extern void fuse_session_process(fuse_session * se, char const * buf, size_t len, fuse_chan * ch) [free function]", 
    "fuse_session_add_chan" : "extern void fuse_session_add_chan(fuse_session * se, fuse_chan * ch) [free function]", 
    "fuse_session_loop" : "extern int fuse_session_loop(fuse_session * se) [free function]", 
    "fuse_mount" : "extern fuse_chan * fuse_mount(char const * mountpoint, fuse_args * args) [free function]", 
    "fuse_session_exited" : "extern int fuse_session_exited(fuse_session * se) [free function]", 
    "fuse_req_interrupt_func" : "extern void fuse_req_interrupt_func(fuse_req_t req, fuse_interrupt_func_t func, void * data) [free function]", 
    "fuse_remove_signal_handlers" : "extern void fuse_remove_signal_handlers(fuse_session * se) [free function]", 
    "fuse_chan_session" : "extern fuse_session * fuse_chan_session(fuse_chan * ch) [free function]", 
    "fuse_opt_add_opt" : "extern int fuse_opt_add_opt(char * * opts, char const * opt) [free function]", 
    "fuse_opt_insert_arg" : "extern int fuse_opt_insert_arg(fuse_args * args, int pos, char const * arg) [free function]", 
    "fuse_parse_cmdline" : "extern int fuse_parse_cmdline(fuse_args * args, char * * mountpoint, int * multithreaded, int * foreground) [free function]", 
    "fuse_reply_xattr" : "extern int fuse_reply_xattr(fuse_req_t req, size_t count) [free function]", 
    "fuse_reply_lock" : "extern int fuse_reply_lock(fuse_req_t req, flock * lock) [free function]", 
    "fuse_req_userdata" : "extern void * fuse_req_userdata(fuse_req_t req) [free function]", 
    "fuse_opt_parse" : "extern int fuse_opt_parse(fuse_args * args, void * data, fuse_opt const * opts, fuse_opt_proc_t proc) [free function]", 
    "fuse_lowlevel_is_lib_option" : "extern int fuse_lowlevel_is_lib_option(char const * opt) [free function]", 
    "fuse_reply_buf" : "extern int fuse_reply_buf(fuse_req_t req, char const * buf, size_t size) [free function]", 
    "fuse_chan_data" : "extern void * fuse_chan_data(fuse_chan * ch) [free function]", 
    "fuse_chan_send" : "extern int fuse_chan_send(fuse_chan * ch, iovec const * iov, size_t count) [free function]", 
    "fuse_reply_entry" : "extern int fuse_reply_entry(fuse_req_t req, fuse_entry_param const * e) [free function]", 
    "fuse_session_exit" : "extern void fuse_session_exit(fuse_session * se) [free function]", 
    "fuse_reply_attr" : "extern int fuse_reply_attr(fuse_req_t req, stat const * attr, double attr_timeout) [free function]", 
    "fuse_session_reset" : "extern void fuse_session_reset(fuse_session * se) [free function]", 
    "fuse_reply_create" : "extern int fuse_reply_create(fuse_req_t req, fuse_entry_param const * e, fuse_file_info const * fi) [free function]", 
    "fuse_reply_open" : "extern int fuse_reply_open(fuse_req_t req, fuse_file_info const * fi) [free function]", 
    "fuse_add_direntry" : "extern size_t fuse_add_direntry(fuse_req_t req, char * buf, size_t bufsize, char const * name, stat const * stbuf, off_t off) [free function]", 
    "fuse_session_destroy" : "extern void fuse_session_destroy(fuse_session * se) [free function]", 
    "fuse_set_signal_handlers" : "extern int fuse_set_signal_handlers(fuse_session * se) [free function]", 
    "fuse_opt_match" : "extern int fuse_opt_match(fuse_opt const * opts, char const * opt) [free function]", 
    "fuse_chan_destroy" : "extern void fuse_chan_destroy(fuse_chan * ch) [free function]", 
    "fuse_daemonize" : "extern int fuse_daemonize(int foreground) [free function]", 
    "fuse_session_next_chan" : "extern fuse_chan * fuse_session_next_chan(fuse_session * se, fuse_chan * ch) [free function]", 
    "fuse_version" : "extern int fuse_version() [free function]", 
    "fuse_req_ctx" : "extern fuse_ctx const * fuse_req_ctx(fuse_req_t req) [free function]", 
}

class flock(ctypes.Structure):
    """class flock"""

class fuse_conn_info(ctypes.Structure):
    """class fuse_conn_info"""

class fuse_file_info(ctypes.Structure):
    """class fuse_file_info"""

class fuse_lowlevel_ops(ctypes.Structure):
    """class fuse_lowlevel_ops"""

class timespec(ctypes.Structure):
    """class timespec"""

class stat(ctypes.Structure):
    """class stat"""

class fuse_req(ctypes.Structure):
    """class declaration fuse_req"""
    _fields_  = []

flock._fields_ = [ #class flock
    ("l_type", ctypes.c_short),
    ("l_whence", ctypes.c_short),
    ("l_start", ctypes.c_longlong),
    ("l_len", ctypes.c_longlong),
    ("l_pid", ctypes.c_int),
]

fuse_conn_info._fields_ = [ #class fuse_conn_info
    ("proto_major", ctypes.c_uint),
    ("proto_minor", ctypes.c_uint),
    ("async_read", ctypes.c_uint),
    ("max_write", ctypes.c_uint),
    ("max_readahead", ctypes.c_uint),
    ("reserved", ( ctypes.c_uint * 27 )),
]

fuse_file_info._fields_ = [ #class fuse_file_info
    ("flags", ctypes.c_int),
    ("fh_old", ctypes.c_ulong),
    ("writepage", ctypes.c_int),
    ("direct_io", ctypes.c_uint),
    ("keep_cache", ctypes.c_uint),
    ("flush", ctypes.c_uint),
    ("padding", ctypes.c_uint),
    ("fh", ctypes.c_ulonglong),
    ("lock_owner", ctypes.c_ulonglong),
]

fuse_lowlevel_ops._fields_ = [ #class fuse_lowlevel_ops
    ("init", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.c_void_p, ctypes.POINTER( fuse_conn_info ) ) )),
    ("destroy", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.c_void_p ) )),
    ("lookup", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_char_p ) )),
    ("forget", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_ulong ) )),
    ("getattr", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.POINTER( fuse_file_info ) ) )),
    ("setattr", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.POINTER( stat ), ctypes.c_int, ctypes.POINTER( fuse_file_info ) ) )),
    ("readlink", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong ) )),
    ("mknod", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_char_p, ctypes.c_uint, ctypes.c_ulonglong ) )),
    ("mkdir", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_char_p, ctypes.c_uint ) )),
    ("unlink", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_char_p ) )),
    ("rmdir", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_char_p ) )),
    ("symlink", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_char_p, ctypes.c_ulong, ctypes.c_char_p ) )),
    ("rename", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_char_p, ctypes.c_ulong, ctypes.c_char_p ) )),
    ("link", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_ulong, ctypes.c_char_p ) )),
    ("open", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.POINTER( fuse_file_info ) ) )),
    ("read", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_uint, ctypes.c_longlong, ctypes.POINTER( fuse_file_info ) ) )),
    ("write", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_char_p, ctypes.c_uint, ctypes.c_longlong, ctypes.POINTER( fuse_file_info ) ) )),
    ("flush", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.POINTER( fuse_file_info ) ) )),
    ("release", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.POINTER( fuse_file_info ) ) )),
    ("fsync", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_int, ctypes.POINTER( fuse_file_info ) ) )),
    ("opendir", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.POINTER( fuse_file_info ) ) )),
    ("readdir", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_uint, ctypes.c_longlong, ctypes.POINTER( fuse_file_info ) ) )),
    ("releasedir", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.POINTER( fuse_file_info ) ) )),
    ("fsyncdir", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_int, ctypes.POINTER( fuse_file_info ) ) )),
    ("statfs", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong ) )),
    ("setxattr", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_uint, ctypes.c_int ) )),
    ("getxattr", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_char_p, ctypes.c_uint ) )),
    ("listxattr", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_uint ) )),
    ("removexattr", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_char_p ) )),
    ("access", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_int ) )),
    ("create", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_char_p, ctypes.c_uint, ctypes.POINTER( fuse_file_info ) ) )),
    ("getlk", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.POINTER( fuse_file_info ), ctypes.POINTER( flock ) ) )),
    ("setlk", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.POINTER( fuse_file_info ), ctypes.POINTER( flock ), ctypes.c_int ) )),
    ("bmap", ctypes.POINTER( ctypes.CFUNCTYPE( None, ctypes.POINTER( fuse_req ), ctypes.c_ulong, ctypes.c_uint, ctypes.c_ulonglong ) )),
]

timespec._fields_ = [ #class timespec
    ("tv_sec", ctypes.c_long),
    ("tv_nsec", ctypes.c_long),
]

stat._fields_ = [ #class stat
    ("st_dev", ctypes.c_ulonglong),
    ("__pad1", ctypes.c_ushort),
    ("__st_ino", ctypes.c_ulong),
    ("st_mode", ctypes.c_uint),
    ("st_nlink", ctypes.c_uint),
    ("st_uid", ctypes.c_uint),
    ("st_gid", ctypes.c_uint),
    ("st_rdev", ctypes.c_ulonglong),
    ("__pad2", ctypes.c_ushort),
    ("st_size", ctypes.c_longlong),
    ("st_blksize", ctypes.c_long),
    ("st_blocks", ctypes.c_longlong),
    ("st_atim", timespec),
    ("st_mtim", timespec),
    ("st_ctim", timespec),
    ("st_ino", ctypes.c_ulonglong),
]
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to