Code

sysdb: Hide implementation details in the "input" module.
[sysdb.git] / src / tools / sysdb / main.c
index 0639e5f74829042a4e3a8532b97f6ee74d853236..bc34a480f74ef7ebc9100a91a877aea97f6f2163 100644 (file)
@@ -29,6 +29,8 @@
 #      include "config.h"
 #endif /* HAVE_CONFIG_H */
 
+#include "tools/sysdb/input.h"
+
 #include "client/sysdb.h"
 #include "client/sock.h"
 #include "utils/error.h"
@@ -163,15 +165,13 @@ get_homedir(const char *username)
 int
 main(int argc, char **argv)
 {
-       sdb_client_t *client;
-
        const char *host = NULL;
        const char *user = NULL;
 
        const char *homedir;
        char hist_file[1024] = "";
 
-       sdb_strbuf_t *buf;
+       sdb_input_t input = SDB_INPUT_INIT;
 
        while (42) {
                int opt = getopt(argc, argv, "H:U:hV");
@@ -209,14 +209,14 @@ main(int argc, char **argv)
                        exit(1);
        }
 
-       client = sdb_client_create(host);
-       if (! client) {
+       input.client = sdb_client_create(host);
+       if (! input.client) {
                sdb_log(SDB_LOG_ERR, "Failed to create client object");
                exit(1);
        }
-       if (sdb_client_connect(client, user)) {
+       if (sdb_client_connect(input.client, user)) {
                sdb_log(SDB_LOG_ERR, "Failed to connect to SysDBd");
-               sdb_client_destroy(client);
+               sdb_client_destroy(input.client);
                exit(1);
        }
 
@@ -238,31 +238,9 @@ main(int argc, char **argv)
                }
        }
 
-       buf = sdb_strbuf_create(1024);
-
-       while (42) {
-               const char *prompt = "sysdb=> ";
-               const char *query;
-               char *input;
-
-               if (sdb_strbuf_len(buf))
-                       prompt = "sysdb-> ";
-
-               input = readline(prompt);
-
-               if (! input)
-                       break;
-
-               sdb_strbuf_append(buf, input);
-               free(input);
-
-               query = sdb_strbuf_string(buf);
-               if (! strchr(query, (int)';'))
-                       continue;
-
-               /* XXX */
-               sdb_strbuf_clear(buf);
-       }
+       input.input = sdb_strbuf_create(2048);
+       sdb_input_init(&input);
+       sdb_input_mainloop();
 
        if (hist_file[0] != '\0') {
                errno = 0;
@@ -273,7 +251,8 @@ main(int argc, char **argv)
                }
        }
 
-       sdb_client_destroy(client);
+       sdb_client_destroy(input.client);
+       sdb_strbuf_destroy(input.input);
        return 0;
 } /* main */