Commit graph

311 commits

Author SHA1 Message Date
7425195350 norm: fix all easy issues 2025-04-14 14:44:42 +02:00
1c9653a5a5 parsing: parse redirections 2025-04-14 14:44:42 +02:00
1866da6ea6
fix: make it compile 2025-04-11 16:57:31 +02:00
Jérôme Guélen
4baad88a44
parse-cmd: Only redirections left to parse. 2025-04-10 18:57:04 +02:00
Jérôme Guélen
926774846f
parse-cmd: Almost done but stopped by the gong 2025-04-08 19:56:46 +02:00
Jérôme Guélen
d0cea8828d
parse-cmd: Mainly adding destructors and a token type. 2025-04-08 16:29:57 +02:00
Jérôme Guélen
72714855f7
parse-cmd: fixes and partial norm. 2025-04-08 13:08:43 +02:00
Jérôme Guélen
10a3c9c411
parse-cmd: Various fixes and a rotation of the parsing tree 2025-04-08 12:14:38 +02:00
Jerome
90d213bf98 parse-cmd: Slow start. Ideas starting to coalesce. 2025-04-06 21:52:33 +02:00
Jerome
1a22a39336 parse-cmd: fix typo and grammar.md appearance 2025-04-06 15:49:52 +02:00
Jérôme Guélen
fea514ea63 parse-cmd: Just a forgotten check to be reviewed later. 2025-04-06 15:49:52 +02:00
Jérôme Guélen
5f95751b36 parse-cmd: A very basic skeleton of functions to come 2025-04-06 15:49:52 +02:00
Jérôme Guélen
4d9fabc794 Parse-cmd: Added a builder structure (unfinished) 2025-04-06 15:49:52 +02:00
Jérôme Guélen
10d7b65b08 Parse-cmd: fix and add comment 2025-04-06 15:49:52 +02:00
0a80b9fbe3
simple_cmd executing refactor: put builtin related utilities into own file 2025-04-01 16:38:41 +02:00
ba4192bf8d
export: set correct exit status 2025-04-01 15:58:56 +02:00
3cdf7c3f76
export: handle invalid identifiers 2025-04-01 15:54:46 +02:00
299e016a27
export: handle simple cases 2025-04-01 14:39:02 +02:00
bac3512898
minishell: do variable substitution in postprocessing 2025-04-01 13:50:14 +02:00
7153df9305
cd: print error if cd is called with too many arguments 2025-03-31 20:06:34 +02:00
f1b2e1e22d
cd: handle empty argument 2025-03-31 17:07:46 +02:00
8f3c15f096
cd: when going to $HOME, show error message if it is unset 2025-03-31 16:58:21 +02:00
d66ca10a0c
cd: with no arg, go to $HOME 2025-03-31 16:40:22 +02:00
e93e6efb93
builtins: cd: implement cd to absolute paths 2025-03-31 16:34:48 +02:00
5ce4a2b85f
builtin: implement pwd 2025-03-31 14:54:40 +02:00
1c4733b1cc
here_doc: print error if failed to create temp file 2025-03-28 19:10:43 +01:00
66ea1328aa
simple_cmd executing: print error message on command not found 2025-03-28 16:58:13 +01:00
a4c482e8f9
here_doc: perform variable expansion 2025-03-28 16:45:28 +01:00
Jérôme Guélen
5ff990ef50 Parsing-refactor: Determining structures. 2025-03-28 15:03:15 +01:00
befe219436
simple_cmd executing: works with arguments and env
Does not handle redirections at all, no special facilities are in place to allow
nofork or builtin execution.
2025-03-28 14:50:37 +01:00
bd01c79838
fix: get_cmdpath returns NULL if executable is absent in first directory searched 2025-03-28 14:50:37 +01:00
a5a93be3d0
fix: get_cmdpath will sometimes leak memory 2025-03-28 14:50:37 +01:00
a7b78272ab
minishell: initialize app struct with env 2025-03-28 14:50:37 +01:00
d8bc528c5a
minishell: only parse simple commands 2025-03-28 14:50:37 +01:00
f07a80c762
postprocessing: do quote removal 2025-03-28 14:50:37 +01:00
22b0b4746f
fix: worddesc_copy did not copy the marker 2025-03-28 14:50:37 +01:00
0fbfee7d78
cmdgroup parsing: parse cmdlist surrounded by parentheses 2025-03-28 14:50:37 +01:00
185a069044
cmdgroup parsing refactor: use builder pattern
This will make it easier to add the next logic stuff to it
2025-03-28 14:50:37 +01:00
73a64b2ec3
fix potential memory leak in cmdlist_from_wordlist
This leak would happen if the alocation of the builder fails. In that case, we
don't free our copy of the wordlist
2025-03-28 14:50:37 +01:00
dff5de66da
fix redirection parsing sometimes skipping over redirections
This happens when multiple redirections are following each others, such as in

	 echo hi > out < in

which would be parsed as

 ╰─ t_cmdgroup
     ├─ t_cmdlist
     │   ├─ num_cmds = 1
     │   ╰─ cmd[0]
     │       ├─ t_cmdlist_item
     │       │   ╰─ t_pipeline
     │       │       ├─ num_cmd = 1
     │       │       ╰─ cmd[0]
     │       │           ╰─ t_simple_cmd
     │       │               ├─ words = [echo][hi][<][in]
     │       │               ╰─ t_redir_list
     │       │                   ╰─ redirection[0]
     │       │                       ╰─ t_redirection
     │       │                           ├─ t_redir_type = REDIR_OUTPUT
     │       │                           ╰─ marker = [out]
     │       ╰─ t_operator = END
     ╰─ (no redirections)

when the correct parsing is
 ╰─ t_cmdgroup
     ├─ t_cmdlist
     │   ├─ num_cmds = 1
     │   ╰─ cmd[0]
     │       ├─ t_cmdlist_item
     │       │   ╰─ t_pipeline
     │       │       ├─ num_cmd = 1
     │       │       ╰─ cmd[0]
     │       │           ╰─ t_simple_cmd
     │       │               ├─ words = [echo][hi]
     │       │               ╰─ t_redir_list
     │       │                   ├─ redirection[0]
     │       │                   │   ╰─ t_redirection
     │       │                   │       ├─ t_redir_type = REDIR_OUTPUT
     │       │                   │       ╰─ marker = [out]
     │       │                   ╰─ redirection[1]
     │       │                       ╰─ t_redirection
     │       │                           ├─ t_redir_type = REDIR_INPUT
     │       │                           ╰─ marker = [in]
     │       ╰─ t_operator = END
     ╰─ (no redirections)
2025-03-28 14:50:37 +01:00
9fb4e13420
implement tree debug for redirections 2025-03-28 14:50:37 +01:00
88ed66e138
refactor cmdlist.num_cmds -> cmdlist.num_cmd to be more consistent 2025-03-28 14:50:37 +01:00
448458b37f
redirection parsing: parse redirections for cmdgroup 2025-03-28 14:50:37 +01:00
c258fa6077
fix(simple_cmd): did not free redirection list correctly 2025-03-28 14:50:37 +01:00
0584757446
refactor: put parsing of command and debugging out of main loop 2025-03-28 14:50:37 +01:00
1f03cbbedb
tree debug: implement rest of tree debug
This is a big commit, sorry!
2025-03-28 14:50:37 +01:00
76b2b8ec7f
treedrawing: fix bug where rare circumstances could lead to incorrect indent
The problem took me a while to find, but the issue here was that push_buf does
not add a terminating null byte, and I was only asking push_buf to copy the
bytes that contained characters, not the terminating null byte as well.

This, combined with the fact that to remove bytes from the end of the buffer, I
just placed a null byte a the end, caused some combinations of indentation and
dedentations to overwrite the null byte, and not place a null byte after the new
indent, which would still contain data from a previous indentation.
2025-03-28 14:50:37 +01:00
1486c3b124
treeprint refactor: use simpler types 2025-03-28 14:50:37 +01:00
3edff91107
cmdgroup parsing: parse a single cmdlist 2025-03-28 14:50:37 +01:00
5379ad34f2
cmdlist debug: implement debug func (STUB)
I need to actually parse some cmdlists for this to have any meaning further
2025-03-28 14:50:37 +01:00