null+****@clear*****
null+****@clear*****
2012年 5月 23日 (水) 16:26:41 JST
Kouhei Sutou 2012-05-23 16:26:41 +0900 (Wed, 23 May 2012)
New Revision: 1f6468f10d99030e370fc0608cd31e6d378f564f
Log:
groonga: add --input-fd option
It's for inputing grooga commad from specified file descriptor. It's
useful for running groonga command from script.
Modified files:
src/groonga.c
Modified: src/groonga.c (+23 -2)
===================================================================
--- src/groonga.c 2012-05-23 16:06:19 +0900 (21c790b)
+++ src/groonga.c 2012-05-23 16:26:41 +0900 (76d966e)
@@ -2412,6 +2412,8 @@ show_usage(FILE *output)
"\n"
"Standalone/client options:\n"
" --file <path>: read commands from specified file\n"
+ " --input-fd <FD>: read commands from specified file descriptor\n"
+ " --file has a prioriry over --input-fd\n"
" -p, --port <port number>: specify server port number (client mode only)\n"
" (default: %d)\n"
"\n"
@@ -2477,7 +2479,8 @@ main(int argc, char **argv)
*log_path_arg = NULL, *query_log_path_arg = NULL,
*cache_limit_arg = NULL, *document_root_arg = NULL,
*default_command_version_arg = NULL,
- *default_match_escalation_threshold_arg = NULL;
+ *default_match_escalation_threshold_arg = NULL,
+ *input_fd_arg = NULL;
const char *config_path = NULL;
int exit_code = EXIT_SUCCESS;
int i, mode = mode_alone;
@@ -2506,6 +2509,7 @@ main(int argc, char **argv)
{'\0', "default-command-version", NULL, 0, getopt_op_none},
{'\0', "default-match-escalation-threshold", NULL, 0, getopt_op_none},
{'\0', "bind-address", NULL, 0, getopt_op_none},
+ {'\0', "input-fd", NULL, 0, getopt_op_none},
{'\0', NULL, NULL, 0, 0}
};
opts[0].arg = &port_arg;
@@ -2524,6 +2528,7 @@ main(int argc, char **argv)
opts[21].arg = &default_command_version_arg;
opts[22].arg = &default_match_escalation_threshold_arg;
opts[23].arg = &bind_address_arg;
+ opts[24].arg = &input_fd_arg;
init_default_settings();
@@ -2685,7 +2690,23 @@ main(int argc, char **argv)
}
batchmode = GRN_TRUE;
} else {
- batchmode = !isatty(0);
+ if (input_fd_arg) {
+ const char * const end = input_fd_arg + strlen(input_fd_arg);
+ const char *rest = NULL;
+ const int input_fd = grn_atoi(input_fd_arg, end, &rest);
+ if (rest != end || input_fd == 0) {
+ fprintf(stderr, "invalid input FD: <%s>\n", input_fd_arg);
+ return EXIT_FAILURE;
+ }
+ if (dup2(input_fd, STDIN_FILENO) == -1) {
+ fprintf(stderr, "can't open input FD: %d (%s)\n",
+ input_fd, strerror(errno));
+ return EXIT_FAILURE;
+ }
+ batchmode = GRN_TRUE;
+ } else {
+ batchmode = !isatty(0);
+ }
}
if (bind_address_arg) {