Fix bug 901.
[gnupg.git] / tools / watchgnupg.c
index dfb11f2..213a2cb 100644 (file)
@@ -1,11 +1,11 @@
 /* watchgnupg.c - Socket server for GnuPG logs
- *     Copyright (C) 2003 Free Software Foundation, Inc.
+ *     Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
  * 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,
  * 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/>.
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 #include <stdio.h>
 #include <stdlib.h>
 #include <stddef.h>
 
 #define PGM "watchgnupg"
 
+/* Allow for a standalone build. */
+#ifdef VERSION
+#define MYVERSION_LINE PGM " (GnuPG) " VERSION
+#define BUGREPORT_LINE "\nReport bugs to <bug-gnupg@gnu.org>.\n"
+#else
+#define MYVERSION_LINE PGM 
+#define BUGREPORT_LINE ""
+#endif
+
+#ifndef PF_LOCAL
+# ifdef PF_UNIX
+#  define PF_LOCAL PF_UNIX
+# else
+#  define PF_LOCAL AF_UNIX
+# endif
+# ifndef AF_LOCAL
+#  define AF_LOCAL AF_UNIX
+# endif
+#endif
+
+
 static int verbose;
-static int debug;
 
 
 static void
@@ -169,6 +191,29 @@ print_line (client_t c, const char *line)
 }
 
 
+static void
+print_version (int with_help)
+{
+  fputs (MYVERSION_LINE "\n"
+         "Copyright (C) 2004 Free Software Foundation, Inc.\n"
+         "This program comes with ABSOLUTELY NO WARRANTY.\n"
+         "This is free software, and you are welcome to redistribute it\n"
+         "under certain conditions. See the file COPYING for details.\n",
+         stdout);
+        
+  if (with_help)
+    fputs ("\n"
+          "Usage: " PGM " [OPTIONS] SOCKETNAME\n"
+          "Open the local socket SOCKETNAME and display log messages\n"
+          "\n"
+          "  --force     delete an already existing socket file\n"
+          "  --verbose   enable extra informational output\n"
+          "  --version   print version of the program and exit\n"
+          "  --help      display this help and exit\n"
+          BUGREPORT_LINE, stdout );
+  
+  exit (0);
+}
 
 int 
 main (int argc, char **argv)
@@ -177,7 +222,7 @@ main (int argc, char **argv)
   int force = 0;
 
   struct sockaddr_un srvr_addr;
-  int addrlen;
+  socklen_t addrlen;
   int server;
   int flags;
   client_t client_list = NULL;
@@ -189,22 +234,18 @@ main (int argc, char **argv)
   while (argc && last_argc != argc )
     {
       last_argc = argc;
-      if (!strcmp (*argv, "--help"))
-        {
-          puts (
-                "usage: " PGM " [options] socketname\n"
-                "\n"
-                "       Options are --verbose, --debug and --force");
-          exit (0);
-        }
-      if (!strcmp (*argv, "--verbose"))
+      if (!strcmp (*argv, "--"))
         {
-          verbose = 1;
           argc--; argv++;
+          break;
         }
-      else if (!strcmp (*argv, "--debug"))
+      else if (!strcmp (*argv, "--version"))
+        print_version (0);
+      else if (!strcmp (*argv, "--help"))
+        print_version (1);
+      else if (!strcmp (*argv, "--verbose"))
         {
-          verbose = debug = 1;
+          verbose = 1;
           argc--; argv++;
         }
       else if (!strcmp (*argv, "--force"))
@@ -216,7 +257,8 @@ main (int argc, char **argv)
  
   if (argc != 1)
     {
-      die ("usage: " PGM " socketname\n");
+      fprintf (stderr, "usage: " PGM " socketname\n");
+      exit (1);
     }
 
 
@@ -323,7 +365,7 @@ main (int argc, char **argv)
             int n;
             
             n = read (client->fd, line, sizeof line - 1);
-            if (n == 1)
+            if (n < 0)
               {
                 int save_errno = errno;
                 print_line (client, NULL); /* flush */