PatchworkOS
Loading...
Searching...
No Matches
main.c
Go to the documentation of this file.
1#include "interactive.h"
2#include "pipeline.h"
3
4#include <stdbool.h>
5#include <stdio.h>
6#include <stdlib.h>
7#include <sys/io.h>
8#include <sys/proc.h>
9
11{
12 uint64_t index = 0;
13 buffer[0] = '\0';
14 while (1)
15 {
16 char chr;
17 if (read(STDIN_FILENO, &chr, 1) == 0)
18 {
19 return ERR;
20 }
21 else if (chr == '\n')
22 {
23 buffer[index] = '\0';
24 return 0;
25 }
26 if (index + 1 < size)
27 {
28 buffer[index++] = chr;
29 }
30 }
31}
32
33static void join_args(char* buffer, uint64_t size, int argc, char* argv[])
34{
35 buffer[0] = '\0';
36 uint64_t pos = 0;
37
38 for (int i = 1; i < argc && pos < size - 1; i++)
39 {
40 if (i > 1 && pos < size - 1)
41 {
42 buffer[pos++] = ' ';
43 }
44
45 char* arg = argv[i];
46 while (*arg && pos < size - 1)
47 {
48 buffer[pos++] = *arg++;
49 }
50 }
51
52 buffer[pos] = '\0';
53}
54
55int execute_command(const char* cmdline)
56{
57 pipeline_t pipeline;
58 if (pipeline_init(&pipeline, cmdline) == ERR)
59 {
60 return EXIT_FAILURE;
61 }
62 return pipeline_execute(&pipeline) == ERR ? EXIT_FAILURE : EXIT_SUCCESS;
63}
64
65int main(int argc, char* argv[])
66{
67 if (argc > 1)
68 {
69 char cmdline[MAX_PATH];
70 join_args(cmdline, MAX_PATH, argc, argv);
71 return execute_command(cmdline);
72 }
73 else
74 {
75 return interactive_shell();
76 }
77}
#define MAX_PATH
Maximum length of filepaths.
Definition MAX_PATH.h:11
uint64_t read(fd_t fd, void *buffer, uint64_t count)
System call for reading from files.
Definition read.c:9
#define STDIN_FILENO
Definition io.h:44
int interactive_shell(void)
EFI_PHYSICAL_ADDRESS buffer
Definition mem.c:15
uint64_t pipeline_execute(pipeline_t *pipeline)
Definition pipeline.c:442
uint64_t pipeline_init(pipeline_t *pipeline, const char *cmdline)
Definition pipeline.c:17
#define ERR
Definition main.c:44
int main()
Definition main.c:97
static void join_args(char *buffer, uint64_t size, int argc, char *argv[])
Definition main.c:33
static uint64_t cmdline_read(char *buffer, uint64_t size)
Definition main.c:10
int execute_command(const char *cmdline)
Definition main.c:55
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
#define EXIT_SUCCESS
Definition stdlib.h:46
#define EXIT_FAILURE
Definition stdlib.h:47