Author | Jamozed <[email protected]> |
Date | 2021-03-31 12:16:08 |
Commit | 72d349955dd7a76f549677076d0e6496d21b58cc |
Parent | 0f6aa82e55e57d88314704fb7c1ce079b8176a7a |
Update formatting in bltn and exec files
Diffstat
M | src/bltn.c | | | 9 | ++++----- |
M | src/bltn.h | | | 10 | +++++----- |
M | src/exec.c | | | 49 | +++++++++++++++++++++---------------------------- |
M | src/exec.h | | | 6 | +++--- |
4 files changed, 33 insertions, 41 deletions
diff --git a/src/bltn.c b/src/bltn.c index 7624fd0..7ff7449 100644 --- a/src/bltn.c +++ b/src/bltn.c @@ -48,9 +48,9 @@ static int bltn_false(char *av[]) { (void)(av); return 1; } static int bltn_help(char *av[]); static int bltn_true(char *av[]) { (void)(av); return 0; } -static int getret(char *argv[]) { printf("%d\n", _ret); return 0; } +static int getret(char *av[]) { printf("%d\n", _ret); return 0; } -bltn_t bltns[] = { +struct bltn bltns[] = { {"alias", &bltn_alias}, {"cd", &bltn_cd}, {"eval", &bltn_eval}, @@ -63,7 +63,6 @@ bltn_t bltns[] = { {NULL, NULL} }; -static int bltn_help(char *argv[]) { - puts("OSH, version " PROJECT_VERSION); - return 0; +static int bltn_help(char *av[]) { (void)(av); + puts("OSH, version " PROJECT_VERSION); return 0; } diff --git a/src/bltn.h b/src/bltn.h index 9b7c5f9..5c78394 100644 --- a/src/bltn.h +++ b/src/bltn.h @@ -30,10 +30,10 @@ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE. */ -#ifndef OSH_BLTN_H_XQ5D812A -#define OSH_BLTN_H_XQ5D812A +#ifndef OMKOV_OSH_BLTN_H_XQ5D812A +#define OMKOV_OSH_BLTN_H_XQ5D812A -typedef struct { const char *str; int (*fun)(char *[]); } bltn_t; -extern bltn_t bltns[]; +struct bltn { const char *s; int (*f)(char *[]); }; +extern struct bltn bltns[]; -#endif // OSH_BLTN_H_XQ5D812A +#endif // OMKOV_OSH_BLTN_H_XQ5D812A diff --git a/src/exec.c b/src/exec.c index 3817465..0ddea20 100644 --- a/src/exec.c +++ b/src/exec.c @@ -33,6 +33,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE. #include "bltn.h" #include "exec.h" +#include "lib/error.h" + #include <sys/wait.h> #include <unistd.h> @@ -42,42 +44,33 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE. #include <stdlib.h> #include <string.h> -static int launch(char *argv[]); -static void launcherror(char *s); +static int launch(char *av[]); -/* - Execute a command -*/ -int execute(char *argv[]) { - if (!argv[0]) { return _ret; } - for (bltn_t *b = bltns; b->str; ++b) { - if (strcmp(argv[0], b->str) == 0) { return b->fun(argv); } - } return launch(argv); +/* Execute a command */ +int execute(char *av[]) { + if (!av[0]) { return _ret; } + + for (struct bltn *b = bltns; b->s; ++b) { + if (strcmp(av[0], b->s) == 0) { return b->f(av); } + } + + return launch(av); } -/* - Fork and execute an executable -*/ -static int launch(char *argv[]) { +/* Fork and execute an executable */ +static int launch(char *av[]) { pid_t pid, wpid; int status; - pid = fork(); - if (pid == 0) { + if ((pid = fork()) == 0) { signal(SIGINT, SIG_DFL); - if (execvp(argv[0], argv) == -1) { - if (errno == ENOENT) { launcherror(argv[0]); } - else { perror(argv[0]); } exit(1); + + if (execvp(av[0], av) == -1) { + if (errno == ENOENT) { warn("%s: Command not found", av[0]); } + else { perror(av[0]); } exit(1); } } - else if (pid == -1) { puts("test"); perror(argv[0]); } + else if (pid == -1) { perror(av[0]); } else { waitpid(pid, &status, 0); } + return WEXITSTATUS(status); } - -static void launcherror(char *s) { - for (char *p = s; *p; ++p) { - if (*p == '\n') { fputs("\\n", stderr); } - else { fputc(*p, stderr); } - } fputs(": Command not found\n", stderr); - return; -} diff --git a/src/exec.h b/src/exec.h index 8d9fa61..e11043e 100644 --- a/src/exec.h +++ b/src/exec.h @@ -30,11 +30,11 @@ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE. */ -#ifndef OSH_EXEC_H_VI5E8LVV -#define OSH_EXEC_H_VI5E8LVV +#ifndef OMKOV_OSH_EXEC_H_VI5E8LVV +#define OMKOV_OSH_EXEC_H_VI5E8LVV extern int _loop, _ret; extern int execute(char *argv[]); -#endif // OSH_EXEC_H_VI5E8LVV +#endif // OMKOV_OSH_EXEC_H_VI5E8LVV