Commit graph

848 commits

Author SHA1 Message Date
Eric Pouech
aeeea45da3 cmd: Return sub-block return code for IF and FOR.
Cleaning-up previous method for end-of-block vs error in IF and
FOR commands.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-27 22:06:12 +02:00
Eric Pouech
6932e8bd0e cmd: Support help for IF and FOR commands.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-27 22:06:12 +02:00
Eric Pouech
6c39db0ca0 cmd: Migrate IF/FOR instructions inside CMD_NODE.
Basically:
- IF and FOR command parsing in integrated into node_builder,
- CMD_NODE is no longer degenerated (and no longer use
  NULL CMD_COMMAND to mark end of block)
- lexer evolves to delegate a bunch of things to node_builder
  (esp. command nesting...)

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53190
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50132
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=44063
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-27 22:06:12 +02:00
Eric Pouech
b89c3a41bb cmd: Let token errors be tranlatable.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-26 16:57:27 +02:00
Eric Pouech
cb56c7b7bd cmd: Move code around to avoid forward declaration.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-26 16:54:40 +02:00
Eric Pouech
cd50aa7d9c cmd: Let redirections be handled by node instead of command.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-26 16:54:40 +02:00
Eric Pouech
6ad88c5512 cmd: Fix a couple of expansions issues.
Fix several incorrect behaviors that (partly) compensate each others:
- when replacing %XXX% by %YYY%, advance current position after the copied
  %YYY% (otherwise it will expand %YYY% in same run),
- don't parse the command in run_program(),
- always expand full content in CALL command.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-26 16:54:40 +02:00
Eric Pouech
560521c14b cmd: Add more tests about CALL and variable expansion.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-26 16:54:40 +02:00
Eric Pouech
2f5456316c cmd: Move depth count inside builder.
(and temporarly using parenthesis count to store curDepth).

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-24 13:24:06 +02:00
Eric Pouech
fc4b9c645a cmd: Fix a couple of issues wrt. variable expansion.
Ensure expansion at parse time is only done once.
Simply handleExpansion() code.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-24 13:24:05 +02:00
Eric Pouech
3a8aad4834 cmd: Move prompt handling into line reading.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-24 13:24:04 +02:00
Eric Pouech
f45588c57f cmd: Remove unrelated parameter to WCMD_show_prompt.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-24 13:24:03 +02:00
Eric Pouech
8ad0923515 cmd: Factorize code for reading a new line for parser.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-24 13:24:02 +02:00
Eric Pouech
bd36ac98c0 cmd: Expand delayed variables in IF operands.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-21 22:59:40 +02:00
Eric Pouech
01d0027739 cmd/tests: Add tests for delayed substitution in IF command.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-21 22:59:40 +02:00
Eric Pouech
411cce36b1 cmd: Introduce return code to indicate abort of current instruction.
Use that return code for WCMD_exit() and WCMD_goto().

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-21 22:59:40 +02:00
Eric Pouech
844d6b553a cmd: Use kernel32's error codes instead of literals.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-21 22:59:40 +02:00
Eric Pouech
2ec70835fc cmd: Introduce token-based syntax parser for building command nodes.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-21 22:59:40 +02:00
Eric Pouech
96d682e5f7 cmd: Test input has been read before using it.
This let confirmations fail when reading from NUL
(instead of looping forever).

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-20 23:03:26 +02:00
Eric Pouech
96762f12e7 cmd: Remove old FOR loop related code.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-20 23:03:26 +02:00
Eric Pouech
f98077591f cmd: Fix delayed expansion in FOR loop on file sets.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-20 23:03:26 +02:00
Eric Pouech
0ca28d3a70 cmd: Split parsing from executing FOR loops for file walking.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-20 23:03:26 +02:00
Eric Pouech
6d6fee9dda cmd: Fix delay expansion in FOR loop for filesets.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-19 11:38:10 +02:00
Eric Pouech
2e2a3f4539 cmd: Split parsing from executing FOR loops for filesets (/F).
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-19 11:38:09 +02:00
Eric Pouech
53f7a59992 cmd: Fix delay expansion in FOR /L loops.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-19 11:38:07 +02:00
Eric Pouech
9ba05f5e5b cmd: Split parsing from executing FOR loops for numbers (/L).
Introducing CMD_FOR_CONTROL structure to store parsing output
for consumption in execution.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-19 11:38:05 +02:00
Eric Pouech
25a02d894f cmd: Introduce helpers to handle directory walk.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-17 21:50:00 +02:00
Eric Pouech
2b51e5aca0 cmd: Enable '%0' through '%9' as valid FOR loop variables.
Note: there are many other letters than can be used as variable names.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-17 21:49:57 +02:00
Eric Pouech
dc7e8da528 cmd: Introduce helpers to save and restore FOR loop contexts.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-17 21:49:55 +02:00
Eric Pouech
abcc2a1bc6 cmd: Introduce helpers to handle FOR variables.
This should let the code be agnostic to the supported variables.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-17 21:49:53 +02:00
Eric Pouech
85ca94be7c cmd: Add more tests about FOR loops.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-17 21:49:50 +02:00
Eric Pouech
1890a3de3f cmd: Separate IF command parsing from execution.
Introducting CMD_IF_CONDITION to hold IF condition.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-04 22:22:01 +02:00
Eric Pouech
5388414923 cmd: Let errorlevel be a signed integer.
Manual testing show that native reports errorlevel as a signed
entity.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-04 22:22:01 +02:00
Eric Pouech
855642d565 cmd: Create helper to execute a command.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-04 22:22:01 +02:00
Eric Pouech
a899caac7b cmd: Introduce structure CMD_REDIRECTION.
This structure will hold information for a redirection, and
can be chained in a list when multiple redirections are listed.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-04 22:22:01 +02:00
Eric Pouech
18d8c6fe52 cmd: Introduce a helper to set std handles.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-06-04 22:22:01 +02:00
Eric Pouech
e6e1bbb410 cmd: Move operator from CMD_COMMAND to CMD_NODE.
For now, the tree is degenerated into a list (as it was before).

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-05-13 21:09:45 +02:00
Eric Pouech
603e81a37a cmd: Add helpers to handle list in degenerated binary tree.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-05-13 21:09:43 +02:00
Eric Pouech
7e70824ed5 cmd: Introduce CMD_NODE structure.
This will allow to separate better the individual command to
be executed (CMD_COMMAND) from the chaining and I/O handling
of several commands (CMD_NODE).

This also renames CMD_LIST into CMD_COMMAND to fit in above
scheme.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-05-13 21:09:41 +02:00
Eric Pouech
508b3ac996 cmd: Remove malloc attribute from xrealloc.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-05-13 21:09:39 +02:00
Eric Pouech
ae9bdbda3b cmd: Use CRT's popen instead of rewriting it.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-05-08 22:39:44 +02:00
Eric Pouech
93354bbd88 cmd: Introduce xrealloc helper.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-05-08 22:39:44 +02:00
Eric Pouech
76237079d1 cmd: No longer keep track of last element in command list.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-05-08 22:39:44 +02:00
Eric Pouech
371eda6c4c cmd: Consistenly use the same variable to identify current command.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-05-08 22:39:44 +02:00
Eric Pouech
6f0e9e5e4e cmd/tests: Test success/failure of commands.
The || and && operators to chain commands rely on the LHS command
to be successful (or unsucessful) to decide upon launching the RHS
command.

Unfortunately, success/failure is not always when errorlevel is
0 (non zero).

Some exmaples:
- if a redirection fails (eg. appending to a non existing file),
  the command (builtin/external) is always unsuccessful (and the
  error level is untouched,
- external command (when redirection is ok) is succesful when
  program exit code is zero,
- ditto for a call to a label inside the batch file, with
  the 'exit /b' parameter,
- it's way more complicated for builtins. Eg 'type' is unsuccessful
  on a non existing file, while 'dir' (on the same unexisting file)
  succeeds.

So start adding some tests about success / failure of some commands.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-05-07 22:49:45 +02:00
Eric Pouech
289c49ee21 cmd/tests: Test calling batch files named as builtin commands.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-05-07 22:49:45 +02:00
Eric Pouech
8bbd48bfd8 cmd/tests: Test delayed expansion with spaces in IF and FOR.
Based on a patch by Alex Henrie.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-05-07 22:49:45 +02:00
Eric Pouech
232f282585 cmd/tests: Test nested loop variables expansion.
Based on a patch by Dimitry Sokolov.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-05-07 22:49:45 +02:00
Eric Pouech
14bdf6e725 cmd/tests: Test using %%0-%%9 as loop variables.
Based on a test case from Dimitry Sokolov.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-05-07 22:49:45 +02:00
Eric Pouech
7f60584a90 cmd: Fix substring expansion for 'magic' variables.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56498
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-04-01 09:08:56 +02:00