aboutsummaryrefslogtreecommitdiffstats
path: root/subversion/libsvn_fs
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/libsvn_fs')
-rw-r--r--subversion/libsvn_fs/fs-loader.c39
-rw-r--r--subversion/libsvn_fs/fs-loader.h17
-rw-r--r--subversion/libsvn_fs/libsvn_fs.pc.in8
3 files changed, 58 insertions, 6 deletions
diff --git a/subversion/libsvn_fs/fs-loader.c b/subversion/libsvn_fs/fs-loader.c
index f898d8a56a6a..3840f225419c 100644
--- a/subversion/libsvn_fs/fs-loader.c
+++ b/subversion/libsvn_fs/fs-loader.c
@@ -2221,3 +2221,42 @@ svn_fs_info_dup(const void *info_void,
return apr_pmemdup(result_pool, info, sizeof(*info));
}
+svn_error_t *
+svn_fs_ioctl(svn_fs_t *fs,
+ svn_fs_ioctl_code_t ctlcode,
+ void *input,
+ void **output_p,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ void *output;
+
+ if (fs)
+ {
+ if (!fs->vtable->ioctl)
+ return svn_error_create(SVN_ERR_FS_UNRECOGNIZED_IOCTL_CODE, NULL, NULL);
+
+ SVN_ERR(fs->vtable->ioctl(fs, ctlcode, input, &output,
+ cancel_func, cancel_baton,
+ result_pool, scratch_pool));
+ }
+ else
+ {
+ fs_library_vtable_t *vtable;
+
+ SVN_ERR(get_library_vtable(&vtable, ctlcode.fs_type, scratch_pool));
+
+ if (!vtable->ioctl)
+ return svn_error_create(SVN_ERR_FS_UNRECOGNIZED_IOCTL_CODE, NULL, NULL);
+
+ SVN_ERR(vtable->ioctl(ctlcode, input, &output,
+ cancel_func, cancel_baton,
+ result_pool, scratch_pool));
+ }
+
+ if (output_p)
+ *output_p = output;
+ return SVN_NO_ERROR;
+}
diff --git a/subversion/libsvn_fs/fs-loader.h b/subversion/libsvn_fs/fs-loader.h
index 0712c23307d9..35b55d644e2b 100644
--- a/subversion/libsvn_fs/fs-loader.h
+++ b/subversion/libsvn_fs/fs-loader.h
@@ -159,6 +159,13 @@ typedef struct fs_library_vtable_t
/* For svn_fs_info_fsfs_dup(). */
void *(*info_fsap_dup)(const void *fsap_info,
apr_pool_t *result_pool);
+
+ svn_error_t *(*ioctl)(svn_fs_ioctl_code_t ctlcode,
+ void *input, void **output_p,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
} fs_library_vtable_t;
/* This is the type of symbol an FS module defines to fetch the
@@ -200,12 +207,12 @@ typedef struct fs_vtable_t
svn_error_t *(*revision_prop)(svn_string_t **value_p, svn_fs_t *fs,
svn_revnum_t rev, const char *propname,
svn_boolean_t refresh,
- apr_pool_t *result_pool,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
svn_error_t *(*revision_proplist)(apr_hash_t **table_p, svn_fs_t *fs,
svn_revnum_t rev,
svn_boolean_t refresh,
- apr_pool_t *result_pool,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
svn_error_t *(*change_rev_prop)(svn_fs_t *fs, svn_revnum_t rev,
const char *name,
@@ -266,6 +273,12 @@ typedef struct fs_vtable_t
svn_error_t *(*bdb_set_errcall)(svn_fs_t *fs,
void (*handler)(const char *errpfx,
char *msg));
+ svn_error_t *(*ioctl)(svn_fs_t *fs, svn_fs_ioctl_code_t ctlcode,
+ void *input, void **output_p,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
} fs_vtable_t;
diff --git a/subversion/libsvn_fs/libsvn_fs.pc.in b/subversion/libsvn_fs/libsvn_fs.pc.in
index 67154f01d7dc..d9a8b0b7a0b0 100644
--- a/subversion/libsvn_fs/libsvn_fs.pc.in
+++ b/subversion/libsvn_fs/libsvn_fs.pc.in
@@ -6,7 +6,7 @@ includedir=@includedir@
Name: libsvn_fs
Description: Subversion Repository Filesystem Library
Version: @PACKAGE_VERSION@
-Requires: apr-util-@SVN_APR_MAJOR_VERSION@ apr-@SVN_APR_MAJOR_VERSION@
-Requires.private: libsvn_fs_util libsvn_delta libsvn_subr
-Libs: -L${libdir} -lsvn_fs
-Cflags: -I${includedir}
+Requires: apr-util-@SVN_APR_MAJOR_VERSION@, apr-@SVN_APR_MAJOR_VERSION@
+Requires.private: libsvn_fs_util, libsvn_delta, libsvn_subr
+Libs: -L${libdir} -lsvn_fs-1
+Cflags: -I${includedir}/subversion-1