mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-01 18:55:36 +00:00
145 lines
3.0 KiB
C
145 lines
3.0 KiB
C
#include "config.h"
|
|
#include <stdio.h>
|
|
#include <ccan/tap/tap.h>
|
|
#include <setjmp.h>
|
|
#include <stdlib.h>
|
|
#include <limits.h>
|
|
#include <err.h>
|
|
#include "utils.h"
|
|
|
|
/* We don't actually want it to exit... */
|
|
static jmp_buf exited;
|
|
#define errx save_and_jump
|
|
|
|
static void save_and_jump(int ecode, const char *fmt, ...);
|
|
|
|
#include <ccan/opt/helpers.c>
|
|
#include <ccan/opt/opt.c>
|
|
#include <ccan/opt/usage.c>
|
|
#include <ccan/opt/parse.c>
|
|
|
|
static char *output = NULL;
|
|
|
|
static int saved_vprintf(const char *fmt, va_list ap)
|
|
{
|
|
char *p;
|
|
int ret = vasprintf(&p, fmt, ap);
|
|
|
|
if (output) {
|
|
output = realloc(output, strlen(output) + strlen(p) + 1);
|
|
strcat(output, p);
|
|
free(p);
|
|
} else
|
|
output = p;
|
|
return ret;
|
|
}
|
|
|
|
static void save_and_jump(int ecode, const char *fmt, ...)
|
|
{
|
|
va_list ap;
|
|
|
|
va_start(ap, fmt);
|
|
saved_vprintf(fmt, ap);
|
|
va_end(ap);
|
|
longjmp(exited, ecode + 1);
|
|
}
|
|
|
|
static void reset(void)
|
|
{
|
|
free(output);
|
|
output = NULL;
|
|
free(opt_table);
|
|
opt_table = NULL;
|
|
opt_count = opt_num_short = opt_num_short_arg = opt_num_long = 0;
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int exitval;
|
|
|
|
plan_tests(14);
|
|
|
|
exitval = setjmp(exited);
|
|
if (exitval == 0) {
|
|
/* Bad type. */
|
|
_opt_register("-a", OPT_SUBTABLE, (void *)opt_version_and_exit,
|
|
NULL, NULL, "1.2.3", "");
|
|
fail("_opt_register returned?");
|
|
} else {
|
|
ok1(exitval - 1 == 1);
|
|
ok1(strstr(output, "Option -a: unknown entry type"));
|
|
}
|
|
reset();
|
|
|
|
exitval = setjmp(exited);
|
|
if (exitval == 0) {
|
|
/* NULL description. */
|
|
opt_register_noarg("-a", test_noarg, "", NULL);
|
|
fail("_opt_register returned?");
|
|
} else {
|
|
ok1(exitval - 1 == 1);
|
|
ok1(strstr(output, "Option -a: description cannot be NULL"));
|
|
}
|
|
reset();
|
|
|
|
exitval = setjmp(exited);
|
|
if (exitval == 0) {
|
|
/* Bad option name. */
|
|
opt_register_noarg("a", test_noarg, "", "");
|
|
fail("_opt_register returned?");
|
|
} else {
|
|
ok1(exitval - 1 == 1);
|
|
ok1(strstr(output, "Option a: does not begin with '-'"));
|
|
}
|
|
|
|
reset();
|
|
|
|
exitval = setjmp(exited);
|
|
if (exitval == 0) {
|
|
/* Bad option name. */
|
|
opt_register_noarg("--", test_noarg, "", "");
|
|
fail("_opt_register returned?");
|
|
} else {
|
|
ok1(exitval - 1 == 1);
|
|
ok1(strstr(output, "Option --: invalid long option '--'"));
|
|
}
|
|
|
|
reset();
|
|
|
|
exitval = setjmp(exited);
|
|
if (exitval == 0) {
|
|
/* Bad option name. */
|
|
opt_register_noarg("--a|-aaa", test_noarg, "", "");
|
|
fail("_opt_register returned?");
|
|
} else {
|
|
ok1(exitval - 1 == 1);
|
|
ok1(strstr(output,
|
|
"Option --a|-aaa: invalid short option '-aaa'"));
|
|
}
|
|
reset();
|
|
|
|
exitval = setjmp(exited);
|
|
if (exitval == 0) {
|
|
/* Documentation for non-optios. */
|
|
opt_register_noarg("--a foo", test_noarg, "", "");
|
|
fail("_opt_register returned?");
|
|
} else {
|
|
ok1(exitval - 1 == 1);
|
|
ok1(strstr(output,
|
|
"Option --a foo: does not take arguments 'foo'"));
|
|
}
|
|
reset();
|
|
|
|
exitval = setjmp(exited);
|
|
if (exitval == 0) {
|
|
/* Documentation for non-optios. */
|
|
opt_register_noarg("--a=foo", test_noarg, "", "");
|
|
fail("_opt_register returned?");
|
|
} else {
|
|
ok1(exitval - 1 == 1);
|
|
ok1(strstr(output,
|
|
"Option --a=foo: does not take arguments 'foo'"));
|
|
}
|
|
return exit_status();
|
|
}
|