diff --git a/src/dbox.c b/src/dbox.c index 7c84220..ba1a940 100644 --- a/src/dbox.c +++ b/src/dbox.c @@ -5,6 +5,9 @@ #include "funcs.h" +#define RUN_IF_MATCH(func, name, ac, av) \ + if(!strcmp(name, #func)) \ + return func(ac, av) /* BSD 3-Clause License @@ -38,42 +41,21 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ int matchExec(char *name, int argc, char *argv[]) { - if (!strcmp(name,"arch")) { - arch(argc, argv); - } - if (!strcmp(name,"basename")) { - bn(argc, argv); - } - if (!strcmp(name,"cat")) { - cat(argc, argv); - } - if (!strcmp(name,"chroot")) { - chr(argc, argv); - } - if (!strcmp(name,"cp")) { - cp(argc, argv); - } - if (!strcmp(name,"ls")) { - ls(argc, argv); - } - if (!strcmp(name,"pwd")) { - pwd(argc, argv); - } - if (!strcmp(name,"rm")) { - rm(argc, argv); - } - if (!strcmp(name,"uname")) { - un(argc, argv); - } - if (!strcmp(name,"whoami")) { - whoami(argc, argv); - } - if (!strcmp(name,"yes")) { - yes(argc, argv); - } + int ret; + RUN_IF_MATCH(arch, name, argc, argv); + RUN_IF_MATCH(bn, name, argc, argv); + RUN_IF_MATCH(cat, name, argc, argv); + RUN_IF_MATCH(chr, name, argc, argv); + RUN_IF_MATCH(cp, name, argc, argv); + RUN_IF_MATCH(ls, name, argc, argv); + RUN_IF_MATCH(pwd, name, argc, argv); + RUN_IF_MATCH(rm, name, argc, argv); + RUN_IF_MATCH(un, name, argc, argv); + RUN_IF_MATCH(whoami, name, argc, argv); + RUN_IF_MATCH(yes, name, argc, argv); if (!strcmp(name,"dbox")) { char **newArgv = argv + 1; - matchExec(newArgv[0], argc-1, newArgv); + return matchExec(newArgv[0], argc-1, newArgv); } return 0; //TODO: return return of exec files }