1e1051a39Sopenharmony_ci/* 2e1051a39Sopenharmony_ci * Copyright 2018-2020 The OpenSSL Project Authors. All Rights Reserved. 3e1051a39Sopenharmony_ci * 4e1051a39Sopenharmony_ci * Licensed under the Apache License 2.0 (the "License"). You may not use 5e1051a39Sopenharmony_ci * this file except in compliance with the License. You can obtain a copy 6e1051a39Sopenharmony_ci * in the file LICENSE in the source distribution or at 7e1051a39Sopenharmony_ci * https://www.openssl.org/source/license.html 8e1051a39Sopenharmony_ci */ 9e1051a39Sopenharmony_ci 10e1051a39Sopenharmony_ci#include "../testutil.h" 11e1051a39Sopenharmony_ci#include "internal/nelem.h" 12e1051a39Sopenharmony_ci#include "tu_local.h" 13e1051a39Sopenharmony_ci#include "output.h" 14e1051a39Sopenharmony_ci 15e1051a39Sopenharmony_ci 16e1051a39Sopenharmony_cistatic int used[100] = { 0 }; 17e1051a39Sopenharmony_ci 18e1051a39Sopenharmony_ciint test_skip_common_options(void) 19e1051a39Sopenharmony_ci{ 20e1051a39Sopenharmony_ci OPTION_CHOICE_DEFAULT o; 21e1051a39Sopenharmony_ci 22e1051a39Sopenharmony_ci while ((o = (OPTION_CHOICE_DEFAULT)opt_next()) != OPT_EOF) { 23e1051a39Sopenharmony_ci switch (o) { 24e1051a39Sopenharmony_ci case OPT_TEST_CASES: 25e1051a39Sopenharmony_ci break; 26e1051a39Sopenharmony_ci default: 27e1051a39Sopenharmony_ci case OPT_ERR: 28e1051a39Sopenharmony_ci return 0; 29e1051a39Sopenharmony_ci } 30e1051a39Sopenharmony_ci } 31e1051a39Sopenharmony_ci return 1; 32e1051a39Sopenharmony_ci} 33e1051a39Sopenharmony_ci 34e1051a39Sopenharmony_cisize_t test_get_argument_count(void) 35e1051a39Sopenharmony_ci{ 36e1051a39Sopenharmony_ci return opt_num_rest(); 37e1051a39Sopenharmony_ci} 38e1051a39Sopenharmony_ci 39e1051a39Sopenharmony_cichar *test_get_argument(size_t n) 40e1051a39Sopenharmony_ci{ 41e1051a39Sopenharmony_ci char **argv = opt_rest(); 42e1051a39Sopenharmony_ci 43e1051a39Sopenharmony_ci OPENSSL_assert(n < sizeof(used)); 44e1051a39Sopenharmony_ci if ((int)n >= opt_num_rest() || argv == NULL) 45e1051a39Sopenharmony_ci return NULL; 46e1051a39Sopenharmony_ci used[n] = 1; 47e1051a39Sopenharmony_ci return argv[n]; 48e1051a39Sopenharmony_ci} 49e1051a39Sopenharmony_ci 50e1051a39Sopenharmony_civoid opt_check_usage(void) 51e1051a39Sopenharmony_ci{ 52e1051a39Sopenharmony_ci int i; 53e1051a39Sopenharmony_ci char **argv = opt_rest(); 54e1051a39Sopenharmony_ci int n, arg_count = opt_num_rest(); 55e1051a39Sopenharmony_ci 56e1051a39Sopenharmony_ci if (arg_count > (int)OSSL_NELEM(used)) 57e1051a39Sopenharmony_ci n = (int)OSSL_NELEM(used); 58e1051a39Sopenharmony_ci else 59e1051a39Sopenharmony_ci n = arg_count; 60e1051a39Sopenharmony_ci for (i = 0; i < n; i++) { 61e1051a39Sopenharmony_ci if (used[i] == 0) 62e1051a39Sopenharmony_ci test_printf_stderr("Warning ignored command-line argument %d: %s\n", 63e1051a39Sopenharmony_ci i, argv[i]); 64e1051a39Sopenharmony_ci } 65e1051a39Sopenharmony_ci if (i < arg_count) 66e1051a39Sopenharmony_ci test_printf_stderr("Warning arguments %d and later unchecked\n", i); 67e1051a39Sopenharmony_ci} 68e1051a39Sopenharmony_ci 69e1051a39Sopenharmony_ciint opt_printf_stderr(const char *fmt, ...) 70e1051a39Sopenharmony_ci{ 71e1051a39Sopenharmony_ci va_list ap; 72e1051a39Sopenharmony_ci int ret; 73e1051a39Sopenharmony_ci 74e1051a39Sopenharmony_ci va_start(ap, fmt); 75e1051a39Sopenharmony_ci ret = test_vprintf_stderr(fmt, ap); 76e1051a39Sopenharmony_ci va_end(ap); 77e1051a39Sopenharmony_ci return ret; 78e1051a39Sopenharmony_ci} 79e1051a39Sopenharmony_ci 80