Remove C constructs that are incompatible with C++ from various
OpenSolaris and ZFS header files. These changes are sufficient to allow a C++ program to use the libzfs library. Note: The majority of these files already included 'extern "C"' declarations, so the intention of providing C++ compatibility already existed even if it wasn't provided. cddl/compat/opensolaris/include/assert.h: Wrap our compatibility assert implementation in 'extern "C"'. Since this is a compatibility header I matched the Solaris style of doing this explicitly rather than rely on FreeBSD's __BEGIN/END_DECLS macro. sys/cddl/compat/opensolaris/sys/kstat.h: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/ddt.h: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h: Rename parameters in function declarations that conflict with C++ keywords. This was the solution preferred by members of the Illumos community. sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h: In C, nested structures are visible in the global namespace, but in C++, they take on the namespace of the structure in which they are contained. Flatten nested structure definitions within struct zfs_cmd so these structures are visible in the global namespace when compiled in both languages. Sponsored by: Spectra Logic Corporation
This commit is contained in:
parent
19da774130
commit
1c3bf59584
@ -43,6 +43,10 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
static __inline void
|
||||
__assert(const char *expr, const char *file, int line)
|
||||
{
|
||||
@ -52,4 +56,9 @@ __assert(const char *expr, const char *file, int line)
|
||||
abort();
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !_ASSERT_H_ */
|
||||
|
@ -58,7 +58,7 @@ typedef struct kstat_named {
|
||||
} value;
|
||||
} kstat_named_t;
|
||||
|
||||
kstat_t *kstat_create(char *module, int instance, char *name, char *class,
|
||||
kstat_t *kstat_create(char *module, int instance, char *name, char *cls,
|
||||
uchar_t type, ulong_t ndata, uchar_t flags);
|
||||
void kstat_install(kstat_t *ksp);
|
||||
void kstat_delete(kstat_t *ksp);
|
||||
|
@ -37,8 +37,8 @@ extern "C" {
|
||||
|
||||
typedef struct arc_buf_hdr arc_buf_hdr_t;
|
||||
typedef struct arc_buf arc_buf_t;
|
||||
typedef void arc_done_func_t(zio_t *zio, arc_buf_t *buf, void *private);
|
||||
typedef int arc_evict_func_t(void *private);
|
||||
typedef void arc_done_func_t(zio_t *zio, arc_buf_t *buf, void *priv);
|
||||
typedef int arc_evict_func_t(void *priv);
|
||||
|
||||
/* generic arc_done_func_t's which you can use */
|
||||
arc_done_func_t arc_bcopy_func;
|
||||
@ -103,17 +103,17 @@ int arc_referenced(arc_buf_t *buf);
|
||||
#endif
|
||||
|
||||
int arc_read(zio_t *pio, spa_t *spa, const blkptr_t *bp, arc_buf_t *pbuf,
|
||||
arc_done_func_t *done, void *private, int priority, int zio_flags,
|
||||
arc_done_func_t *done, void *priv, int priority, int zio_flags,
|
||||
uint32_t *arc_flags, const zbookmark_t *zb);
|
||||
int arc_read_nolock(zio_t *pio, spa_t *spa, const blkptr_t *bp,
|
||||
arc_done_func_t *done, void *private, int priority, int flags,
|
||||
arc_done_func_t *done, void *priv, int priority, int flags,
|
||||
uint32_t *arc_flags, const zbookmark_t *zb);
|
||||
zio_t *arc_write(zio_t *pio, spa_t *spa, uint64_t txg,
|
||||
blkptr_t *bp, arc_buf_t *buf, boolean_t l2arc, const zio_prop_t *zp,
|
||||
arc_done_func_t *ready, arc_done_func_t *done, void *private,
|
||||
arc_done_func_t *ready, arc_done_func_t *done, void *priv,
|
||||
int priority, int zio_flags, const zbookmark_t *zb);
|
||||
|
||||
void arc_set_callback(arc_buf_t *buf, arc_evict_func_t *func, void *private);
|
||||
void arc_set_callback(arc_buf_t *buf, arc_evict_func_t *func, void *priv);
|
||||
int arc_buf_evict(arc_buf_t *buf);
|
||||
|
||||
void arc_flush(spa_t *spa);
|
||||
|
@ -169,15 +169,15 @@ typedef struct ddt_ops {
|
||||
#define DDT_NAMELEN 80
|
||||
|
||||
extern void ddt_object_name(ddt_t *ddt, enum ddt_type type,
|
||||
enum ddt_class class, char *name);
|
||||
enum ddt_class cls, char *name);
|
||||
extern int ddt_object_walk(ddt_t *ddt, enum ddt_type type,
|
||||
enum ddt_class class, uint64_t *walk, ddt_entry_t *dde);
|
||||
enum ddt_class cls, uint64_t *walk, ddt_entry_t *dde);
|
||||
extern uint64_t ddt_object_count(ddt_t *ddt, enum ddt_type type,
|
||||
enum ddt_class class);
|
||||
enum ddt_class cls);
|
||||
extern int ddt_object_info(ddt_t *ddt, enum ddt_type type,
|
||||
enum ddt_class class, dmu_object_info_t *);
|
||||
enum ddt_class cls, dmu_object_info_t *);
|
||||
extern boolean_t ddt_object_exists(ddt_t *ddt, enum ddt_type type,
|
||||
enum ddt_class class);
|
||||
enum ddt_class cls);
|
||||
|
||||
extern void ddt_bp_fill(const ddt_phys_t *ddp, blkptr_t *bp,
|
||||
uint64_t txg);
|
||||
@ -235,7 +235,7 @@ extern void ddt_unload(spa_t *spa);
|
||||
extern void ddt_sync(spa_t *spa, uint64_t txg);
|
||||
extern int ddt_walk(spa_t *spa, ddt_bookmark_t *ddb, ddt_entry_t *dde);
|
||||
extern int ddt_object_update(ddt_t *ddt, enum ddt_type type,
|
||||
enum ddt_class class, ddt_entry_t *dde, dmu_tx_t *tx);
|
||||
enum ddt_class cls, ddt_entry_t *dde, dmu_tx_t *tx);
|
||||
|
||||
extern const ddt_ops_t ddt_zap_ops;
|
||||
|
||||
|
@ -126,10 +126,10 @@ void dsl_free(dsl_pool_t *dp, uint64_t txg, const blkptr_t *bpp);
|
||||
void dsl_free_sync(zio_t *pio, dsl_pool_t *dp, uint64_t txg,
|
||||
const blkptr_t *bpp);
|
||||
int dsl_read(zio_t *pio, spa_t *spa, const blkptr_t *bpp, arc_buf_t *pbuf,
|
||||
arc_done_func_t *done, void *private, int priority, int zio_flags,
|
||||
arc_done_func_t *done, void *priv, int priority, int zio_flags,
|
||||
uint32_t *arc_flags, const zbookmark_t *zb);
|
||||
int dsl_read_nolock(zio_t *pio, spa_t *spa, const blkptr_t *bpp,
|
||||
arc_done_func_t *done, void *private, int priority, int zio_flags,
|
||||
arc_done_func_t *done, void *priv, int priority, int zio_flags,
|
||||
uint32_t *arc_flags, const zbookmark_t *zb);
|
||||
void dsl_pool_create_origin(dsl_pool_t *dp, dmu_tx_t *tx);
|
||||
void dsl_pool_upgrade_clones(dsl_pool_t *dp, dmu_tx_t *tx);
|
||||
|
@ -655,7 +655,7 @@ extern void spa_history_log_version(spa_t *spa, history_internal_events_t evt);
|
||||
/* error handling */
|
||||
struct zbookmark;
|
||||
extern void spa_log_error(spa_t *spa, zio_t *zio);
|
||||
extern void zfs_ereport_post(const char *class, spa_t *spa, vdev_t *vd,
|
||||
extern void zfs_ereport_post(const char *cls, spa_t *spa, vdev_t *vd,
|
||||
zio_t *zio, uint64_t stateoroffset, uint64_t length);
|
||||
extern void zfs_post_remove(spa_t *spa, vdev_t *vd);
|
||||
extern void zfs_post_state_change(spa_t *spa, vdev_t *vd);
|
||||
|
@ -115,6 +115,87 @@ typedef enum drr_headertype {
|
||||
/*
|
||||
* zfs ioctl command structure
|
||||
*/
|
||||
struct drr_begin {
|
||||
uint64_t drr_magic;
|
||||
uint64_t drr_versioninfo; /* was drr_version */
|
||||
uint64_t drr_creation_time;
|
||||
dmu_objset_type_t drr_type;
|
||||
uint32_t drr_flags;
|
||||
uint64_t drr_toguid;
|
||||
uint64_t drr_fromguid;
|
||||
char drr_toname[MAXNAMELEN];
|
||||
};
|
||||
|
||||
struct drr_end {
|
||||
zio_cksum_t drr_checksum;
|
||||
uint64_t drr_toguid;
|
||||
};
|
||||
|
||||
struct drr_object {
|
||||
uint64_t drr_object;
|
||||
dmu_object_type_t drr_type;
|
||||
dmu_object_type_t drr_bonustype;
|
||||
uint32_t drr_blksz;
|
||||
uint32_t drr_bonuslen;
|
||||
uint8_t drr_checksumtype;
|
||||
uint8_t drr_compress;
|
||||
uint8_t drr_pad[6];
|
||||
uint64_t drr_toguid;
|
||||
/* bonus content follows */
|
||||
};
|
||||
|
||||
struct drr_freeobjects {
|
||||
uint64_t drr_firstobj;
|
||||
uint64_t drr_numobjs;
|
||||
uint64_t drr_toguid;
|
||||
};
|
||||
|
||||
struct drr_write {
|
||||
uint64_t drr_object;
|
||||
dmu_object_type_t drr_type;
|
||||
uint32_t drr_pad;
|
||||
uint64_t drr_offset;
|
||||
uint64_t drr_length;
|
||||
uint64_t drr_toguid;
|
||||
uint8_t drr_checksumtype;
|
||||
uint8_t drr_checksumflags;
|
||||
uint8_t drr_pad2[6];
|
||||
ddt_key_t drr_key; /* deduplication key */
|
||||
/* content follows */
|
||||
};
|
||||
|
||||
struct drr_free {
|
||||
uint64_t drr_object;
|
||||
uint64_t drr_offset;
|
||||
uint64_t drr_length;
|
||||
uint64_t drr_toguid;
|
||||
};
|
||||
|
||||
struct drr_write_byref {
|
||||
/* where to put the data */
|
||||
uint64_t drr_object;
|
||||
uint64_t drr_offset;
|
||||
uint64_t drr_length;
|
||||
uint64_t drr_toguid;
|
||||
/* where to find the prior copy of the data */
|
||||
uint64_t drr_refguid;
|
||||
uint64_t drr_refobject;
|
||||
uint64_t drr_refoffset;
|
||||
/* properties of the data */
|
||||
uint8_t drr_checksumtype;
|
||||
uint8_t drr_checksumflags;
|
||||
uint8_t drr_pad2[6];
|
||||
ddt_key_t drr_key; /* deduplication key */
|
||||
};
|
||||
|
||||
struct drr_spill {
|
||||
uint64_t drr_object;
|
||||
uint64_t drr_length;
|
||||
uint64_t drr_toguid;
|
||||
uint64_t drr_pad[4]; /* needed for crypto */
|
||||
/* spill data follows */
|
||||
};
|
||||
|
||||
typedef struct dmu_replay_record {
|
||||
enum {
|
||||
DRR_BEGIN, DRR_OBJECT, DRR_FREEOBJECTS,
|
||||
@ -123,79 +204,14 @@ typedef struct dmu_replay_record {
|
||||
} drr_type;
|
||||
uint32_t drr_payloadlen;
|
||||
union {
|
||||
struct drr_begin {
|
||||
uint64_t drr_magic;
|
||||
uint64_t drr_versioninfo; /* was drr_version */
|
||||
uint64_t drr_creation_time;
|
||||
dmu_objset_type_t drr_type;
|
||||
uint32_t drr_flags;
|
||||
uint64_t drr_toguid;
|
||||
uint64_t drr_fromguid;
|
||||
char drr_toname[MAXNAMELEN];
|
||||
} drr_begin;
|
||||
struct drr_end {
|
||||
zio_cksum_t drr_checksum;
|
||||
uint64_t drr_toguid;
|
||||
} drr_end;
|
||||
struct drr_object {
|
||||
uint64_t drr_object;
|
||||
dmu_object_type_t drr_type;
|
||||
dmu_object_type_t drr_bonustype;
|
||||
uint32_t drr_blksz;
|
||||
uint32_t drr_bonuslen;
|
||||
uint8_t drr_checksumtype;
|
||||
uint8_t drr_compress;
|
||||
uint8_t drr_pad[6];
|
||||
uint64_t drr_toguid;
|
||||
/* bonus content follows */
|
||||
} drr_object;
|
||||
struct drr_freeobjects {
|
||||
uint64_t drr_firstobj;
|
||||
uint64_t drr_numobjs;
|
||||
uint64_t drr_toguid;
|
||||
} drr_freeobjects;
|
||||
struct drr_write {
|
||||
uint64_t drr_object;
|
||||
dmu_object_type_t drr_type;
|
||||
uint32_t drr_pad;
|
||||
uint64_t drr_offset;
|
||||
uint64_t drr_length;
|
||||
uint64_t drr_toguid;
|
||||
uint8_t drr_checksumtype;
|
||||
uint8_t drr_checksumflags;
|
||||
uint8_t drr_pad2[6];
|
||||
ddt_key_t drr_key; /* deduplication key */
|
||||
/* content follows */
|
||||
} drr_write;
|
||||
struct drr_free {
|
||||
uint64_t drr_object;
|
||||
uint64_t drr_offset;
|
||||
uint64_t drr_length;
|
||||
uint64_t drr_toguid;
|
||||
} drr_free;
|
||||
struct drr_write_byref {
|
||||
/* where to put the data */
|
||||
uint64_t drr_object;
|
||||
uint64_t drr_offset;
|
||||
uint64_t drr_length;
|
||||
uint64_t drr_toguid;
|
||||
/* where to find the prior copy of the data */
|
||||
uint64_t drr_refguid;
|
||||
uint64_t drr_refobject;
|
||||
uint64_t drr_refoffset;
|
||||
/* properties of the data */
|
||||
uint8_t drr_checksumtype;
|
||||
uint8_t drr_checksumflags;
|
||||
uint8_t drr_pad2[6];
|
||||
ddt_key_t drr_key; /* deduplication key */
|
||||
} drr_write_byref;
|
||||
struct drr_spill {
|
||||
uint64_t drr_object;
|
||||
uint64_t drr_length;
|
||||
uint64_t drr_toguid;
|
||||
uint64_t drr_pad[4]; /* needed for crypto */
|
||||
/* spill data follows */
|
||||
} drr_spill;
|
||||
struct drr_begin drr_begin;
|
||||
struct drr_end drr_end;
|
||||
struct drr_object drr_object;
|
||||
struct drr_freeobjects drr_freeobjects;
|
||||
struct drr_write drr_write;
|
||||
struct drr_free drr_free;
|
||||
struct drr_write_byref drr_write_byref;
|
||||
struct drr_spill drr_spill;
|
||||
} drr_u;
|
||||
} dmu_replay_record_t;
|
||||
|
||||
|
@ -426,22 +426,22 @@ struct zio {
|
||||
};
|
||||
|
||||
extern zio_t *zio_null(zio_t *pio, spa_t *spa, vdev_t *vd,
|
||||
zio_done_func_t *done, void *private, enum zio_flag flags);
|
||||
zio_done_func_t *done, void *priv, enum zio_flag flags);
|
||||
|
||||
extern zio_t *zio_root(spa_t *spa,
|
||||
zio_done_func_t *done, void *private, enum zio_flag flags);
|
||||
zio_done_func_t *done, void *priv, enum zio_flag flags);
|
||||
|
||||
extern zio_t *zio_read(zio_t *pio, spa_t *spa, const blkptr_t *bp, void *data,
|
||||
uint64_t size, zio_done_func_t *done, void *private,
|
||||
uint64_t size, zio_done_func_t *done, void *priv,
|
||||
int priority, enum zio_flag flags, const zbookmark_t *zb);
|
||||
|
||||
extern zio_t *zio_write(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp,
|
||||
void *data, uint64_t size, const zio_prop_t *zp,
|
||||
zio_done_func_t *ready, zio_done_func_t *done, void *private,
|
||||
zio_done_func_t *ready, zio_done_func_t *done, void *priv,
|
||||
int priority, enum zio_flag flags, const zbookmark_t *zb);
|
||||
|
||||
extern zio_t *zio_rewrite(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp,
|
||||
void *data, uint64_t size, zio_done_func_t *done, void *private,
|
||||
void *data, uint64_t size, zio_done_func_t *done, void *priv,
|
||||
int priority, enum zio_flag flags, zbookmark_t *zb);
|
||||
|
||||
extern void zio_write_override(zio_t *zio, blkptr_t *bp, int copies);
|
||||
@ -450,19 +450,20 @@ extern void zio_free(spa_t *spa, uint64_t txg, const blkptr_t *bp);
|
||||
|
||||
extern zio_t *zio_claim(zio_t *pio, spa_t *spa, uint64_t txg,
|
||||
const blkptr_t *bp,
|
||||
zio_done_func_t *done, void *private, enum zio_flag flags);
|
||||
zio_done_func_t *done, void *priv, enum zio_flag flags);
|
||||
|
||||
extern zio_t *zio_ioctl(zio_t *pio, spa_t *spa, vdev_t *vd, int cmd,
|
||||
zio_done_func_t *done, void *private, int priority, enum zio_flag flags);
|
||||
zio_done_func_t *done, void *priv, int priority,
|
||||
enum zio_flag flags);
|
||||
|
||||
extern zio_t *zio_read_phys(zio_t *pio, vdev_t *vd, uint64_t offset,
|
||||
uint64_t size, void *data, int checksum,
|
||||
zio_done_func_t *done, void *private, int priority, enum zio_flag flags,
|
||||
zio_done_func_t *done, void *priv, int priority, enum zio_flag flags,
|
||||
boolean_t labels);
|
||||
|
||||
extern zio_t *zio_write_phys(zio_t *pio, vdev_t *vd, uint64_t offset,
|
||||
uint64_t size, void *data, int checksum,
|
||||
zio_done_func_t *done, void *private, int priority, enum zio_flag flags,
|
||||
zio_done_func_t *done, void *priv, int priority, enum zio_flag flags,
|
||||
boolean_t labels);
|
||||
|
||||
extern zio_t *zio_free_sync(zio_t *pio, spa_t *spa, uint64_t txg,
|
||||
@ -493,11 +494,11 @@ extern void zio_resubmit_stage_async(void *);
|
||||
|
||||
extern zio_t *zio_vdev_child_io(zio_t *zio, blkptr_t *bp, vdev_t *vd,
|
||||
uint64_t offset, void *data, uint64_t size, int type, int priority,
|
||||
enum zio_flag flags, zio_done_func_t *done, void *private);
|
||||
enum zio_flag flags, zio_done_func_t *done, void *priv);
|
||||
|
||||
extern zio_t *zio_vdev_delegated_io(vdev_t *vd, uint64_t offset,
|
||||
void *data, uint64_t size, int type, int priority,
|
||||
enum zio_flag flags, zio_done_func_t *done, void *private);
|
||||
enum zio_flag flags, zio_done_func_t *done, void *priv);
|
||||
|
||||
extern void zio_vdev_io_bypass(zio_t *zio);
|
||||
extern void zio_vdev_io_reissue(zio_t *zio);
|
||||
|
Loading…
Reference in New Issue
Block a user