Commit graph

78612 commits

Author SHA1 Message Date
Hermès Bélusca-Maïto f5cf67f455
[CMD_ROSTEST] Add tests for SET /A errorlevels. 2020-09-23 00:22:48 +02:00
Hermès Bélusca-Maïto 87a5403318
[CMD] Add a MSCMD_BATCH_ECHO define for enabling Windows' CMD.EXE way of preserving/restoring the echo flag across batch calls.
Observation shows that this is done only when the top-level batch file
is being run (and then terminates); the echo flag is not restored to its
previous state when a child batch file terminates and gives main back to
its parent batch.
2020-09-23 00:22:47 +02:00
Hermès Bélusca-Maïto 141378cfc8
[CMD] ASSOC: Simplify the code and make it more robust; fix returned ERRORLEVEL values.
- Make sure that non-administrator users can list associations, and
  display appropriate error messages when e.g. they don't have sufficient
  privileges to perform an operation.

- Make the helper functions all return Win32 values, used as the
  ERRORVALUE, except when a specific extension association fails to be
  displayed, in which case the ERRORVALUE is normalized to 1.

- Since the 'param' is a modifiable string (that can be modified by the
  command, independently of the way it's called), just use it to isolate
  the extension by zeroing out the equls-sign separator.
2020-09-23 00:22:47 +02:00
Hermès Bélusca-Maïto 63316df520
[CMD] Change ERRORLEVEL behaviour for commands ASSOC, PATH, PROMPT and SET.
Commands APPEND/DPATH and FTYPE are also concerned by this; however
we do not implement them in our CMD.EXE yet.

These commands set the ERRORLEVEL differently, whether or not they are
run manually from the command-line/from a .BAT file, or from a .CMD file:

- From command-line/.BAT file, these commands set the ERRORLEVEL only if
  an error occurs. So, if two commands are run consecutively and the first
  one fails, the ERRORLEVEL will remain set even if the second command
  succeeds.

- However, when being run from a .CMD file, these command will always
  set the ERRORLEVEL. In the example case described above, the second
  command that succeeds will reset the ERRORLEVEL to 0.

This behaviour is determined from the top-level batch/script file being
run. This means that, if a .BAT file is first started, then starts a
.CMD file, the commands will still behave the .BAT way; on the opposite,
if a .CMD file is first started, then starts a .BAT file, these commands
will still behave the .CMD way.

To implement this we introduce one global BATCH_TYPE enum variable that
is initialized to the corresponding batch/script file type when the
top-level script is loaded. It is reset to "none" when that script
terminates.

See https://ss64.com/nt/errorlevel.html for more details,
section "Old style .bat Batch files vs .cmd Batch scripts",
and https://groups.google.com/forum/#!msg/microsoft.public.win2000.cmdprompt.admin/XHeUq8oe2wk/LIEViGNmkK0J
(comment by Mark Zbikowski).
2020-09-23 00:22:46 +02:00
Hermès Bélusca-Maïto 0b400bbb98
[CMD_ROSTEST] Add tests for particular ERRORLEVEL behaviour in some commands. 2020-09-23 00:22:45 +02:00
Hermès Bélusca-Maïto a5d7a2cd61
[CMD] Code style and formatting fixes for assoc.c and path.c 2020-09-23 00:22:45 +02:00
Hermès Bélusca-Maïto 69258973e0
[CMD_ROSTEST] Add tests for the FOR /F "tokens=" command. See commit 0695ecbf. 2020-09-22 23:08:13 +02:00
Doug Lyons 90be2f4e1b
[IPHLPAPI] Fix for hasArp which crashes some iphlpapi tests. (#3216)
CORE-16513
2020-09-22 15:50:41 +02:00
Michael Stamper e45bacda07
[PORTCLS] Fix audio stutter with official AC97 driver (#3225)
Replace call to AllocatedBufferSize(), with BufferSize().

Indeed (quoting https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/portcls/nf-portcls-idmachannel-buffersize ):

> The BufferSize() method returns the buffer size that was set by the previous call to IDmaChannel::SetBufferSize(). If SetBufferSize() has not been called since the IDmaChannel::AllocateBuffer() call, BufferSize returns the allocated buffer size. The DMA-channel object does not actually use this value internally. This value is maintained by the object to **allow its various clients to communicate the intended size of the buffer**.

And this is exactly what we want to do.
2020-09-22 15:49:34 +02:00
Hermès Bélusca-Maïto 0695ecbfd6
[CMD] FOR: Additional Windows' CMD compatibility "fixes" for FOR /F token parsing command.
This compatibility behaviour implements the buggy behaviour of FOR /F
token parsing that can be observed in Windows' CMD, and that is tested
by the cmd_winetests.
It can be disabled at compile time via the MSCMD_FOR_QUIRKS define.

It fixes additional cmd_winetests, in concert with commit cb2a9c31.

Explanation of the implemented buggy behaviour
==============================================

In principle, the "tokens=x,y,m-n[*]" option describes a list of token
numbers (must be between 1 and 31) that will be assigned into variables.
Theoretically this option does not cumulate: only the latest 'tokens='
specification should be taken into account.

However things are not that simple in practice. First, not all of the
"tokens=" option state is reset when more than one specification is
provided. Second, when specifying a token range, e.g. "1-5", Windows'
CMD just ignores without error ranges that are not specified in
increasing order. Thus for example, a range "5-1" is ignored without
error. Then, token numbers strictly greater than 31 are just ignored,
and if they appear in a range, the whole range is ignored.

Another bug is the following one: suppose that the 'tokens'
specification reads:
  "tokens=1-5,1-30" , or: "tokens=1-5,3" ,
i.e. more than one range, that overlap partially. Then the actual total
number of variables will not be of the larger range size, but will be
the sum, instead.
Thus, in the first example, a total of 5 + 30 == 35 variables (> 31) is
allocated, while in the second example, a total of 5 + 1 == 6 variables
is allocated, even if they won't all store data !!
In the first example, only the first 30 FOR variables will be used, and
the 5 others will contain an empty string. In the second example, only
the first 5 FOR variables will be used, and the other one will be empty.

We also see that due to that, the "Variables" buffer of fixed size
cannot always be used (since it can contain at most 32 variables).

Last but not least, when more than one "tokens=" specification is
provided, for example:
  "tokens=1-31 tokens=1-20"
a total number of 31 FOR variables (because 31 is the max of 31 and 20)
is allocated, **but** only 20 are actually used, and the 11 others
return an empty string.

And in the specification: "tokens=1-31,* tokens=1-20", a total of
31 + 1 + 20 = 52 variables is initialized, but only the first 20 will
be used, and no "remaining-line" token (the '*' one) is used.
2020-09-21 03:31:01 +02:00
Hermès Bélusca-Maïto e904471023
[CMD] IF: Fix x64 warning C4267. 2020-09-21 03:31:01 +02:00
Timo Kreuzer cb22d5f697 [NTOS:PS] On x64 don't fail in NtSetInformationProcess with ProcessUserModeIOPL information class, instead just don't do anything.
For NT6+ appcompat setting return STATUS_NOT_IMPLEMENTED
2020-09-20 23:08:17 +02:00
Timo Kreuzer 26484eea9f [NTOS:MM] Fix MiSubsectionPteToSubsection 2020-09-20 23:08:17 +02:00
Timo Kreuzer 896d090ee6 [NTOS:MM] Call MiSessionAddProcess() from MmCreateProcess() like on x86 2020-09-20 23:08:17 +02:00
Timo Kreuzer bebcda0b0b [NTOS:MM] In the x64 version of MmCreateProcessAddressSpace() zero out all page table PFNs 2020-09-20 23:08:17 +02:00
Timo Kreuzer 04f0c7d0d7 [NTOS:KE] Zero out ExceptionFrame member in Syscall handler 2020-09-20 23:08:17 +02:00
Timo Kreuzer 366e8a840c [NTOS:KE] Disable interrupts before lowering IRQL in KiDpcInterruptHandler to avoid stacking up DPC interrupts 2020-09-20 23:08:17 +02:00
Timo Kreuzer 3aaee35629 [NTOS:KE] Save and restore previous mode in KiZwSystemService and fix restoring the trap frame 2020-09-20 23:08:17 +02:00
Timo Kreuzer b2a483b9ea [NTOS:KE] Don't use FrLdrDbgPrint anymore. It served us well, but now it's time to go away. 2020-09-20 23:08:17 +02:00
Timo Kreuzer 0343ac4f0b [HAL] Use iretq instead of iret 2020-09-20 23:08:17 +02:00
Timo Kreuzer 3bbcc16d8e [HAL] Fix calculation of timer increment 2020-09-20 23:08:17 +02:00
Timo Kreuzer 64d7db506c [CRT] Return from fpreset() 2020-09-20 23:08:17 +02:00
Timo Kreuzer aff33c855d [CRT] Use chkstk_ms.s on x64 builds 2020-09-20 23:08:17 +02:00
Timo Kreuzer 38be76187a [ASM] Fix KUMS_CONTEXT_HEADER offsets in ksamd64.template.h 2020-09-20 23:08:17 +02:00
Timo Kreuzer 867820124b [BOOTDATA] Use reactos subfolder as source dir on bootcd for now 2020-09-20 23:08:17 +02:00
Timo Kreuzer 280aa21179 [CMAKE] Add baseaddress_msvc_x64.cmake 2020-09-20 23:08:17 +02:00
William Kent 427ea67b9c
[RTL] Add code to SxS manifest parser to parse XML namespaces (#2512)
* [XDK] Typo fix
* [XDK] Add missing ACTIVATION_CONTEXT_SECTION values
* [RTL] Merge changes from Wine
* [ROSTESTS] Fix typo
* [NTDLL] Typo fix
* Add test for new functionality
* [ROSTESTS] Fix path
* [ROSTESTS] Add test to testlist.c
2020-09-20 22:56:42 +02:00
Oleg Dubinskiy b62948ef77 [RAPPS] Use RegDeleteKeyExW for deleting the apps strings from registry only if it is available in advapi32
Otherwise, use `RegDeleteKeyW` instead, on Windows versions whose don't have the Ex function (XP SP3 x32, Server 2003 SP0 and earlier).
It will fix regression with Rapps startup there, due to that missing function.
CORE-17264
2020-09-20 19:23:06 +02:00
Serge Gautherie 889b077b23
[REACTOS] *.spec: Fix some function/parameter types (#3154) 2020-09-20 19:21:11 +02:00
Oleg Dubinskiy 7eb90143f8
[RAPPS] Display custom applications icons for installed applications CORE-17257 (#3144)
* [RAPPS] Display custom applications icons for installed applications
- Implement `RetrieveIcon` helper function in `CInstalledApplicationInfo` class, which retrueves the current app's icon from registry, same as it done for `CAvailableApplicationInfo`.
- Use it for loading the icon in `CAppsListView::AddInstalledApplication` function, via `ExtractIconW`. Load default Rapps icon only when the app has no its custom icon.
- Retrieve `DisplayIcon` value from registry in `CInstalledApps::Enum` function, same as other registry values (like app name, description, etc).Store it in `szDisplayIcon` string, which is used in `CInstalledApplicationInfo::RetrieveIcon` for retrieving the data of that value.
- Increase `LISTVIEW_ICON_SIZE` macro from 24 to 32, so 32x32 icon size is now used instead of 24x24. This makes displayed icons more accurate, since most of apps contain 32x32 icon, so they look a bit distorted with 24x24 size.
2020-09-20 19:19:59 +02:00
Mark Jansen 5730485a51 [SDK] Add dummy import lib files for MSVC_IDE build,
to work around a CMake bug generating broken dll targets
ROSBE-159
2020-09-20 19:18:15 +02:00
Mark Jansen 7119b13a28
[CREATECABFILE] Update rapps example scripts for new usage 2020-09-20 17:30:26 +02:00
Mark Jansen 70193adc89
[CABMAN] Add commandline support for creating a cab with folders
CORE-17230
2020-09-20 17:28:02 +02:00
Katayama Hirofumi MZ a9f60321f0
[MORE] Implement 'Q' key for 'Quit' (#3210)
Implement 'Quit' action for keyboard key 'Q'. CORE-4019
2020-09-20 07:16:21 +09:00
Hermès Bélusca-Maïto 5d5a1a455c
[CMD] FOR: Fix a bug when parsing the "delims=" option in FOR loops.
Suppose the following FOR-loop command, to be run from the command-line
(if using a batch file, double each percent '%' sign):

  FOR %l IN ("a,b,c,d,e" "f,g,h,i,j") DO (
    FOR /F "delims=, tokens=1-3*" %a IN (%l) DO @echo %a-%b-%c-%d
  )

The outermost FOR-loop enumerates the two strings "a,b,c,d,e" and
"f,g,h,i,j" (placed in %l), and parse each of these in turn, splitting
them at each specified delimiter (here only one character) ',' and storing
the results in consecutive tokens %a, %b, %c, %d, with the last token %d
containing all the remaining string (non-split).
The expected result is:

  a-b-c-d,e
  f-g-h-i,j

However, due to the way the delimiters string specified by the "delims="
option is stored (no stack/heap duplication of the FOR-option substring,
but reading from it directly), during the first run of the innermost
FOR-loop, the option string "delims=, tokens=1-3*" was truncated to just
after the ',' due to the erroneous "delims=" parsing, so that when this
FOR-loop ran for a second time (to deal with the second string), the option
string was already erroneously truncated, without the "tokens=..." part,
so that the parsing results were not stored in the tokens and resulting in:

  a-b-c-d,e
  f-%b-%c-%d

instead. The solution is to save where the "delims=" string needs to be
cut, but wait until running the actual FOR-loop to terminate it (and
saving the original character too), run the FOR-loop body, and then
restore the original character where termination took place. This allows
having the FOR-loop option string valid for the next execution of the
FOR-loop.
2020-09-19 19:44:56 +02:00
Hermès Bélusca-Maïto 5cf0517be1
[CMD] Code formatting in SubstituteVar(). 2020-09-19 19:44:55 +02:00
Hermès Bélusca-Maïto cdc8e45b48
[CMD] Fix delayed expansion of variables.
CORE-13682

- Split SubstituteVars() into its main loop and a helper SubstituteVar()
  that just substitutes only one variable.

- Use this new helper as the basis of the proper implementation of the
  delayed expansion of variables.

- Fix a bug introduced in commit 495c82cc, when GetBatchVar() fails.
2020-09-19 19:44:55 +02:00
Hermès Bélusca-Maïto cb2a9c31a6
[CMD] Some fixes for getting the enhanced '%~XXX' batch/FOR variables.
CORE-11857 CORE-13736

It will be followed with a separate fix for the FOR-loop code.
Fixes some cmd_winetests.

A NULL pointer can be returned for a valid existing batch/FOR variable,
in which case the enhanced-variable getter should return an empty string.
This situation can happen e.g. when forcing a FOR-loop to tokenize a
text line with not enough tokens in it.
2020-09-19 19:44:54 +02:00
Hermès Bélusca-Maïto 014efdf7e8
[CMD_ROSTEST] Add tests for delayed expansion. 2020-09-19 19:44:53 +02:00
Kyle Katarn da36f799c7
[SHELL32] Minimal SHRunControlPanel implementation (#3095)
CORE-9215
Co-authored-by: Stanislav Motylkov <x86corez@gmail.com>
2020-09-19 16:23:44 +02:00
Katayama Hirofumi MZ ab115e30fe
[IMM32][INCLUDE] Add immtable.h and modify imm32.spec (#3207)
- Add immtable.h header into win32ss/user/user32/misc/.
- Modify imm32.spec file.
CORE-11700
2020-09-19 22:47:40 +09:00
He Yang fbbc3efd60
[RAPPS] Update help command (#3209)
Add missing FIND and INFO commands to the usage help string.
2020-09-19 15:20:14 +03:00
Katayama Hirofumi MZ d905dd5318 [APPWIZ] Add ES_AUTOHSCROLL to allow users to enter long text
CORE-17291
2020-09-19 13:50:58 +09:00
Kyle Katarn a5a30fc249
[SHELL32][SHELLEXT] Fix use of SHFileOperation results and improve log on failure / fix log spam (#3198) 2020-09-18 21:19:55 +02:00
Katayama Hirofumi MZ 3ad5ae6389 [SDK][INCLUDE] Add ANSI/Unicode mappings for SHAboutInfo and SHGetValueGoodBoot 2020-09-18 17:30:16 +09:00
Katayama Hirofumi MZ efde1f4268 [SDK][INCLUDE] Add SHGetValueGoodBootA/W prototypes 2020-09-18 17:22:16 +09:00
Katayama Hirofumi MZ 733d6cebed [SDK][INCLUDE] Add SHAnsiToUnicodeCP and SHUnicodeToAnsiCP prototypes 2020-09-18 17:09:29 +09:00
Aobi Chan CL e160524395
[TRANSLATION] Chinese Traditional translation improvements (#3085)
- Add Chinese Traditional language support for CHARMAP_NEW, DRWTSN32, UTILMAN, CHKDSK.
- Improve translation for CLIPBRD, MSCONFIG(_NEW), NOTEPAD, SHUTDOWN, SNDREC32, WINHLP32, DISKPART, FORMAT, REGSVR32, RUNDLL32, USERINIT, DESK.CPL and TIMEDATE.CPL.
2020-09-18 00:50:27 +02:00
Kyle Katarn ac2b2ef8c7
[CMD] HISTORY: Fix command output (missing linefeed) (#3205)
CORE-12603

Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
2020-09-18 00:17:08 +02:00
Katayama Hirofumi MZ 378b26ce27
[KERNEL32] Improve SetComputerNameExW (#3171)
Reduce failures of kernel32_apitest SetComputerNameExW testcase and improve SetComputerNameExW.
2020-09-17 23:51:47 +09:00