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