Tool name: rcp

rcp/rcp.c:

        * Removed getopt () interface
        * Added argp_* interface
        * Removed help () and usage ()
        * Moved 'fflag' and 'tflag' out of main ()
        * Included libinetutils/libinetutils.h


Index: rcp/rcp.c
===================================================================
RCS file: /sources/inetutils/inetutils/rcp/rcp.c,v
retrieving revision 1.29
diff -u -p -r1.29 rcp.c
--- rcp/rcp.c	3 Sep 2007 20:14:19 -0000	1.29
+++ rcp/rcp.c	22 Aug 2008 18:31:05 -0000
@@ -65,10 +65,11 @@
 #include <string.h>
 #include <string.h>
 #include <unistd.h>
-#include <getopt.h>
+#include <argp.h>
 #ifndef HAVE_UTIMES
 # include <utime.h>		/* If we don't have utimes(), use utime(). */
 #endif
+#include <libinetutils/libinetutils.h>
 
 #include "extern.h"
 
@@ -85,45 +86,21 @@ extern char *krb_realmofhost ();
 
 # ifdef CRYPT
 int doencrypt = 0;
-#  define OPTIONS	"dfKk:prtxV"
-# else
-#  define OPTIONS	"dfKk:prtV"
 # endif
-#else
-# define OPTIONS "dfprtV"
 #endif /* KERBEROS  */
 
 #if !defined (S_ISTXT) && defined (S_ISVTX)
 # define S_ISTXT S_ISVTX
 #endif
 
-static const char *short_options = OPTIONS;
-static struct option long_options[] = {
-  {"recursive", required_argument, 0, 'r'},
-  {"preserve", no_argument, 0, 'p'},
-#ifdef KERBEROS
-  {"kerberos", no_argument, 0, 'K'},
-  {"realm", required_argument, 0, 'k'},
-# ifdef CRYPT
-  {"encrypt", no_argument, 0, 'x'},
-# endif
-#endif
-  {"help", no_argument, 0, 'h'},
-  {"version", no_argument, 0, 'V'},
-  /* Server option.  */
-  {"directory", required_argument, 0, 'd'},
-  {"from", required_argument, 0, 'f'},
-  {"to", required_argument, 0, 't'},
-  {0, 0, 0, 0}
-};
-
-
 struct passwd *pwd;
 u_short port;
 uid_t userid;
 int errs, rem;
 int pflag, iamremote, iamrecursive, targetshouldbedirectory;
 
+int fflag, tflag;
+
 #define CMDNEEDS	64
 char cmd[CMDNEEDS];		/* must hold "rcp -r -p -d\0" */
 
@@ -137,84 +114,110 @@ void sink (int, char *[]);
 void source (int, char *[]);
 void tolocal (int, char *[]);
 void toremote (char *, int, char *[]);
-void usage (void);
-void help (void);
 
 char *program_name;
 
-int
-main (int argc, char *argv[])
-{
-  struct servent *sp;
-  int ch, fflag, tflag;
-  char *targ;
-  const char *shell;
+ARGP_PROGRAM_DATA ("rcp", "2008", "FIXME unknown");
 
-  program_name = argv[0];
+const char args_doc[] = "f1 ... fn directory";
+const char doc[] = "Remote file copy.";
 
-  fflag = tflag = 0;
-  while ((ch = getopt_long (argc, argv, short_options, long_options, 0))
-	 != EOF)
-    switch (ch)
-      {				/* User-visible flags. */
-      case 'K':
+static struct argp_option argp_options[] = {
+#define GRP 0
+  {"recursive", 'r', NULL, 0, "If any of the source files are directories,"
+    "copies each subtree rooted at that name; in this case the destination"
+    "must be a directory", GRP+1},
+  {"preserve", 'p', NULL, 0, "Attempt to preserve (duplicate) in its copies"
+    "the modification times and modes of the source files", GRP+1},
+#ifdef KERBEROS
+  {"kerberos", 'K', NULL, 0, "Turns off all Kerberos authentication", GRP+1},
+  {"realm", 'k', "REALM", 0, "Obtain tickets for the remote host in REALM"
+    "instead of the remote host's realm", GRP+1},
+#ifdef CRYPT
+  {"encrypt", 'x', NULL, 0, "Encrypt all data using DES", GRP+1},
+#endif
+#endif
+  {"directory", 'd', NULL, OPTION_HIDDEN, NULL, GRP+1},
+  {"from", 'f', NULL, OPTION_HIDDEN, NULL, GRP+1},
+  {"to", 't', NULL, OPTION_HIDDEN, NULL, GRP+1},
+#undef GRP
+  {NULL}
+};
+
+static error_t
+parse_opt (int key, char *arg, struct argp_state *state)
+{
+  switch (key)
+  {				/* User-visible flags. */
+    case 'K':
 #ifdef KERBEROS
-	use_kerberos = 0;
+      use_kerberos = 0;
 #endif
-	break;
+      break;
 
 #ifdef	KERBEROS
-      case 'k':
-	dest_realm = dest_realm_buf;
-	strncpy (dest_realm_buf, optarg, REALM_SZ);
-	break;
+    case 'k':
+      dest_realm = dest_realm_buf;
+      strncpy (dest_realm_buf, arg, REALM_SZ);
+      break;
 
 # ifdef CRYPT
-      case 'x':
-	doencrypt = 1;
-	/* des_set_key(cred.session, schedule); */
-	break;
+    case 'x':
+      doencrypt = 1;
+			/* des_set_key(cred.session, schedule); */
+      break;
 # endif
 #endif
 
-      case 'p':
-	pflag = 1;
-	break;
-
-      case 'r':
-	iamrecursive = 1;
-	break;
-
-	/* Server options. */
-      case 'd':
-	targetshouldbedirectory = 1;
-	break;
-
-      case 'f':		/* "from" */
-	iamremote = 1;
-	fflag = 1;
-	break;
-
-      case 't':		/* "to" */
-	iamremote = 1;
-	tflag = 1;
-	break;
-
-      case 'V':
-	printf ("rcp (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
-	exit (0);
-	break;
-
-      case 'h':
-	help ();
-	break;
-
-      case '?':
-      default:
-	usage ();
-      }
-  argc -= optind;
-  argv += optind;
+    case 'p':
+      pflag = 1;
+      break;
+
+    case 'r':
+      iamrecursive = 1;
+      break;
+
+      /* Server options. */
+    case 'd':
+      targetshouldbedirectory = 1;
+      break;
+
+    case 'f':		/* "from" */
+      iamremote = 1;
+      fflag = 1;
+      break;
+
+    case 't':		/* "to" */
+      iamremote = 1;
+      tflag = 1;
+      break;
+		
+    default:
+      return ARGP_ERR_UNKNOWN;
+  }
+
+  return 0;
+}
+
+static struct argp argp = {argp_options, parse_opt, args_doc, doc};
+
+int
+main (int argc, char *argv[])
+{
+  struct servent *sp;
+  char *targ;
+  const char *shell;
+  int index = 0;
+
+  program_name = argv[0];
+
+  fflag = tflag = 0;
+
+  /* Parse command line */
+  argp_parse (&argp, argc, argv, 0, &index, NULL);
+ 
+  argc -= index;
+  argv += index;
 
 #ifdef KERBEROS
   if (use_kerberos)
@@ -260,8 +263,11 @@ main (int argc, char *argv[])
       exit (errs);
     }
 
-  if (argc < 2)
-    usage ();
+	if (argc < 2)
+	{
+		argp_help (&argp, stderr, ARGP_HELP_USAGE, "rcp");
+		exit (argp_err_exit_status);
+	}
   if (argc > 2)
     targetshouldbedirectory = 1;
 
@@ -1026,58 +1032,6 @@ response ()
     }
 }
 
-void
-usage ()
-{
-#ifdef KERBEROS
-# ifdef CRYPT
-  fprintf (stderr, "%s\n\t%s\n",
-	   "usage: rcp [-Kpx] [-k realm] f1 f2",
-	   "or: rcp [-Kprx] [-k realm] f1 ... fn directory");
-# else
-  fprintf (stderr, "%s\n\t%s\n",
-	   "usage: rcp [-Kp] [-k realm] f1 f2",
-	   "or: rcp [-Kpr] [-k realm] f1 ... fn directory");
-# endif
-#else
-  fprintf (stderr,
-	   "usage: rcp [-p] f1 f2; or: rcp [-pr] f1 ... fn directory\n");
-#endif
-  exit (1);
-}
-
-void
-help ()
-{
-  puts ("rcp - remote file copy.");
-  puts ("usage: rcp [-p] f1 f2; or: rcp [-pr] f1 ... fn directory\n");
-  puts ("\
-  -p, --preserve    attempt to preserve (duplicate) in its copies the\n\
-                    modification times and modes of the source files");
-  puts ("\
-  -r, --recursive   If any of the source files are directories, copies\n\
-                    each subtree rooted at that name; in this case the\n\
-                    destination must be a directory");
-
-#ifdef KERBEROS
-  puts ("\
-  -K, --kerberos    turns off all Kerberos authentication");
-  puts ("\
-  -k, --realm REALM Obtain tickets for the remote host in REALM\n\
-                    instead of the remote host's realm");
-# ifdef CRYPT
-  puts ("\
-  -x, --encrypt     encrypt all data using DES");
-# endif
-#endif
-  puts ("\
-      --help        give this help list");
-  puts ("\
-  -V, --version     print program version");
-  fprintf (stdout, "\nSubmit bug reports to %s.\n", PACKAGE_BUGREPORT);
-  exit (0);
-}
-
 #if defined(HAVE_STDARG_H) && defined(__STDC__) && __STDC__
 # include <stdarg.h>
 #else
_______________________________________________
bug-inetutils mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-inetutils

Reply via email to