index 0513ee0586ad6dc6fcc3dbfa0b39cf0a13297fc9..dcd12b033d76cbaa61836013617bccde9acb64e4 100644 (file)
--- a/src/tools/sysdb/input.c
+++ b/src/tools/sysdb/input.c
#endif /* HAVE_CONFIG_H */
#include "tools/sysdb/input.h"
+#include "tools/sysdb/command.h"
#include "utils/strbuf.h"
*/
static size_t
-input_readline(sdb_strbuf_t *buf)
+input_readline(sdb_input_t *input)
{
const char *prompt = "sysdb=> ";
char *line;
size_t len;
- if (sdb_strbuf_len(buf))
+ if (input->query_len)
prompt = "sysdb-> ";
line = readline(prompt);
if (! line)
return 0;
- len = strlen(line);
+ len = strlen(line) + 1;
- sdb_strbuf_append(buf, line);
+ sdb_strbuf_append(input->input, line);
+ sdb_strbuf_append(input->input, "\n");
free(line);
return len;
} /* input_readline */
sdb_input_readline(sdb_input_t *input, char *buf,
int *n_chars, size_t max_chars)
{
- const char *query;
size_t len;
- len = sdb_strbuf_len(input->buf) - input->tokenizer_pos;
+ len = sdb_strbuf_len(input->input) - input->tokenizer_pos;
if (! len) {
- size_t n = input_readline(input->buf);
+ size_t n = input_readline(input);
if (! n) {
*n_chars = 0; /* YY_NULL */
return 0;
len += n;
}
- query = sdb_strbuf_string(input->buf);
-
len = (len < max_chars) ? len : max_chars;
- strncpy(buf, sdb_strbuf_string(input->buf) + input->tokenizer_pos, len);
+ strncpy(buf, sdb_strbuf_string(input->input) + input->tokenizer_pos, len);
input->tokenizer_pos += len;
*n_chars = (int)len;
- /* XXX */
- if (! strchr(query, (int)';'))
- return (ssize_t)len;
- sdb_strbuf_clear(input->buf);
- input->tokenizer_pos = 0;
return (ssize_t)len;
} /* sdb_input_readline */
+int
+sdb_input_exec_query(sdb_input_t *input)
+{
+ char *query = sdb_command_exec(input);
+
+ if (! query)
+ return -1;
+
+ if (*query != ' ')
+ add_history(query);
+ free(query);
+ return 0;
+} /* sdb_input_exec_query */
+
/* vim: set tw=78 sw=4 ts=4 noexpandtab : */