test: Minor cleanup
1) use arg.h 2) !strcmp 3) **argv to *argv[] 4) fix test to check if basename(argv0) == "[" but avoid basename(3p) as it may change the contents of the string passed to it and I didn't want to make a copy.
This commit is contained in:
parent
38066de8c2
commit
796b85a297
53
test.c
53
test.c
@ -1,8 +1,7 @@
|
|||||||
/* See LICENSE file for copyright and license details. */
|
/* See LICENSE file for copyright and license details. */
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
@ -29,8 +28,8 @@ static int unary_x(char *s) { return access(s, X_OK); }
|
|||||||
|
|
||||||
static int unary_t(char *s) { int fd = enstrtonum(2, s, 0, INT_MAX); return isatty(fd); }
|
static int unary_t(char *s) { int fd = enstrtonum(2, s, 0, INT_MAX); return isatty(fd); }
|
||||||
|
|
||||||
static int binary_se(char *s1, char *s2) { return strcmp(s1, s2) == 0; }
|
static int binary_se(char *s1, char *s2) { return !strcmp(s1, s2); }
|
||||||
static int binary_sn(char *s1, char *s2) { return strcmp(s1, s2) != 0; }
|
static int binary_sn(char *s1, char *s2) { return strcmp(s1, s2); }
|
||||||
|
|
||||||
static int binary_eq(char *s1, char *s2) { long long a = STOI(s1), b = STOI(s2); return a == b; }
|
static int binary_eq(char *s1, char *s2) { long long a = STOI(s1), b = STOI(s2); return a == b; }
|
||||||
static int binary_ne(char *s1, char *s2) { long long a = STOI(s1), b = STOI(s2); return a != b; }
|
static int binary_ne(char *s1, char *s2) { long long a = STOI(s1), b = STOI(s2); return a != b; }
|
||||||
@ -85,75 +84,79 @@ find_test(Test *tests, char *name)
|
|||||||
{
|
{
|
||||||
Test *t;
|
Test *t;
|
||||||
|
|
||||||
for (t = tests; t->name; ++t)
|
for (t = tests; t->name; t++)
|
||||||
if (strcmp(t->name, name) == 0)
|
if (!strcmp(t->name, name))
|
||||||
return t;
|
return t;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
noarg(char **argv)
|
noarg(char *argv[])
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
onearg(char **argv)
|
onearg(char *argv[])
|
||||||
{
|
{
|
||||||
return unary_n(argv[0]);
|
return unary_n(argv[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
twoarg(char **argv)
|
twoarg(char *argv[])
|
||||||
{
|
{
|
||||||
Test *t = find_test(unary, *argv);
|
Test *t;
|
||||||
|
|
||||||
if (strcmp(argv[0], "!") == 0)
|
if (!strcmp(argv[0], "!"))
|
||||||
return !onearg(argv + 1);
|
return !onearg(argv + 1);
|
||||||
|
|
||||||
if (t)
|
if ((t = find_test(unary, *argv)))
|
||||||
return t->func(argv[1]);
|
return t->func(argv[1]);
|
||||||
|
|
||||||
enprintf(2, "bad unary test %s\n", argv[0]);
|
enprintf(2, "bad unary test %s\n", argv[0]);
|
||||||
return 0; /* NOTREACHED */
|
return 0; /* not reached */
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
threearg(char **argv)
|
threearg(char *argv[])
|
||||||
{
|
{
|
||||||
Test *t = find_test(binary, argv[1]);
|
Test *t = find_test(binary, argv[1]);
|
||||||
|
|
||||||
if (t)
|
if (t)
|
||||||
return t->func(argv[0], argv[2]);
|
return t->func(argv[0], argv[2]);
|
||||||
|
|
||||||
if (strcmp(argv[0], "!") == 0)
|
if (!strcmp(argv[0], "!"))
|
||||||
return !twoarg(argv + 1);
|
return !twoarg(argv + 1);
|
||||||
|
|
||||||
enprintf(2, "bad binary test %s\n", argv[1]);
|
enprintf(2, "bad binary test %s\n", argv[1]);
|
||||||
return 0; /* NOTREACHED */
|
return 0; /* not reached */
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
fourarg(char **argv)
|
fourarg(char *argv[])
|
||||||
{
|
{
|
||||||
if (strcmp(argv[0], "!") == 0)
|
if (!strcmp(argv[0], "!"))
|
||||||
return !threearg(argv + 1);
|
return !threearg(argv + 1);
|
||||||
|
|
||||||
enprintf(2, "too many arguments\n");
|
enprintf(2, "too many arguments\n");
|
||||||
return 0; /* NOTREACHED */
|
return 0; /* not reached */
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int (*narg[])(char**) = { noarg, onearg, twoarg, threearg, fourarg };
|
int (*narg[])(char *[]) = { noarg, onearg, twoarg, threearg, fourarg };
|
||||||
size_t len = strlen(argv[0]);
|
size_t len;
|
||||||
|
|
||||||
if (len && argv[0][len - 1] == '[' && strcmp(argv[--argc], "]") != 0)
|
ARGBEGIN {
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
} ARGEND;
|
||||||
|
|
||||||
|
len = strlen(argv0);
|
||||||
|
if (len && argv0[--len] == '[' && (!len || argv0[--len] == '/') && strcmp(argv[--argc], "]"))
|
||||||
enprintf(2, "no matching ]\n");
|
enprintf(2, "no matching ]\n");
|
||||||
|
|
||||||
--argc; ++argv;
|
|
||||||
|
|
||||||
if (argc > 4)
|
if (argc > 4)
|
||||||
enprintf(2, "too many arguments\n");
|
enprintf(2, "too many arguments\n");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user