Add some tests.
[gnupg.git] / tests / asschk.c
index 83a8ca5..176fcac 100644 (file)
@@ -5,7 +5,7 @@
  *
  * GnuPG is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
  * GnuPG is distributed in the hope that it will be useful,
@@ -14,8 +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, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
 /* 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,7 +199,7 @@ die (const char *format, ...)
   exit (1);
 }
 
-#define die(format, args...) (die) ("%s: " format, __FUNCTION__ , ##args)
+#define die(format, args...) (die) ("%s: " format, __func__ , ##args)
 
 static void
 err (const char *format, ...)
@@ -260,10 +271,12 @@ writen (int fd, const char *buffer, size_t length)
    type and store that in recv_type.  The function terminates on a
    communication error.  Returns a pointer into the inputline to the
    first byte of the arguments.  The parsing is very strict to match
-   excalty what we want to send. */
+   exaclty what we want to send. */
 static char *
 read_assuan (int fd)
 {
+  /* FIXME: For general robustness, the pending stuff needs to be
+     associated with FD.  */
   static char pending[MAX_LINELEN];
   static size_t pending_len;
   size_t nleft = sizeof recv_line;
@@ -283,23 +296,26 @@ read_assuan (int fd)
           pending_len = 0;
         }
       else
-        n = read (fd, buf, nleft);
-
-      if (opt_verbose)
+        {
+          do
+            {
+              n = read (fd, buf, nleft);
+            }
+          while (n < 0 && errno == EINTR);
+        }
+      
+      if (opt_verbose && n >= 0 )
        {
          int i;
-         printf ("%s: read \"", __FUNCTION__);
+
+         printf ("%s: read \"", __func__);
          for (i = 0; i < n; i ++)
            putc (buf[i], stdout);
          printf ("\"\n");
        }
 
       if (n < 0)
-        {
-          if (errno == EINTR)
-            continue;
-          die ("reading fd %d failed: %s", fd, strerror (errno));
-        }
+        die ("reading fd %d failed: %s", fd, strerror (errno));
       else if (!n)
         die ("received incomplete line on fd %d", fd);
       p = buf;