gpg: Simplify keydb handling of the main import function.
[gnupg.git] / dirmngr / ldap-wrapper-ce.c
index 9af70af..01f8f64 100644 (file)
@@ -14,7 +14,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
  */
 
 /*
@@ -117,6 +117,7 @@ struct outstream_cookie_s
   char buffer[4000];  /* Data ring buffer.  */
   size_t buffer_len;  /* The amount of data in the BUFFER.  */
   size_t buffer_pos;  /* The next read position of the BUFFER.  */
+  size_t buffer_read_pos;  /* The next read position of the BUFFER.  */
 };
 
 #define BUFFER_EMPTY(c) ((c)->buffer_len == 0)
@@ -125,6 +126,8 @@ struct outstream_cookie_s
 #define BUFFER_SPACE_AVAILABLE(c) (DIM((c)->buffer) - (c)->buffer_len)
 #define BUFFER_INC_POS(c,n) (c)->buffer_pos = ((c)->buffer_pos + (n)) % DIM((c)->buffer)
 #define BUFFER_CUR_POS(c) (&(c)->buffer[(c)->buffer_pos])
+#define BUFFER_INC_READ_POS(c,n) (c)->buffer_read_pos = ((c)->buffer_read_pos + (n)) % DIM((c)->buffer)
+#define BUFFER_CUR_READ_POS(c) (&(c)->buffer[(c)->buffer_read_pos])
 
 static int
 buffer_get_data (struct outstream_cookie_s *cookie, char *dst, int cnt)
@@ -143,15 +146,15 @@ buffer_get_data (struct outstream_cookie_s *cookie, char *dst, int cnt)
   if (chunk > left)
     chunk = left;
 
-  memcpy (dst, BUFFER_CUR_POS (cookie), chunk);
-  BUFFER_INC_POS (cookie, chunk);
+  memcpy (dst, BUFFER_CUR_READ_POS (cookie), chunk);
+  BUFFER_INC_READ_POS (cookie, chunk);
   left -= chunk;
   dst += chunk;
 
   if (left)
     {
-      memcpy (dst, BUFFER_CUR_POS (cookie), left);
-      BUFFER_INC_POS (cookie, left);
+      memcpy (dst, BUFFER_CUR_READ_POS (cookie), left);
+      BUFFER_INC_READ_POS (cookie, left);
     }
 
   return amount;
@@ -196,7 +199,7 @@ buffer_put_data (struct outstream_cookie_s *cookie, const char *src, int cnt)
 
 /* The writer function for the outstream.  This is used to transfer
    the output of the ldap wrapper thread to the ksba reader object.  */
-static ssize_t
+static gpgrt_ssize_t
 outstream_cookie_writer (void *cookie_arg, const void *buffer, size_t size)
 {
   struct outstream_cookie_s *cookie = cookie_arg;
@@ -279,8 +282,6 @@ outstream_reader_cb (void *cb_value, char *buffer, size_t count,
                      size_t *r_nread)
 {
   struct outstream_cookie_s *cookie = cb_value;
-  char *dst;
-  const char *src;
   size_t nread = 0;
   int was_full = 0;
 
@@ -288,7 +289,6 @@ outstream_reader_cb (void *cb_value, char *buffer, size_t count,
     return gpg_error (GPG_ERR_NOT_SUPPORTED); /* Rewind is not supported.  */
 
   *r_nread = 0;
-  dst = buffer;
 
   while (BUFFER_EMPTY(cookie))
     {
@@ -302,7 +302,6 @@ outstream_reader_cb (void *cb_value, char *buffer, size_t count,
   if (BUFFER_FULL(cookie))
     was_full = 1;
 
-  src = cookie->buffer + cookie->buffer_pos;
   nread = buffer_get_data (cookie, buffer, count);
 
   if (was_full)