+/*-
+ * Copyright (c) <2010>, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * - Neither the name of Intel Corporation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
/*
* Copyright (c) 2009, Olivier MATZ <zer0@droids-corp.org>
* All rights reserved.
#include <stdarg.h>
#include <inttypes.h>
#include <fcntl.h>
+#include <termios.h>
+#ifndef CMDLINE_NO_SOCKET
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/un.h>
+#endif
#include "cmdline_parse.h"
#include "cmdline_rdline.h"
+#include "cmdline_socket.h"
#include "cmdline.h"
/**********************/
+#ifndef CMDLINE_NO_SOCKET
int
cmdline_tcpv4_listen(in_addr_t addr, uint16_t port)
{
}
struct cmdline *
-cmdline_stdin_new(cmdline_parse_ctx_t *ctx, const char *prompt)
+cmdline_accept(cmdline_parse_ctx_t *ctx, const char *prompt, int s)
{
- return (cmdline_new(ctx, prompt, 0, 1));
+ int s2;
+ struct sockaddr sin;
+ socklen_t sinlen;
+
+ sinlen = sizeof(struct sockaddr);
+
+ if ((s2 = accept(s, &sin, &sinlen)) < 0) {
+ dprintf("accept() failed\n");
+ return NULL;
+ }
+
+ return (cmdline_new(ctx, prompt, s2, s2));
}
+#endif
struct cmdline *
cmdline_file_new(cmdline_parse_ctx_t *ctx, const char *prompt, const char *path)
}
struct cmdline *
-cmdline_accept(cmdline_parse_ctx_t *ctx, const char *prompt, int s)
+cmdline_stdin_new(cmdline_parse_ctx_t *ctx, const char *prompt)
{
- int s2;
- struct sockaddr sin;
- socklen_t sinlen;
+ struct cmdline *cl;
+#ifdef CMDLINE_TERMIOS
+ struct termios oldterm, term;
- sinlen = sizeof(struct sockaddr);
+ tcgetattr(0, &oldterm);
+ memcpy(&term, &oldterm, sizeof(term));
+ term.c_lflag &= ~(ICANON | ECHO | ISIG);
+ tcsetattr(0, TCSANOW, &term);
+ setbuf(stdin, NULL);
+#endif
- if ((s2 = accept(s, &sin, &sinlen)) < 0) {
- dprintf("accept() failed\n");
- return NULL;
- }
+ cl = cmdline_new(ctx, prompt, 0, 1);
- return (cmdline_new(ctx, prompt, s2, s2));
+#ifdef CMDLINE_TERMIOS
+ memcpy(&cl->oldterm, &oldterm, sizeof(term));
+#endif
+ return cl;
}
+void
+cmdline_stdin_exit(struct cmdline *cl)
+{
+#ifdef CMDLINE_TERMIOS
+ tcsetattr(fileno(stdin), TCSANOW, &cl->oldterm);
+#else
+ /* silent the compiler */
+ cl = cl;
+#endif
+}