Copied gpg.texi over from 1.4.5 and started to restructure it into a proper
[gnupg.git] / tests / asschk.c
index 829c862..40b95ba 100644 (file)
@@ -15,7 +15,8 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ * USA.
  */
 
 /* This is a simple stand-alone Assuan server test program.  We don't
       Print VALUE.
 
    openfile <filename>
-      Open file FILENAME for read access and retrun the file descriptor.
+      Open file FILENAME for read access and return the file descriptor.
 
    createfile <filename>
-      Create file FILENAME, open for write access and retrun the file
+      Create file FILENAME, open for write access and return the file
       descriptor.
 
    pipeserver <program>
 # define ATTR_PRINTF(f,a)
 #endif
 
+#if __STDC_VERSION__ < 199901L
+# if __GNUC__ >= 2
+#  define __func__ __FUNCTION__
+# else
+/* Let's try our luck here.  Some systems may provide __func__ without
+   providing __STDC_VERSION__ 199901L.  */
+#  if 0
+#   define __func__ "<unknown>"
+#  endif
+# endif
+#endif
+
 #define spacep(p) (*(p) == ' ' || *(p) == '\t')
 
 #define MAX_LINELEN 2048
@@ -188,6 +201,8 @@ die (const char *format, ...)
   exit (1);
 }
 
+#define die(format, args...) (die) ("%s: " format, __func__ , ##args)
+
 static void
 err (const char *format, ...)
 {
@@ -267,7 +282,6 @@ read_assuan (int fd)
   size_t nleft = sizeof recv_line;
   char *buf = recv_line;
   char *p;
-  int nread = 0;
 
   while (nleft > 0)
     {
@@ -283,6 +297,16 @@ read_assuan (int fd)
         }
       else
         n = read (fd, buf, nleft);
+
+      if (opt_verbose)
+       {
+         int i;
+         printf ("%s: read \"", __FUNCTION__);
+         for (i = 0; i < n; i ++)
+           putc (buf[i], stdout);
+         printf ("\"\n");
+       }
+
       if (n < 0)
         {
           if (errno == EINTR)
@@ -294,7 +318,6 @@ read_assuan (int fd)
       p = buf;
       nleft -= n;
       buf += n;
-      nread += n;
       
       for (; n && *p != '\n'; n--, p++)
         ;
@@ -303,16 +326,15 @@ read_assuan (int fd)
           if (n>1)
             {
               n--;
-              memcpy (pending, p+1, n);
+              memcpy (pending, p + 1, n);
               pending_len = n;
             }
+         *p = '\0';
           break;
         }
     }
   if (!nleft)
     die ("received line too large");
-  assert (nread>0);
-  recv_line[nread-1] = 0;
 
   p = recv_line;
   if (p[0] == 'O' && p[1] == 'K' && (p[2] == ' ' || !p[2]))
@@ -362,7 +384,8 @@ write_assuan (int fd, const char *line)
     buffer[n++] = '\n';
 
   if (writen (fd, buffer, n))
-      die ("sending line to %d failed: %s", fd, strerror (errno));
+      die ("sending line (\"%s\") to %d failed: %s", buffer, fd,
+          strerror (errno));
 }
 
 
@@ -420,6 +443,8 @@ start_server (const char *pgmname)
          close (fd);
         }
 
+      close (wp[1]);
+      close (rp[0]);
       execl (pgmname, arg0, "--server", NULL); 
       die ("exec failed for `%s': %s", pgmname, strerror (errno));
     }