X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=src%2Flib%2Fcmdline_parse.c;h=334b3e37884b5f8114aedbe20c120a64afb65e5d;hb=36dfbc791ada2e788180a474299d25641f56903f;hp=aec9e804f451e493bd8d84a7f7b4c4fd40253a30;hpb=c60ed50ac1449a2b2bccc33598d1f68458a36fb1;p=libcmdline.git diff --git a/src/lib/cmdline_parse.c b/src/lib/cmdline_parse.c index aec9e80..334b3e3 100644 --- a/src/lib/cmdline_parse.c +++ b/src/lib/cmdline_parse.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. @@ -119,9 +153,16 @@ match_inst(cmdline_parse_inst_t *inst, const char *buf, unsigned int nb_match_to if ( isendofline(*buf) || iscomment(*buf) ) break; - n = token_hdr.ops->parse(token_p, buf, (result_buf ? result_buf+token_hdr.offset : NULL)); - if ( n < 0 ) + if (result_buf) + n = token_hdr.ops->parse(token_p, buf, + (char *)result_buf + + token_hdr.offset); + else + n = token_hdr.ops->parse(token_p, buf, NULL); + + if (n < 0) break; + debug_printf("TK parsed (len=%d)\n", n); i++; buf += n; @@ -288,11 +329,13 @@ cmdline_complete(struct cmdline *cl, const char *buf, int *state, int l; unsigned int nb_completable; unsigned int nb_non_completable; - unsigned int local_state=0; + int local_state = 0; char *help_str; cmdline_parse_ctx_t *ctx = cl->ctx; debug_printf("%s called\n", __FUNCTION__); + memset(&token_hdr, 0, sizeof(token_hdr)); + /* count the number of complete token to parse */ for (i=0 ; buf[i] ; i++) { if (!isblank2(buf[i]) && isblank2(buf[i+1])) @@ -367,7 +410,7 @@ cmdline_complete(struct cmdline *cl, const char *buf, int *state, /* one or several choices starting with the same chars */ if (completion_len > 0) { - if (completion_len + 1 > size) + if ((unsigned)(completion_len + 1) > size) return 0; strcpy(dst, completion_buf);