Commit graph

139 commits

Author SHA1 Message Date
Timo Kreuzer 9efafd640f [CRT] Import wine exception handling code
The code is mostly unchanged. This includes the following changes:
* Move all wine code to crt/wine to keep it separated from our own code
* Add a minimal winternl.h
* Remove the asm macros from wine/config.h
* Include wine/asm.h where required
* Fix the names of the exported functions (GCC uses thiscall now and no wrappers are used anymore)
2020-02-09 15:56:30 +01:00
Thomas Faber d528e63477
[CRT] Only write to the output buffer when necessary in _strlwr. CORE-16667
Like e884290d29, this is also a hack and is missing locale awareness.
2020-02-09 10:23:01 +01:00
Thomas Faber e884290d29
[CRT] Only write to the output buffer when necessary in _strupr. CORE-16667
Fixes crash in msvcrt_winetest:string.

This is a hack and is supposed to be specific to the C locale.
2020-02-08 13:04:12 +01:00
Hervé Poussineau 698e1a3782 [SDK] Use HEX macro, like elsewhere in the file 2020-01-22 20:57:04 +01:00
Victor Perevertkin fdd1d7d60c [MSVCRT] Export __acrt_iob_func to fix GCC build with latest RosBE 2.2 (#1835)
This adds an evil hack to persuade libstdc++, which tries to import __acrt_iob_func from a DLL.
This can only be solved cleanly by adding a GCC-compatible C++ standard library to our tree later.
2019-10-20 12:44:17 +02:00
Timo Kreuzer 99fe069ce6 [CRT][MSVCRT] Add __DestructExceptionObject from wine 2019-09-01 16:29:26 +02:00
Timo Kreuzer 95b3eebf71 [CRT] Use sprintf_s instead of sprintf
Fixes GCC 8 warning:
sdk/lib/crt/misc/i10output.c:83:25: error: '%d' directive writing between 1 and 11 bytes into a region of size 6 [-Werror=format-overflow=]
     sprintf(format, "%%.%dle", prec);
                         ^~
sdk/lib/crt/misc/i10output.c:83:21: note: directive argument in the range [-2147483648, 2147483646]
     sprintf(format, "%%.%dle", prec);
                     ^~~~~~~~~
sdk/lib/crt/misc/i10output.c:83:5: note: 'sprintf' output between 6 and 16 bytes into a destination of size 8
     sprintf(format, "%%.%dle", prec);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2019-07-20 13:56:18 +02:00
Mark Jansen 28a0aa9ae8
[CRT] Remove mingwm10.dll usage in tls support code
CORE-15491
2019-07-06 11:37:30 +02:00
Katayama Hirofumi MZ 6388b91a4d
[CRT][USER32] fix wsprintf additional argument (%*s) (#1470)
Reduce wsprintf function failures ("%*s"). CORE-13955
2019-04-05 16:33:18 +09:00
Hervé Poussineau c8719ee865 [CRT] Correctly share get_ioinfo()/release_ioinfo() functions between code units
This fixes the following compiler errors:

../sdk/lib/crt/stdio/stat64.c:7:13: error: inline function 'release_ioinfo' declared but never defined [-Werror]
 inline void release_ioinfo(ioinfo *info);
             ^~~~~~~~~~~~~~
../sdk/lib/crt/stdio/stat64.c:6:16: error: inline function 'get_ioinfo' declared but never defined [-Werror]
 inline ioinfo* get_ioinfo(int fd);
                ^~~~~~~~~~
../sdk/lib/crt/stdio/file.c:186:5: error: 'init_ioinfo_cs' is static but used in inline function 'get_ioinfo' which is not static [-Werror]
     init_ioinfo_cs(ret);
     ^~~~~~~~~~~~~~
../sdk/lib/crt/stdio/file.c:183:19: error: 'get_ioinfo_nolock' is static but used in inline function 'get_ioinfo' which is not static [-Werror]
     ioinfo *ret = get_ioinfo_nolock(fd);
2019-04-01 11:38:32 +02:00
Colin Finck bd0a28d1e4 Fix the MSVC version of ldexp filling up the FPU stack and bailing out with #IND after a few calls. Additionally, add it back to libcntpr.
MSVC was previously given a "result" variable to copy the fscale result from st(0). This led to another "fld" FPU stack push at the very end without popping the source value from the FPU stack.
Moreover, this copy isn't even needed: A simple "fstp st(1)" at the end pops an element from the FPU stack while effectively storing the result in st(0), the register used for returning a double value.
This problem didn't affect GCC, as it is only given the "fscale" instruction and does all necessary stack operations itself.

However, looking into the CRT sources, I found many other i386 implementations with inline assembly suffering from the same problem.
Fortunately, they have been replaced by pure assembly implementations a while ago, so it's time to finally remove them.
ldexp would have also been a candidate for a pure assembly implementation, but the required check for NaN and setting errno (verified on Win2003) already outweighs the benefits.
And we cannot just do a NaN check with FUCOMI as this is an i686/pentiumpro instruction while we're still targeting i586/pentium.

I'm also using this opportunity to clean up the ldexp.c header and only put in the remaining contributors as returned by "git blame".

Thanks to NightWolve1975 for reporting the problem! (https://twitter.com/nightwolve1975/status/1099042477531643912)
2019-03-03 16:11:27 +01:00
Timo Kreuzer 2a5bf96891 [CRT] Implement thread/fiber safe support for MSVC and Clang-CL
This is the most trivial (but also most efficient) implementation possible. Should be good enough for now.
2019-02-12 19:31:33 +01:00
Timo Kreuzer dc77e7d379 [CRT] Use alias names for rot functions when compiling with Clang-CL
Clang-CL does not support #pragma function like CL. The alternative to this approach is to disable all intrinsics for this single source file, but that is not trivial to do, as it can only be done by removing a compiler switch, which we have no CMake support for. Therefore this solution is simpler and as good.
2019-02-12 19:31:33 +01:00
Timo Kreuzer cfd1647914
[REACTOS] Fix misc 64 bit issues (#783)
* [WIN32K] Fix handle calculation in DbgGdiHTIntegrityCheck
* [NOTEPAD] Fix MSVC warnings
* [PSDK] Simplify *PROC definitions in windef.h
* [VIDEOPRT] Don't try to use NtVdmControl on x64
* [FREELDR] Fix some macros
* [CRT] Make qsort 64 bit compatible
* [NTOS] Use #ifndef _WIN64 instead of #ifdef _M_IX86 around C_ASSERTs
* [FAST486] Fix 64 bit warnings and change DWORD to ULONG, so it can be used in kernel mode
* [APPHELP_APITEST] Fix 64 bit issue
2019-01-05 10:50:11 +01:00
Mark Jansen 2d47c3be29
[CRT] spawn: define a unicode environment when needed
CORE-9182
2018-10-13 20:30:07 +02:00
Eric Kohl bb7292b287 [CRT] Fix two obvious typos in _mbbtype().
Patch by Kudratov Olimjon.

CORE-8545
2018-10-07 22:56:14 +02:00
Katayama Hirofumi MZ 0a8ade5dd4
[SDK][CRT] Fix _ismbblead undefined error on MSVC 2018-08-27 11:09:28 +02:00
Victor Perevertkin 2ae1675208 [ASM] Fixed ".double" macro in asm.inc.
GAS uses ".double" symbol for declaring floating-point constants and
".quad" symbol for declaring 64-bit numbers.
This is not compatible with our macro for MASM and introduces bugs.
Now 64-bit constants are supposed to be declared using ".quad" macro.
2018-07-15 23:25:23 +02:00
Hermès Bélusca-Maïto f215f394d8
[CRT] Always initialize _[w]pgmptr with a *FULL* path to the current application.
Otherwise fall back to the computed argv[0].
This is expected by some applications, for example Git.
Code is adapted from Wine.

Many thanks to Stanislav Motylkov for having investigated this bug!

CORE-12931 CORE-13892 CORE-13898 CORE-14066
2018-06-05 23:55:46 +02:00
Pierre Schweitzer 2dfe5e3f46
[CRT] Reimplement qsort() using FreeBSD implementation.
Our implementation had a bug that could be triggered while
building our USBD library on ReactOS: the compare function
could be called with a NULL pointer instead of a valid value.

With this bug fixed (and the cmd hack in CORE-14648), ReactOS
can totally selfhost :-)! I was able to build LiveCD and BootCD
without any trouble, crash, deadlock or whatever.
(Next step: having a buildbot slave hosted on ReactOS ;-)).

Enjoy: https://twitter.com/HeisSpiter/status/1002880397103988737

CORE-14680
2018-06-02 13:56:42 +02:00
Victor Perevertkin 65eabed2e1
[CRT] Fixed _tstat64 which wrongly set executable bits on files. CORE-10904
Replaced some string functions with their tchar.h analogs
2018-03-26 13:41:27 +02:00
Thomas Faber 2765bddffa
[CRT] Various fixes to Wine file functions.
Import the following Wine commits:
* ea2798f1ce9 Iván Matellanes: msvcrt: _setmode should check if file descriptor is valid.
* 9b495caacfd Carlo Bramini: msvcrt: Call SetFilePointer() with correct parameters.
* 13f34481b26 Carlo Bramini: msvcrt: Use MSVCRT_xxx macros instead of the same ones from GLIBC.
* 781b069ed81 Piotr Caban: msvcrt: Don't close HANDLE if stdout or stderr is sharing it.
2018-03-26 13:35:02 +02:00
Thomas Faber 6aa8e3cc20
[CRT] Update file descriptor handling to match Wine (7/7). CORE-14504
Import Wine commits by Piotr Caban:
* 6ed69c107f8 msvcrt: Avoid using global critical section while allocating new file descriptors.
* 725e4733cf8 msvcrt: Remove no longer needed global lock from functions using fd critical sections.
2018-03-26 13:01:00 +02:00
Thomas Faber 27b79867ea
[CRT] Update file descriptor handling to match Wine (6/7). CORE-14504
Import Wine commits by Piotr Caban:
* 417b6056877 msvcrt: Fix possible deadlock in dup2 function.
* e7fc2370885 msvcrt: Don't use fdend in create_io_inherit_block.
2018-03-26 13:00:49 +02:00
Thomas Faber 53864fcc5f
[CRT] Update file descriptor handling to match Wine (5/7). CORE-14504
Import Wine commits by Piotr Caban:
* 86baccc9ae9 msvcrt: Get rid of fdtoh helper.
* bd6eaf918c5 msvcrt: Get rid of is_valid_fd helper.
2018-03-26 13:00:39 +02:00
Thomas Faber bffd8201d0
[CRT] Update file descriptor handling to match Wine (4/7). CORE-14504
Import Wine commits by Piotr Caban:
* c7b0fb51543 msvcrt: Use fd critical section in _dup2.
* b052afd4afa msvcrt: Use fd critical section in msvcrt_free_fd.
* 16285f5700f msvcrt: Use fd critical section in read.
* 9ce2a8a60c1 msvcrt: Use fd critical section in create_io_inherit_block.
* f00b7f40584 msvcrt: Use fd critical section in _setmode.
* ba757eaec74 msvcrt: Use fd critical section in _write.
* eec7a565bec msvcrt: Don't lock __badioinfo.
2018-03-26 13:00:25 +02:00
Thomas Faber c529e727d7
[CRT] Update file descriptor handling to match Wine (3/7). CORE-14504
Import Wine commits by Piotr Caban:
* 6c2d4f1092d msvcrt: Use fd critical section in _fstat64.
* 9278190d468 msvcrt: Use fd critical section in _futime64.
2018-03-26 13:00:15 +02:00
Thomas Faber 9eb1eae28c
[CRT] Update file descriptor handling to match Wine (2/7). CORE-14504
Import Wine commits by Piotr Caban:
* 4508e665c07 msvcrt: Use fd critical section in _commit.
* afc6962a24a msvcrt: Use fd critical section in _close.
* 9a4cfbc3edc msvcrt: Use fd critical section in _eof.
* ffdd16cc0d7 msvcrt: Use fd critical section in _locking.
* fa6de597700 msvcrt: Use fd critical section in _lseeki64.
* f2f45d5fe67 msvcrt: Use fd critical section in _chsize_s.
2018-03-26 13:00:06 +02:00
Thomas Faber 25064fdf3c
[CRT] Update file descriptor handling to match Wine (1/7). CORE-14504
Import Wine commits by Piotr Caban:
* 0c4cb6ce5d4 msvcrt: Initialize file descriptor critical section.
* 1d791f5db24 msvcrt: Rename msvcrt_get_ioinfo function.
2018-03-26 12:59:58 +02:00
Hermès Bélusca-Maïto 1a31889801
[CRT] Implement the missing CRT _sc(w)printf() functions. CORE-14497 2018-03-23 22:30:18 +01:00
Hermès Bélusca-Maïto fd6e2d752d
[CRT] Fix implementation of _vsc(w)printf() for native NT. 2018-03-23 22:03:35 +01:00
Mark Jansen 2f548599a4
[SDK] Do not use a NUL file while calculating format string length
CORE-14342
2018-03-10 00:04:57 +01:00
Serge Gautherie 44023cb7d7
[CRT:STARTUP] Fix a Clang-Cl warning about GS_ExceptionPointers
"warning: unused variable 'GS_ExceptionPointers' [-Wunused-const-variable]"
Missed in CORE-8626 r64704.

CORE-14306
2018-02-10 18:13:12 +01:00
Amine Khaldi 09c06a2f45 [CLANG-CL] Initial commit that allows us to compile ReactOS with clang-cl. 2017-11-23 14:09:57 +01:00
Amine Khaldi 861360c65f [CRT/STARTUP] For some reason we get unresolved external symbol ___globallocalestatus when compiling with clang-cl. CORE-11799 CORE-14042 (#94) 2017-11-23 13:25:57 +01:00
zefklop 07c7295545
[CRT] fix bug in _rotr implementation 2017-10-28 10:28:27 +02:00
Samuel Serapion 136fabd357 [CRT] Use MAX_PATH for buffer meant to contain an arbitrary path
The cFileName member of WIN32_FIND_DATA is an array of MAX_PATH(260). Using strcpy/wcscpy with the target buffer being smaller is potentially bad. Corresponds to CID 1401198 and 1401195.
2017-10-23 14:44:38 +02:00
Colin Finck 9ebf43567d Add .gitattributes and .gitignore files and normalize line endings in the repository (#10) 2017-10-04 20:37:32 +02:00
Colin Finck c2c66aff7d Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers into modules, and delete rossubsys. 2017-10-03 07:45:34 +00:00