Author: stsp
Date: Mon Jul 25 17:43:18 2011
New Revision: 1150801

URL: http://svn.apache.org/viewvc?rev=1150801&view=rev
Log:
Some refactoring in the gpg-agent code. No functional change.

* subversion/libsvn_auth_gpg_agent/gpg_agent.c
  (send_option): New helper function that sends an option to the gpg-agent.
  (password_get_gpg_agent): Use the new helper function, thereby
   getting rid of some needless code repetition.

Modified:
    subversion/trunk/subversion/libsvn_auth_gpg_agent/gpg_agent.c

Modified: subversion/trunk/subversion/libsvn_auth_gpg_agent/gpg_agent.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_auth_gpg_agent/gpg_agent.c?rev=1150801&r1=1150800&r2=1150801&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_auth_gpg_agent/gpg_agent.c (original)
+++ subversion/trunk/subversion/libsvn_auth_gpg_agent/gpg_agent.c Mon Jul 25 
17:43:18 2011
@@ -95,6 +95,29 @@ receive_from_gpg_agent(int sd, char *buf
     return FALSE;
 }
 
+/* Using socket SD, send the option OPTION with the specified VALUE
+ * to the gpg agent. Store the response in BUF, assumed to be N bytes
+ * in size, and evaluate the response. Return TRUE if the agent liked
+ * the smell of the option, if there is such a thing, and doesn't feel
+ * saturated by it. Else return FALSE.
+ * Do temporary allocations in scratch_pool. */
+static svn_boolean_t
+send_option(int sd, char *buf, size_t n, const char *option, const char *value,
+            apr_pool_t *scratch_pool)
+{
+  const char *request;
+
+  request = apr_psprintf(scratch_pool, "OPTION %s=%s\n", option, value);
+
+  if (send(sd, request, strlen(request), 0) == -1)
+    return FALSE;
+
+  if (!receive_from_gpg_agent(sd, buf, n))
+    return FALSE;
+
+  return (strncmp(buf, "OK", 2) == 0);
+}
+
 /* Implementation of svn_auth__password_get_t that retrieves the password
    from gpg-agent */
 static svn_boolean_t
@@ -172,15 +195,7 @@ password_get_gpg_agent(const char **pass
   tty_name = getenv("GPG_TTY");
   if (tty_name != NULL)
     {
-      request = apr_psprintf(pool, "OPTION ttyname=%s\n", tty_name);
-      send(sd, request, strlen(request), 0);
-      if (!receive_from_gpg_agent(sd, buffer, BUFFER_SIZE - 1))
-        {
-          close(sd);
-          return FALSE;
-        }
-
-      if (strncmp(buffer, "OK", 2) != 0)
+      if (!send_option(sd, buffer, BUFFER_SIZE - 1, "ttyname", tty_name, pool))
         {
           close(sd);
           return FALSE;
@@ -196,15 +211,7 @@ password_get_gpg_agent(const char **pass
   tty_type = getenv("TERM");
   if (tty_type != NULL)
     {
-      request = apr_psprintf(pool, "OPTION ttytype=%s\n", tty_type);
-      send(sd, request, strlen(request), 0);
-      if (!receive_from_gpg_agent(sd, buffer, BUFFER_SIZE - 1))
-        {
-          close(sd);
-          return FALSE;
-        }
-
-      if (strncmp(buffer, "OK", 2) != 0)
+      if (!send_option(sd, buffer, BUFFER_SIZE - 1, "ttytype", tty_type, pool))
         {
           close(sd);
           return FALSE;
@@ -224,14 +231,7 @@ password_get_gpg_agent(const char **pass
     lc_ctype = getenv("LANG");
   if (lc_ctype != NULL)
     {
-      request = apr_psprintf(pool, "OPTION lc-ctype=%s\n", lc_ctype);
-      send(sd, request, strlen(request), 0);
-      if (!receive_from_gpg_agent(sd, buffer, BUFFER_SIZE - 1))
-        {
-          close(sd);
-          return FALSE;
-        }
-      if (strncmp(buffer, "OK", 2) != 0)
+      if (!send_option(sd, buffer, BUFFER_SIZE - 1, "lc-ctype", lc_ctype, 
pool))
         {
           close(sd);
           return FALSE;
@@ -243,13 +243,7 @@ password_get_gpg_agent(const char **pass
   if (display != NULL)
     {
       request = apr_psprintf(pool, "OPTION display=%s\n", display);
-      send(sd, request, strlen(request), 0);
-      if (!receive_from_gpg_agent(sd, buffer, BUFFER_SIZE - 1))
-        {
-          close(sd);
-          return FALSE;
-        }
-      if (strncmp(buffer, "OK", 2) != 0)
+      if (!send_option(sd, buffer, BUFFER_SIZE - 1, "display", display, pool))
         {
           close(sd);
           return FALSE;


Reply via email to