btrfs-progs: make libbtrfs usable from C++

Please find attached a patch to make the new libbtrfs usable from
C++ (at least for the parts snapper will likely need).

Signed-off-by: Arvin Schnell <aschnell@suse.de>
Signed-off-by: Mark Fasheh <mfasheh@suse.de>
master
Arvin Schnell 2013-01-30 14:50:26 -08:00 committed by David Sterba
parent 7d4dc89f96
commit 0c38ff3ca4
8 changed files with 57 additions and 27 deletions

View File

@ -48,7 +48,7 @@ static struct extent_state *alloc_extent_state(void)
return NULL;
state->refs = 1;
state->state = 0;
state->private = 0;
state->xprivate = 0;
return state;
}
@ -511,7 +511,7 @@ int set_state_private(struct extent_io_tree *tree, u64 start, u64 private)
ret = -ENOENT;
goto out;
}
state->private = private;
state->xprivate = private;
out:
return ret;
}
@ -532,7 +532,7 @@ int get_state_private(struct extent_io_tree *tree, u64 start, u64 *private)
ret = -ENOENT;
goto out;
}
*private = state->private;
*private = state->xprivate;
out:
return ret;
}

View File

@ -47,7 +47,7 @@ struct extent_state {
u64 end;
int refs;
unsigned long state;
u64 private;
u64 xprivate;
};
struct extent_buffer {
@ -86,8 +86,8 @@ int extent_buffer_uptodate(struct extent_buffer *eb);
int set_extent_buffer_uptodate(struct extent_buffer *eb);
int clear_extent_buffer_uptodate(struct extent_io_tree *tree,
struct extent_buffer *eb);
int set_state_private(struct extent_io_tree *tree, u64 start, u64 private);
int get_state_private(struct extent_io_tree *tree, u64 start, u64 *private);
int set_state_private(struct extent_io_tree *tree, u64 start, u64 xprivate);
int get_state_private(struct extent_io_tree *tree, u64 start, u64 *xprivate);
struct extent_buffer *find_extent_buffer(struct extent_io_tree *tree,
u64 bytenr, u32 blocksize);
struct extent_buffer *find_first_extent_buffer(struct extent_io_tree *tree,

View File

@ -22,6 +22,10 @@
#include <linux/ioctl.h>
#include <time.h>
#ifdef __cplusplus
extern "C" {
#endif
#define BTRFS_IOCTL_MAGIC 0x94
#define BTRFS_VOL_NAME_MAX 255
@ -521,4 +525,8 @@ struct btrfs_ioctl_clone_range_args {
#define BTRFS_IOC_DEV_REPLACE _IOWR(BTRFS_IOCTL_MAGIC, 53, \
struct btrfs_ioctl_dev_replace_args)
#ifdef __cplusplus
}
#endif
#endif

40
list.h
View File

@ -19,8 +19,8 @@
#ifndef _LINUX_LIST_H
#define _LINUX_LIST_H
#define LIST_POISON1 ((void *) 0x00100100)
#define LIST_POISON2 ((void *) 0x00200200)
#define LIST_POISON1 ((struct list_head *) 0x00100100)
#define LIST_POISON2 ((struct list_head *) 0x00200200)
/*
* Simple doubly linked list implementation.
@ -54,17 +54,17 @@ static inline void INIT_LIST_HEAD(struct list_head *list)
* the prev/next entries already!
*/
#ifndef CONFIG_DEBUG_LIST
static inline void __list_add(struct list_head *new,
static inline void __list_add(struct list_head *xnew,
struct list_head *prev,
struct list_head *next)
{
next->prev = new;
new->next = next;
new->prev = prev;
prev->next = new;
next->prev = xnew;
xnew->next = next;
xnew->prev = prev;
prev->next = xnew;
}
#else
extern void __list_add(struct list_head *new,
extern void __list_add(struct list_head *xnew,
struct list_head *prev,
struct list_head *next);
#endif
@ -78,12 +78,12 @@ extern void __list_add(struct list_head *new,
* This is good for implementing stacks.
*/
#ifndef CONFIG_DEBUG_LIST
static inline void list_add(struct list_head *new, struct list_head *head)
static inline void list_add(struct list_head *xnew, struct list_head *head)
{
__list_add(new, head, head->next);
__list_add(xnew, head, head->next);
}
#else
extern void list_add(struct list_head *new, struct list_head *head);
extern void list_add(struct list_head *xnew, struct list_head *head);
#endif
@ -95,9 +95,9 @@ extern void list_add(struct list_head *new, struct list_head *head);
* Insert a new entry before the specified head.
* This is useful for implementing queues.
*/
static inline void list_add_tail(struct list_head *new, struct list_head *head)
static inline void list_add_tail(struct list_head *xnew, struct list_head *head)
{
__list_add(new, head->prev, head);
__list_add(xnew, head->prev, head);
}
/*
@ -137,18 +137,18 @@ extern void list_del(struct list_head *entry);
* Note: if 'old' was empty, it will be overwritten.
*/
static inline void list_replace(struct list_head *old,
struct list_head *new)
struct list_head *xnew)
{
new->next = old->next;
new->next->prev = new;
new->prev = old->prev;
new->prev->next = new;
xnew->next = old->next;
xnew->next->prev = xnew;
xnew->prev = old->prev;
xnew->prev->next = xnew;
}
static inline void list_replace_init(struct list_head *old,
struct list_head *new)
struct list_head *xnew)
{
list_replace(old, new);
list_replace(old, xnew);
INIT_LIST_HEAD(old);
}
/**

View File

@ -145,7 +145,7 @@ extern struct rb_node *rb_first(struct rb_root *);
extern struct rb_node *rb_last(struct rb_root *);
/* Fast replacement of a single node without remove/rebalance/add/rebalance */
extern void rb_replace_node(struct rb_node *victim, struct rb_node *new,
extern void rb_replace_node(struct rb_node *victim, struct rb_node *xnew,
struct rb_root *root);
static inline void rb_link_node(struct rb_node * node, struct rb_node * parent,

View File

@ -18,6 +18,10 @@
#ifndef SEND_STREAM_H_
#define SEND_STREAM_H_
#ifdef __cplusplus
extern "C" {
#endif
struct btrfs_send_ops {
int (*subvol)(const char *path, const u8 *uuid, u64 ctransid,
void *user);
@ -55,5 +59,8 @@ struct btrfs_send_ops {
int btrfs_read_and_process_send_stream(int fd,
struct btrfs_send_ops *ops, void *user);
#ifdef __cplusplus
}
#endif
#endif /* SEND_STREAM_H_ */

View File

@ -21,6 +21,10 @@
#include "ctree.h"
#include "rbtree.h"
#ifdef __cplusplus
extern "C" {
#endif
enum subvol_search_type {
subvol_search_by_root_id,
subvol_search_by_uuid,
@ -65,5 +69,8 @@ void subvol_uuid_search_add(struct subvol_uuid_search *s,
char *path_cat(const char *p1, const char *p2);
char *path_cat3(const char *p1, const char *p2, const char *p3);
#ifdef __cplusplus
}
#endif
#endif /* SEND_UTILS_H_ */

8
send.h
View File

@ -19,6 +19,10 @@
#include "ctree.h"
#ifdef __cplusplus
extern "C" {
#endif
#define BTRFS_SEND_STREAM_MAGIC "btrfs-stream"
#define BTRFS_SEND_STREAM_VERSION 1
@ -132,3 +136,7 @@ enum {
#ifdef __KERNEL__
long btrfs_ioctl_send(struct file *mnt_file, void __user *arg);
#endif
#ifdef __cplusplus
}
#endif