Fix xargs option parsing
diff --git a/findutils/xargs.c b/findutils/xargs.c
index bf68cf7..a6f8058 100644
--- a/findutils/xargs.c
+++ b/findutils/xargs.c
@@ -37,34 +37,39 @@
 	char traceflag = 0;
 	int len_args_from_cmdline, len_cmd_to_be_executed, len, opt;
 
-	while ((opt = getopt(argc, argv, "t")) != EOF) {
-		switch (opt) {
-		case 't':
-			traceflag=1;
-			break;
-		default:
-			fatalError(xargs_usage);
+	/* Note that we do not use getopt here, since
+	 * we only want to interpret initial options,
+	 * not options passed to commands */
+	while (--argc && **(++argv) == '-') {
+		while (*++(*argv)) {
+			switch (**argv) {
+				case 't':
+					traceflag=1;
+					break;
+				default:
+					fatalError(xargs_usage);
+				}
 		}
 	}
 
 	/* Store the command and arguments to be executed (from the command line) */
-	if (optind == argc) {
+	if (argc == 1) {
 		len_args_from_cmdline = 6;
 		args_from_cmdline = xmalloc(len_args_from_cmdline);
 		strcat(args_from_cmdline, "echo ");
 	} else {
-		opt=strlen(argv[optind]);
+		opt=strlen(*argv);
 		len_args_from_cmdline = (opt > 10)? opt : 10;
 		args_from_cmdline = xcalloc(len_args_from_cmdline, sizeof(char));
-		for (; optind < argc; optind++) {
-			if (strlen(argv[optind]) + strlen(args_from_cmdline) >
+		while (argc-- > 0) {
+			if (strlen(*argv) + strlen(args_from_cmdline) >
 				len_args_from_cmdline) {
-				len_args_from_cmdline += strlen(argv[optind]);
+				len_args_from_cmdline += strlen(*argv);
 				args_from_cmdline =
 					xrealloc(args_from_cmdline,
 							 len_args_from_cmdline+1);
 			}
-			strcat(args_from_cmdline, argv[optind]);
+			strcat(args_from_cmdline, *argv);
 			strcat(args_from_cmdline, " ");
 		}
 	}