trigger: enable separate remote and local trigger

Change the options so that we have the trigger file and command
separate, and remote and local trigger command separate as well.

Signed-off-by: Jens Axboe <axboe@fb.com>
diff --git a/init.c b/init.c
index 108f2b8..b72689a 100644
--- a/init.c
+++ b/init.c
@@ -65,8 +65,9 @@
 int status_interval = 0;
 
 char *trigger_file = NULL;
-char *trigger_cmd = NULL;
 long long trigger_timeout = 0;
+char *trigger_cmd = NULL;
+char *trigger_remote_cmd = NULL;
 
 static int prev_group_jobs;
 
@@ -246,7 +247,7 @@
 		.val		= 'L',
 	},
 	{
-		.name		= (char *) "trigger",
+		.name		= (char *) "trigger-file",
 		.has_arg	= required_argument,
 		.val		= 'W',
 	},
@@ -256,6 +257,16 @@
 		.val		= 'B',
 	},
 	{
+		.name		= (char *) "trigger",
+		.has_arg	= required_argument,
+		.val		= 'H',
+	},
+	{
+		.name		= (char *) "trigger-remote",
+		.has_arg	= required_argument,
+		.val		= 'J',
+	},
+	{
 		.name		= NULL,
 	},
 };
@@ -287,6 +298,11 @@
 		free_threads_shm();
 	}
 
+	free(trigger_file);
+	free(trigger_cmd);
+	free(trigger_remote_cmd);
+	trigger_file = trigger_cmd = trigger_remote_cmd = NULL;
+
 	options_free(fio_options, &def_thread);
 	fio_filelock_exit();
 	scleanup();
@@ -1679,8 +1695,10 @@
 #ifdef CONFIG_ZLIB
 	printf("  --inflate-log=log\tInflate and output compressed log\n");
 #endif
-	printf("  --trigger=file:cmd\tExecute trigger cmd when file exists\n");
+	printf("  --trigger-file=file\tExecute trigger cmd when file exists\n");
 	printf("  --trigger-timeout=t\tExecute trigger af this time\n");
+	printf("  --trigger=cmd\t\tSet this command as local trigger\n");
+	printf("  --trigger-remote=cmd\tSet this command as remote trigger\n");
 	printf("\nFio was written by Jens Axboe <jens.axboe@oracle.com>");
 	printf("\n                   Jens Axboe <jaxboe@fusionio.com>");
 	printf("\n                   Jens Axboe <axboe@fb.com>\n");
@@ -2200,33 +2218,15 @@
 			status_interval = val / 1000;
 			break;
 			}
-		case 'W': {
-			char *split, *cmd;
-			size_t sz;
-
-			split = strchr(optarg, ':');
-			if (!split) {
-				log_err("fio: trigger is file:command\n");
-				do_exit++;
-				exit_val = 1;
-			}
-
-			sz = split - optarg;
-			if (sz) {
-				trigger_file = calloc(1, sz + 1);
-				strncpy(trigger_file, optarg, sz);
-			}
-
-			split++;
-			cmd = trigger_cmd = strdup(split);
-			strip_blank_front(&trigger_cmd);
-			strip_blank_end(trigger_cmd);
-			if (strlen(trigger_cmd) == 0) {
-				free(cmd);
-				trigger_cmd = NULL;
-			}
+		case 'W':
+			trigger_file = strdup(optarg);
 			break;
-			}
+		case 'H':
+			trigger_cmd = strdup(optarg);
+			break;
+		case 'J':
+			trigger_remote_cmd = strdup(optarg);
+			break;
 		case 'B':
 			if (check_str_time(optarg, &trigger_timeout, 1)) {
 				log_err("fio: failed parsing time %s\n", optarg);