summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2016-11-12 11:06:22 +0100
committerWerner Koch <wk@gnupg.org>2016-11-12 11:06:22 +0100
commitb7972767513c8748096ebed78d1e1621bd2bd459 (patch)
treea9b75c67684e2fa835d79d18776139df37c01409
parent25d463c67821901c8fd6736c815f11e85bbae66f (diff)
downloadlibgpg-error-b7972767513c8748096ebed78d1e1621bd2bd459.tar.gz
Add new interface gpgrt_get_syscall_clamp.
* src/visibility.c (gpgrt_get_syscall_clamp): New. * src/gpg-error.vers, src/gpg-error.def.in: Add function. * src/gpg-error.h.in: Ditto. * src/estream.c (_gpgrt_get_syscall_clamp): New. -- This function can be used by other libraries to set their own system clamp functions. Signed-off-by: Werner Koch <wk@gnupg.org>
-rw-r--r--NEWS1
-rw-r--r--src/estream.c11
-rw-r--r--src/gpg-error.def.in2
-rw-r--r--src/gpg-error.h.in3
-rw-r--r--src/gpg-error.vers1
-rw-r--r--src/gpgrt-int.h1
-rw-r--r--src/visibility.c6
-rw-r--r--src/visibility.h2
8 files changed, 27 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index b1c8c6c..3b373c5 100644
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,7 @@ Noteworthy changes in version 1.25 (unreleased) [C19/A19/R_)
GPG_ERR_DUP_NAME NEW.
GPG_ERR_TOO_OLD NEW.
GPG_ERR_TOO_YOUNG NEW.
+ gpgrt_get_syscall_clamp NEW.
Noteworthy changes in version 1.24 (2016-07-14) [C19/A19/R1)
diff --git a/src/estream.c b/src/estream.c
index d0f0ba9..752d22e 100644
--- a/src/estream.c
+++ b/src/estream.c
@@ -605,6 +605,17 @@ _gpgrt_set_syscall_clamp (void (*pre)(void), void (*post)(void))
_gpgrt_lock_set_lock_clamp (pre, post);
}
+/*
+ * Return the current sycall clamp functions. This can be used by
+ * other libraries which have blocking functions.
+ */
+void
+_gpgrt_get_syscall_clamp (void (**r_pre)(void), void (**r_post)(void))
+{
+ *r_pre = pre_syscall_func;
+ *r_post = post_syscall_func;
+}
+
/*
diff --git a/src/gpg-error.def.in b/src/gpg-error.def.in
index 1fa8866..19e87fa 100644
--- a/src/gpg-error.def.in
+++ b/src/gpg-error.def.in
@@ -150,4 +150,6 @@ EXPORTS
gpgrt_w32_iconv @111
#endif
+ gpgrt_get_syscall_clamp @112
+
;; end of file with public symbols for Windows.
diff --git a/src/gpg-error.h.in b/src/gpg-error.h.in
index a79f6ba..86f3241 100644
--- a/src/gpg-error.h.in
+++ b/src/gpg-error.h.in
@@ -303,6 +303,9 @@ void gpg_err_deinit (int mode);
/* Register blocking system I/O clamping functions. */
void gpgrt_set_syscall_clamp (void (*pre)(void), void (*post)(void));
+/* Get current I/O clamping functions. */
+void gpgrt_get_syscall_clamp (void (**r_pre)(void), void (**r_post)(void));
+
/* Register a custom malloc/realloc/free function. */
void gpgrt_set_alloc_func (void *(*f)(void *a, size_t n));
diff --git a/src/gpg-error.vers b/src/gpg-error.vers
index cdff0e3..802ff3d 100644
--- a/src/gpg-error.vers
+++ b/src/gpg-error.vers
@@ -39,6 +39,7 @@ GPG_ERROR_1.0 {
gpgrt_lock_trylock;
gpgrt_set_syscall_clamp;
+ gpgrt_get_syscall_clamp;
gpgrt_fopen;
gpgrt_mopen;
diff --git a/src/gpgrt-int.h b/src/gpgrt-int.h
index d69fe2c..b2b553b 100644
--- a/src/gpgrt-int.h
+++ b/src/gpgrt-int.h
@@ -53,6 +53,7 @@ gpg_err_code_t _gpgrt_yield (void);
/* Local prototypes for estream. */
int _gpgrt_es_init (void);
void _gpgrt_set_syscall_clamp (void (*pre)(void), void (*post)(void));
+void _gpgrt_get_syscall_clamp (void (**r_pre)(void), void (**r_post)(void));
gpgrt_stream_t _gpgrt_fopen (const char *_GPGRT__RESTRICT path,
const char *_GPGRT__RESTRICT mode);
diff --git a/src/visibility.c b/src/visibility.c
index e3ac8a7..89b5623 100644
--- a/src/visibility.c
+++ b/src/visibility.c
@@ -97,6 +97,12 @@ gpgrt_set_syscall_clamp (void (*pre)(void), void (*post)(void))
}
void
+gpgrt_get_syscall_clamp (void (**r_pre)(void), void (**r_post)(void))
+{
+ _gpgrt_get_syscall_clamp (r_pre, r_post);
+}
+
+void
gpgrt_set_alloc_func (void *(*f)(void *a, size_t n))
{
_gpgrt_set_alloc_func (f);
diff --git a/src/visibility.h b/src/visibility.h
index 1de6c62..479186f 100644
--- a/src/visibility.h
+++ b/src/visibility.h
@@ -142,6 +142,7 @@ MARK_VISIBLE (gpgrt_vbsprintf)
MARK_VISIBLE (gpgrt_snprintf)
MARK_VISIBLE (gpgrt_vsnprintf)
MARK_VISIBLE (gpgrt_set_syscall_clamp)
+MARK_VISIBLE (gpgrt_get_syscall_clamp)
MARK_VISIBLE (gpgrt_set_alloc_func)
#undef MARK_VISIBLE
@@ -251,6 +252,7 @@ MARK_VISIBLE (gpgrt_set_alloc_func)
#define gpgrt_vsnprintf _gpgrt_USE_UNDERSCORED_FUNCTION
#define gpgrt_set_syscall_clamp _gpgrt_USE_UNDERSCORED_FUNCTION
+#define gpgrt_get_syscall_clamp _gpgrt_USE_UNDERSCORED_FUNCTION
#define gpgrt_set_alloc_func _gpgrt_USE_UNDERSCORED_FUNCTION