mirror of https://github.com/openssl/openssl.git
				
				
				
			
		
			
				
	
	
		
			107 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
/*
 | 
						|
 * Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved.
 | 
						|
 *
 | 
						|
 * Licensed under the OpenSSL license (the "License").  You may not use
 | 
						|
 * this file except in compliance with the License.  You can obtain a copy
 | 
						|
 * in the file LICENSE in the source distribution or at
 | 
						|
 * https://www.openssl.org/source/license.html
 | 
						|
 */
 | 
						|
 | 
						|
#include "../testutil.h"
 | 
						|
#include "internal/nelem.h"
 | 
						|
#include "output.h"
 | 
						|
#include "tu_local.h"
 | 
						|
 | 
						|
#include <string.h>
 | 
						|
 | 
						|
static size_t arg_count;
 | 
						|
static char **args;
 | 
						|
static unsigned char arg_used[1000];
 | 
						|
 | 
						|
static void check_arg_usage(void)
 | 
						|
{
 | 
						|
    size_t i, n = arg_count < OSSL_NELEM(arg_used) ? arg_count
 | 
						|
                                                   : OSSL_NELEM(arg_used);
 | 
						|
 | 
						|
    for (i = 0; i < n; i++)
 | 
						|
        if (!arg_used[i+1])
 | 
						|
            test_printf_stderr("Warning ignored command-line argument %d: %s\n",
 | 
						|
                               i, args[i+1]);
 | 
						|
    if (i < arg_count)
 | 
						|
        test_printf_stderr("Warning arguments %zu and later unchecked\n", i);
 | 
						|
}
 | 
						|
 | 
						|
int main(int argc, char *argv[])
 | 
						|
{
 | 
						|
    int ret = EXIT_FAILURE;
 | 
						|
 | 
						|
    test_open_streams();
 | 
						|
 | 
						|
    if (!global_init()) {
 | 
						|
        test_printf_stderr("Global init failed - aborting\n");
 | 
						|
        return ret;
 | 
						|
    }
 | 
						|
 | 
						|
    arg_count = argc - 1;
 | 
						|
    args = argv;
 | 
						|
 | 
						|
    setup_test_framework();
 | 
						|
 | 
						|
    if (setup_tests())
 | 
						|
        ret = run_tests(argv[0]);
 | 
						|
    cleanup_tests();
 | 
						|
    check_arg_usage();
 | 
						|
 | 
						|
    ret = pulldown_test_framework(ret);
 | 
						|
    test_close_streams();
 | 
						|
    return ret;    
 | 
						|
}
 | 
						|
 | 
						|
const char *test_get_program_name(void)
 | 
						|
{
 | 
						|
    return args[0];
 | 
						|
}
 | 
						|
 | 
						|
char *test_get_argument(size_t n)
 | 
						|
{
 | 
						|
    if (n > arg_count)
 | 
						|
        return NULL;
 | 
						|
    if (n + 1 < OSSL_NELEM(arg_used))
 | 
						|
        arg_used[n + 1] = 1;
 | 
						|
    return args[n + 1];
 | 
						|
}
 | 
						|
 | 
						|
size_t test_get_argument_count(void)
 | 
						|
{
 | 
						|
    return arg_count;
 | 
						|
}
 | 
						|
 | 
						|
int test_has_option(const char *option)
 | 
						|
{
 | 
						|
    size_t i;
 | 
						|
 | 
						|
    for (i = 1; i <= arg_count; i++)
 | 
						|
        if (strcmp(args[i], option) == 0) {
 | 
						|
            arg_used[i] = 1;
 | 
						|
            return 1;
 | 
						|
        }
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
const char *test_get_option_argument(const char *option)
 | 
						|
{
 | 
						|
    size_t i, n = strlen(option);
 | 
						|
 | 
						|
    for (i = 1; i <= arg_count; i++)
 | 
						|
        if (strncmp(args[i], option, n) == 0) {
 | 
						|
            arg_used[i] = 1;
 | 
						|
            if (args[i][n] == '\0' && i + 1 < arg_count) {
 | 
						|
                arg_used[++i] = 1;
 | 
						|
                return args[i];
 | 
						|
            }
 | 
						|
            return args[i] + n;
 | 
						|
        }
 | 
						|
    return NULL;
 | 
						|
}
 | 
						|
 |