X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=src%2Flib%2Fcmdline.c;h=bafaace8cad8cd0d329a4677780798ff9d832cc5;hb=c39d452741fe5b6c771bb655fa0c827a064f4460;hp=bf225e81c79a48f3d5ec14831080048c8e765d4f;hpb=c60ed50ac1449a2b2bccc33598d1f68458a36fb1;p=libcmdline.git diff --git a/src/lib/cmdline.c b/src/lib/cmdline.c index bf225e8..bafaace 100644 --- a/src/lib/cmdline.c +++ b/src/lib/cmdline.c @@ -1,3 +1,37 @@ +/*- + * 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 * All rights reserved. @@ -32,24 +66,16 @@ #include #include #include - -#include +#include #include -#include -#include #include "cmdline_parse.h" #include "cmdline_rdline.h" #include "cmdline.h" - -#define PROMPT_SUFFIX "> " - - -/**********************/ - -void -cmdline_valid_buffer(struct rdline *rdl, const char *buf, unsigned int size) +static void +cmdline_valid_buffer(struct rdline *rdl, const char *buf, + __attribute__((unused)) unsigned int size) { struct cmdline *cl = rdl->opaque; int ret; @@ -62,7 +88,7 @@ cmdline_valid_buffer(struct rdline *rdl, const char *buf, unsigned int size) cmdline_printf(cl, "Bad arguments\n"); } -int +static int cmdline_complete_buffer(struct rdline *rdl, const char *buf, char *dstbuf, unsigned int dstsize, int *state) @@ -140,11 +166,10 @@ cmdline_in(struct cmdline *cl, const char *buf, int size) int ret = 0; int i, same; - /* XXX use defines instead of hardcoded values */ for (i=0; irdl, buf[i]); - if (ret == 1) { + if (ret == RDLINE_RES_VALIDATED) { buffer = rdline_get_buffer(&cl->rdl); history = rdline_get_history_item(&cl->rdl, 0); if (history) { @@ -157,8 +182,31 @@ cmdline_in(struct cmdline *cl, const char *buf, int size) rdline_add_history(&cl->rdl, buffer); rdline_newline(&cl->rdl, cl->prompt); } - else if (ret == -2) + else if (ret == RDLINE_RES_EOF) + return -1; + else if (ret == RDLINE_RES_EXITED) return -1; } return i; } + +void +cmdline_quit(struct cmdline *cl) +{ + rdline_quit(&cl->rdl); +} + +void +cmdline_interact(struct cmdline *cl) +{ + char c; + + c = -1; + while (1) { + read(cl->s_in, &c, 1); + if (cmdline_in(cl, &c, 1) < 0) { + break; + } + } + cmdline_free(cl); +}