X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=builtins%2Flet.def;h=2601fb95fe2fa82ca1309c08b92e1106c2919be1;hb=3185942a5234e26ab13fa02f9c51d340cec514f8;hp=fdb3a6f6d8a83a0296bb59b83d4c6c49abeeb762;hpb=726f63884db0132f01745f1fb4465e6621088ccf;p=platform%2Fupstream%2Fbash.git diff --git a/builtins/let.def b/builtins/let.def index fdb3a6f..2601fb9 100644 --- a/builtins/let.def +++ b/builtins/let.def @@ -1,44 +1,58 @@ This file is let.def, from which is created let.c. It implements the builtin "let" in Bash. -Copyright (C) 1987, 1989, 1991 Free Software Foundation, Inc. +Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. -Bash is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 1, or (at your option) any later -version. +Bash is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. -Bash is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. +Bash is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with Bash; see the file COPYING. If not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +You should have received a copy of the GNU General Public License +along with Bash. If not, see . $BUILTIN let $FUNCTION let_builtin $PRODUCES let.c $SHORT_DOC let arg [arg ...] -Each ARG is an arithmetic expression to be evaluated. Evaluation -is done in long integers with no check for overflow, though division -by 0 is trapped and flagged as an error. The following list of -operators is grouped into levels of equal-precedence operators. -The levels are listed in order of decreasing precedence. - - - unary minus - ! logical NOT - * / % multiplication, division, remainder - + - addition, subtraction - <= >= < > comparison - == != equality inequality - = assignment +Evaluate arithmetic expressions. + +Evaluate each ARG as an arithmetic expression. Evaluation is done in +fixed-width integers with no check for overflow, though division by 0 +is trapped and flagged as an error. The following list of operators is +grouped into levels of equal-precedence operators. The levels are listed +in order of decreasing precedence. + + id++, id-- variable post-increment, post-decrement + ++id, --id variable pre-increment, pre-decrement + -, + unary minus, plus + !, ~ logical and bitwise negation + ** exponentiation + *, /, % multiplication, division, remainder + +, - addition, subtraction + <<, >> left and right bitwise shifts + <=, >=, <, > comparison + ==, != equality, inequality + & bitwise AND + ^ bitwise XOR + | bitwise OR + && logical AND + || logical OR + expr ? expr : expr + conditional operator + =, *=, /=, %=, + +=, -=, <<=, >>=, + &=, ^=, |= assignment Shell variables are allowed as operands. The name of the variable -is replaced by its value (coerced to a long integer) within +is replaced by its value (coerced to a fixed-width integer) within an expression. The variable need not have its integer attribute turned on to be used in an expression. @@ -46,32 +60,70 @@ Operators are evaluated in order of precedence. Sub-expressions in parentheses are evaluated first and may override the precedence rules above. -If the last ARG evaluates to 0, let returns 1; 0 is returned -otherwise. +Exit Status: +If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.. $END +#include + +#if defined (HAVE_UNISTD_H) +# ifdef _MINIX +# include +# endif +# include +#endif + +#include "../bashintl.h" + #include "../shell.h" +#include "common.h" /* Arithmetic LET function. */ +int let_builtin (list) WORD_LIST *list; { - long ret = 0L; + intmax_t ret; + int expok; + + /* Skip over leading `--' argument. */ + if (list && list->word && ISOPTION (list->word->word, '-')) + list = list->next; - if (!list) + if (list == 0) { - builtin_error ("argument (expression) expected"); + builtin_error (_("expression expected")); return (EXECUTION_FAILURE); } - while (list) + for (; list; list = list->next) { - ret = evalexp (list->word->word); - list = list->next; + ret = evalexp (list->word->word, &expok); + if (expok == 0) + return (EXECUTION_FAILURE); + } + + return ((ret == 0) ? EXECUTION_FAILURE : EXECUTION_SUCCESS); +} + +#ifdef INCLUDE_UNUSED +int +exp_builtin (list) + WORD_LIST *list; +{ + char *exp; + intmax_t ret; + int expok; + + if (list == 0) + { + builtin_error (_("expression expected")); + return (EXECUTION_FAILURE); } - if (ret == 0L) - return (EXECUTION_FAILURE); - else - return (EXECUTION_SUCCESS); + exp = string_list (list); + ret = evalexp (exp, &expok); + (void)free (exp); + return (((ret == 0) || (expok == 0)) ? EXECUTION_FAILURE : EXECUTION_SUCCESS); } +#endif