[Pkg-gnupg-commit] [libassuan] 350/437: assuan_register_pre_cmd_notify().

Eric Dorland eric at moszumanska.debian.org
Fri May 22 05:34:02 UTC 2015


This is an automated email from the git hooks/post-receive script.

eric pushed a commit to branch master
in repository libassuan.

commit 97eb75719c40ea584aa8745638a8496154fbf418
Author: Ben Kibbey <bjk at luxsci.net>
Date:   Sat Feb 5 22:34:24 2011 -0500

    assuan_register_pre_cmd_notify().
---
 src/assuan-defs.h    | 13 ++++---------
 src/assuan-handler.c | 20 +++++++++++++++++++-
 src/assuan.h.in      | 11 +++++++++++
 src/libassuan.def    |  1 +
 src/libassuan.vers   |  1 +
 5 files changed, 36 insertions(+), 10 deletions(-)

diff --git a/src/assuan-defs.h b/src/assuan-defs.h
index 88863eb..da2a9d7 100644
--- a/src/assuan-defs.h
+++ b/src/assuan-defs.h
@@ -58,14 +58,6 @@
 #define _assuan_error(ctx, errcode) gpg_err_make ((ctx)->err_source, errcode)
 
 
-struct cmdtbl_s
-{
-  const char *name;
-  assuan_handler_t handler;
-  const char *helpstr;
-};
-
-
 

 /* The context we use with most functions. */
 struct assuan_context_s
@@ -196,7 +188,7 @@ struct assuan_context_s
   gpg_error_t (*accept_handler)(assuan_context_t);
   void (*finish_handler)(assuan_context_t);
 
-  struct cmdtbl_s *cmdtbl;
+  assuan_command_t cmdtbl;
   size_t cmdtbl_used; /* used entries */
   size_t cmdtbl_size; /* allocated size of table */
   
@@ -212,6 +204,9 @@ struct assuan_context_s
   assuan_handler_t input_notify_fnc;
   assuan_handler_t output_notify_fnc;
 
+  /* This function is called right before a command handler is called. */
+  gpg_error_t (*pre_cmd_notify_fnc)(assuan_context_t, assuan_command_t);
+
   /* This function is called right after a command has been processed.
      It may be used to command related cleanup.  */
   void (*post_cmd_notify_fnc)(assuan_context_t, gpg_error_t);
diff --git a/src/assuan-handler.c b/src/assuan-handler.c
index c19117f..5016fcb 100644
--- a/src/assuan-handler.c
+++ b/src/assuan-handler.c
@@ -400,7 +400,7 @@ assuan_register_command (assuan_context_t ctx, const char *cmd_name,
     }
   else if (ctx->cmdtbl_used >= ctx->cmdtbl_size)
     {
-      struct cmdtbl_s *x;
+      struct _assuan_command_s *x;
 
       x = _assuan_realloc (ctx, ctx->cmdtbl, (ctx->cmdtbl_size+10) * sizeof *x);
       if (!x)
@@ -427,6 +427,17 @@ assuan_get_command_name (assuan_context_t ctx)
 }
 
 gpg_error_t
+assuan_register_pre_cmd_notify (assuan_context_t ctx,
+                                 gpg_error_t (*fnc)(assuan_context_t,
+				   assuan_command_t))
+{
+  if (!ctx)
+    return _assuan_error (ctx, GPG_ERR_ASS_INV_VALUE);
+  ctx->pre_cmd_notify_fnc = fnc;
+  return 0;
+}
+
+gpg_error_t
 assuan_register_post_cmd_notify (assuan_context_t ctx,
                                  void (*fnc)(assuan_context_t, gpg_error_t))
 {
@@ -590,6 +601,13 @@ dispatch_command (assuan_context_t ctx, char *line, int linelen)
   line += shift;
   linelen -= shift;
 
+  if (ctx->pre_cmd_notify_fnc) {
+    err = ctx->pre_cmd_notify_fnc(ctx, &ctx->cmdtbl[i]);
+
+    if (err)
+      return PROCESS_DONE(ctx, err);
+  }
+
 /*    fprintf (stderr, "DBG-assuan: processing %s `%s'\n", s, line); */
   ctx->current_cmd_name = ctx->cmdtbl[i].name;
   err = ctx->cmdtbl[i].handler (ctx, line);
diff --git a/src/assuan.h.in b/src/assuan.h.in
index 018d5a1..630aefd 100644
--- a/src/assuan.h.in
+++ b/src/assuan.h.in
@@ -273,11 +273,22 @@ void assuan_set_log_stream (assuan_context_t ctx, FILE *fp);
 

 typedef gpg_error_t (*assuan_handler_t) (assuan_context_t, char *);
 
+struct _assuan_command_s
+{
+  const char *name;
+  assuan_handler_t handler;
+  const char *helpstr;
+};
+
+typedef struct _assuan_command_s *assuan_command_t;
+
 /*-- assuan-handler.c --*/
 gpg_error_t assuan_register_command (assuan_context_t ctx,
 				     const char *cmd_string,
 				     assuan_handler_t handler,
                                      const char *help_string);
+gpg_error_t assuan_register_pre_cmd_notify (assuan_context_t ctx,
+					     gpg_error_t (*fnc)(assuan_context_t, assuan_command_t));
 gpg_error_t assuan_register_post_cmd_notify (assuan_context_t ctx,
 					     void (*fnc)(assuan_context_t,
                                                          gpg_error_t));
diff --git a/src/libassuan.def b/src/libassuan.def
index a2e7b61..575966d 100644
--- a/src/libassuan.def
+++ b/src/libassuan.def
@@ -103,6 +103,7 @@ EXPORTS
     _assuan_w32ce_finish_pipe           @82
     __assuan_socket			@83
     __assuan_connect			@84
+    assuan_register_pre_cmd_notify	@85
 
 ; END
 
diff --git a/src/libassuan.vers b/src/libassuan.vers
index b14a940..261e0e7 100644
--- a/src/libassuan.vers
+++ b/src/libassuan.vers
@@ -24,6 +24,7 @@ LIBASSUAN_1.1 {
   global:
     __assuan_socket;
     __assuan_connect;
+    assuan_register_pre_cmd_notify;
 };
 
 LIBASSUAN_1.0 {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/libassuan.git



More information about the Pkg-gnupg-commit mailing list