aboutsummaryrefslogtreecommitdiff
path: root/apps/nshlib/nsh_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/nshlib/nsh_test.c')
-rw-r--r--apps/nshlib/nsh_test.c438
1 files changed, 0 insertions, 438 deletions
diff --git a/apps/nshlib/nsh_test.c b/apps/nshlib/nsh_test.c
deleted file mode 100644
index 6e1b65e5f..000000000
--- a/apps/nshlib/nsh_test.c
+++ /dev/null
@@ -1,438 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_test.c
- *
- * Copyright (C) 2008, 2011-2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. Neither the name NuttX 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.
- *
- ****************************************************************************/
-
-/* Test syntax:
- *
- * expression = simple-expression | !expression |
- * expression -o expression | expression -a expression
- *
- * simple-expression = unary-expression | binary-expression
- *
- * unary-expression = string-unary | file-unary
- *
- * string-unary = -n string | -z string
- *
- * file-unary = -b file | -c file | -d file | -e file | -f file |
- * -r file | -s file | -w file
- *
- * binary-expression = string-binary | numeric-binary
- *
- * string-binary = string = string | string == string | string != string
- *
- * numeric-binary = integer -eq integer | integer -ge integer |
- * integer -gt integer | integer -le integer |
- * integer -lt integer | integer -ne integer
- *
- * Note that the smallest expression consists of two strings.
- */
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <sys/stat.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-#if !defined(CONFIG_NSH_DISABLESCRIPT) && !defined(CONFIG_NSH_DISABLE_TEST)
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-#define TEST_TRUE OK
-#define TEST_FALSE ERROR
-#define TEST_ERROR 1
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: binaryexpression
- ****************************************************************************/
-
-static inline int binaryexpression(FAR struct nsh_vtbl_s *vtbl, char **argv)
-{
- char *endptr;
- long integer1;
- long integer2;
-
- /* STRING2 = STRING2 */
-
- if (strcmp(argv[1], "=") == 0 || strcmp(argv[1], "==") == 0)
- {
- /* Return true if the strings are identical */
-
- return strcmp(argv[0], argv[2]) == 0 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* STRING1 != STRING2 */
-
- if (strcmp(argv[1], "!=") == 0)
- {
- /* Return true if the strings are different */
-
- return strcmp(argv[0], argv[2]) != 0 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* The remaining operators assuming that the two values are integers */
-
- integer1 = strtol(argv[0], &endptr, 0);
- if (argv[0][0] == '\0' || *endptr != '\0')
- {
- return TEST_ERROR;
- }
-
- integer2 = strtol(argv[2], &endptr, 0);
- if (argv[2][0] == '\0' || *endptr != '\0')
- {
- return TEST_ERROR;
- }
-
- /* INTEGER1 -eq INTEGER2 */
-
- if (strcmp(argv[1], "-eq") == 0)
- {
- /* Return true if the strings are different */
-
- return integer1 == integer2 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* INTEGER1 -ge INTEGER2 */
-
- if (strcmp(argv[1], "-ge") == 0)
- {
- /* Return true if the strings are different */
-
- return integer1 >= integer2 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* INTEGER1 -gt INTEGER2 */
-
- if (strcmp(argv[1], "-gt") == 0)
- {
- /* Return true if the strings are different */
-
- return integer1 > integer2 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* INTEGER1 -le INTEGER2 */
-
- if (strcmp(argv[1], "-le") == 0)
- {
- /* Return true if the strings are different */
-
- return integer1 <= integer2 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* INTEGER1 -lt INTEGER2 */
-
- if (strcmp(argv[1], "-lt") == 0)
- {
- /* Return true if the strings are different */
-
- return integer1 < integer2 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* INTEGER1 -ne INTEGER2 */
-
- if (strcmp(argv[1], "-ne") == 0)
- {
- /* Return true if the strings are different */
-
- return integer1 != integer2 ? TEST_TRUE : TEST_FALSE;
- }
-
- return TEST_ERROR;
-}
-
-/****************************************************************************
- * Name: unaryexpression
- ****************************************************************************/
-
-static inline int unaryexpression(FAR struct nsh_vtbl_s *vtbl, char **argv)
-{
- struct stat buf;
- char *fullpath;
- int ret;
-
- /* -n STRING */
-
- if (strcmp(argv[0], "-n") == 0)
- {
- /* Return true if the length of the string is non-zero */
-
- return strlen(argv[1]) != 0 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* -z STRING */
-
- if (strcmp(argv[0], "-z") == 0)
- {
- /* Return true if the length of the string is zero */
-
- return strlen(argv[1]) == 0 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* All of the remaining assume that the following argument is the
- * path to a file.
- */
-
- fullpath = nsh_getfullpath(vtbl, argv[1]);
- if (!fullpath)
- {
- return TEST_FALSE;
- }
-
- ret = stat(fullpath, &buf);
- nsh_freefullpath(fullpath);
-
- if (ret != 0)
- {
- /* The file does not exist (or another error occurred) -- return FALSE */
-
- return TEST_FALSE;
- }
-
- /* -b FILE */
-
- if (strcmp(argv[0], "-b") == 0)
- {
- /* Return true if the path is a block device */
-
- return S_ISBLK(buf.st_mode) ? TEST_TRUE : TEST_FALSE;
- }
-
- /* -c FILE */
-
- if (strcmp(argv[0], "-c") == 0)
- {
- /* Return true if the path is a character device */
-
- return S_ISCHR(buf.st_mode) ? TEST_TRUE : TEST_FALSE;
- }
-
- /* -d FILE */
-
- if (strcmp(argv[0], "-d") == 0)
- {
- /* Return true if the path is a directory */
-
- return S_ISDIR(buf.st_mode) ? TEST_TRUE : TEST_FALSE;
- }
-
- /* -e FILE */
-
- if (strcmp(argv[0], "-e") == 0)
- {
- /* Return true if the file exists */
-
- return TEST_TRUE;
- }
-
- /* -f FILE */
-
- if (strcmp(argv[0], "-f") == 0)
- {
- /* Return true if the path refers to a regular file */
-
- return S_ISREG(buf.st_mode) ? TEST_TRUE : TEST_FALSE;
- }
-
- /* -r FILE */
-
- if (strcmp(argv[0], "-r") == 0)
- {
- /* Return true if the file is readable */
-
- return (buf.st_mode & (S_IRUSR|S_IRGRP|S_IROTH)) != 0 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* -s FILE */
-
- if (strcmp(argv[0], "-s") == 0)
- {
- /* Return true if the size of the file is greater than zero */
-
- return buf.st_size > 0 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* -w FILE */
-
- if (strcmp(argv[0], "-w") == 0)
- {
- /* Return true if the file is write-able */
-
- return (buf.st_mode & (S_IWUSR|S_IWGRP|S_IWOTH)) != 0 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* Unrecognized operator */
-
- return TEST_ERROR;
-}
-
-/****************************************************************************
- * Name: expression
- ****************************************************************************/
-
-static int expression(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- int value;
- int i = 0;
-
- /* Check for unary operations on expressions */
-
- if (strcmp(argv[0], "!") == 0)
- {
- if (argc < 2)
- {
- goto errout_syntax;
- }
- return expression(vtbl, argc-1, &argv[1]) == TEST_TRUE ? TEST_FALSE : TEST_TRUE;
- }
-
- /* Check for unary operations on simple, typed arguments */
-
- else if (argv[0][0] == '-')
- {
- if (argc < 2)
- {
- goto errout_syntax;
- }
- i += 2;
- value = unaryexpression(vtbl, argv);
- }
-
- /* Check for binary operations on simple, typed arguments */
-
- else
- {
- if (argc < 3)
- {
- goto errout_syntax;
- }
- i += 3;
- value = binaryexpression(vtbl, argv);
- }
-
- /* Test if there any failure */
-
- if (value == TEST_ERROR)
- {
- goto errout_syntax;
- }
-
- /* Is there anything after the simple expression? */
-
- if (i < argc)
- {
- /* EXPRESSION -a EXPRESSION */
-
- if (strcmp(argv[i], "-a") == 0)
- {
- if (value != TEST_TRUE)
- {
- return TEST_FALSE;
- }
- else
- {
- i++;
- return expression(vtbl, argc-i, &argv[i]);
- }
- }
-
- /* EXPRESSION -o EXPRESSION */
-
- else if (strcmp(argv[i], "-o") == 0)
- {
- if (value == TEST_TRUE)
- {
- return TEST_TRUE;
- }
- else
- {
- i++;
- return expression(vtbl, argc-i, &argv[i]);
- }
- }
- else
- {
- goto errout_syntax;
- }
- }
- return value;
-
-errout_syntax:
- nsh_output(vtbl, g_nshsyntax, "test");
- return TEST_FALSE;
-}
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: cmd_test
- ****************************************************************************/
-
-int cmd_test(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- return expression(vtbl, argc-1, &argv[1]);
-}
-
-/****************************************************************************
- * Name: cmd_lbracket
- ****************************************************************************/
-
-int cmd_lbracket(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- if (strcmp(argv[argc-1], "]") != 0)
- {
- nsh_output(vtbl, g_nshsyntax, argv[0]);
- return ERROR;
- }
- else
- {
- return expression(vtbl, argc-2, &argv[1]);
- }
-}
-
-#endif /* !CONFIG_NSH_DISABLESCRIPT && !CONFIG_NSH_DISABLE_TEST */