aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustus Winter <[email protected]>2016-11-08 14:11:12 +0000
committerJustus Winter <[email protected]>2016-11-08 15:02:55 +0000
commit591d61d80f4f81176f7e236df794922df9e001a1 (patch)
treec95abd7b3e052f25aa1ebbf2a83769275e6756c6
parentgpgscm: Fix error message. (diff)
downloadgnupg-591d61d80f4f81176f7e236df794922df9e001a1.tar.gz
gnupg-591d61d80f4f81176f7e236df794922df9e001a1.zip
gpgscm: Expose seek and associated constants.
* tests/gpgscm/ffi.c (do_seek): New function. (ffi_init): Expose 'seek' and 'SEEK_{SET,CUR,END}'. * tests/gpgscm/lib.scm: Document the new function. Signed-off-by: Justus Winter <[email protected]>
-rw-r--r--tests/gpgscm/ffi.c19
-rw-r--r--tests/gpgscm/lib.scm8
2 files changed, 27 insertions, 0 deletions
diff --git a/tests/gpgscm/ffi.c b/tests/gpgscm/ffi.c
index add82f700..c91d4aabe 100644
--- a/tests/gpgscm/ffi.c
+++ b/tests/gpgscm/ffi.c
@@ -326,6 +326,21 @@ do_close (scheme *sc, pointer args)
}
static pointer
+do_seek (scheme *sc, pointer args)
+{
+ FFI_PROLOG ();
+ int fd;
+ off_t offset;
+ int whence;
+ FFI_ARG_OR_RETURN (sc, int, fd, number, args);
+ FFI_ARG_OR_RETURN (sc, off_t, offset, number, args);
+ FFI_ARG_OR_RETURN (sc, int, whence, number, args);
+ FFI_ARGS_DONE_OR_RETURN (sc, args);
+ FFI_RETURN_ERR (sc, lseek (fd, offset, whence) == (off_t) -1
+ ? gpg_error_from_syserror () : 0);
+}
+
+static pointer
do_mkdtemp (scheme *sc, pointer args)
{
FFI_PROLOG ();
@@ -1309,6 +1324,9 @@ ffi_init (scheme *sc, const char *argv0, const char *scriptname,
ffi_define_constant (sc, STDIN_FILENO);
ffi_define_constant (sc, STDOUT_FILENO);
ffi_define_constant (sc, STDERR_FILENO);
+ ffi_define_constant (sc, SEEK_SET);
+ ffi_define_constant (sc, SEEK_CUR);
+ ffi_define_constant (sc, SEEK_END);
ffi_define_function (sc, sleep);
ffi_define_function (sc, usleep);
@@ -1320,6 +1338,7 @@ ffi_init (scheme *sc, const char *argv0, const char *scriptname,
ffi_define_function (sc, open);
ffi_define_function (sc, fdopen);
ffi_define_function (sc, close);
+ ffi_define_function (sc, seek);
ffi_define_function_name (sc, "_mkdtemp", mkdtemp);
ffi_define_function (sc, unlink);
ffi_define_function (sc, unlink_recursively);
diff --git a/tests/gpgscm/lib.scm b/tests/gpgscm/lib.scm
index 27779e24a..4e19eae60 100644
--- a/tests/gpgscm/lib.scm
+++ b/tests/gpgscm/lib.scm
@@ -204,6 +204,14 @@
;; Libc functions.
;;
+;; Change the read/write offset.
+(ffi-define (seek fd offset whence))
+
+;; Constants for WHENCE.
+(ffi-define SEEK_SET)
+(ffi-define SEEK_CUR)
+(ffi-define SEEK_END)
+
;; Get our process id.
(ffi-define (getpid))