Author: hbelusca Date: Tue Jan 31 20:55:30 2017 New Revision: 73649
URL: http://svn.reactos.org/svn/reactos?rev=73649&view=rev Log: Port the following trunk fixes: [NTOS:MM]: Support MmSpecialPoolTag == '*' to mean all tags. By Serge Gautherie. CORE-12711 (r73607). [CMAKE]: Add missing target-level dependency when passing a target to add_rostests_file (r73613). [CALC]: Do not push memory stores onto the operation stack since they can't be acted upon. Based on a patch by Katayama Hirofumi MZ. CORE-12325 (r73620). [TREE]: Rework the utility (use explicit UNICODE, use WIN32 types, remove useless dependency to user32...), and add support for console ConUtils streams. CORE-12677 (r73622). [CMD]: The 'type' command can open & display files opened with write access. Patch by 'mjw', CORE-12602 (r73623).
Modified: branches/ReactOS-0.4.4-FOSDEM2017/reactos/ (props changed) branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/applications/calc/winmain.c branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/applications/cmdutils/tree/CMakeLists.txt branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/applications/cmdutils/tree/tree.c branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/shell/cmd/type.c branches/ReactOS-0.4.4-FOSDEM2017/reactos/ntoskrnl/mm/ARM3/special.c branches/ReactOS-0.4.4-FOSDEM2017/reactos/sdk/cmake/CMakeMacros.cmake
Propchange: branches/ReactOS-0.4.4-FOSDEM2017/reactos/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Jan 31 20:55:30 2017 @@ -23,4 +23,4 @@ /branches/usb-bringup:51335,51337,51341-51343,51348,51350,51353,51355,51365-51369,51372,51384-54388,54396-54398,54736-54737,54752-54754,54756-54760,54762,54764-54765,54767-54768,54772,54774-54777,54781,54787,54790-54792,54797-54798,54806,54808,54834-54838,54843,54850,54852,54856,54858-54859 /branches/usb-bringup-trunk:55019-55543,55548-55554,55556-55567 /branches/wlan-bringup:54809-54998 -/trunk/reactos:73522-73601,73633-73636,73642-73643 +/trunk/reactos:73522-73601,73607,73613,73620,73622-73623,73633-73636,73642-73643
Modified: branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/applications/calc/winmain.c URL: http://svn.reactos.org/svn/reactos/branches/ReactOS-0.4.4-FOSDEM2017/reactos... ============================================================================== --- branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/applications/calc/winmain.c [iso-8859-1] (original) +++ branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/applications/calc/winmain.c [iso-8859-1] Tue Jan 31 20:55:30 2017 @@ -212,8 +212,8 @@ { IDC_BUTTON_DMS, MODIFIER_INV, 1, rpn_dec2dms, rpn_dms2dec, NULL, NULL }, { IDC_BUTTON_FE, 0, 1, run_fe, NULL, NULL, NULL }, { IDC_BUTTON_DAT, 0, 1, run_dat_sta, NULL, NULL, NULL, }, - { IDC_BUTTON_MP, MODIFIER_INV, 1, run_mp, run_mm, NULL, NULL, }, - { IDC_BUTTON_MS, MODIFIER_INV, 1, run_ms, run_mw, NULL, NULL, }, + { IDC_BUTTON_MP, MODIFIER_INV|NO_CHAIN, 1, run_mp, run_mm, NULL, NULL, }, + { IDC_BUTTON_MS, MODIFIER_INV|NO_CHAIN, 1, run_ms, run_mw, NULL, NULL, }, { IDC_BUTTON_CANC, NO_CHAIN, 0, run_canc, NULL, NULL, NULL, }, { IDC_BUTTON_RIGHTPAR, NO_CHAIN, 1, run_rpar, NULL, NULL, NULL, }, { IDC_BUTTON_LEFTPAR, NO_CHAIN, 0, run_lpar, NULL, NULL, NULL, },
Modified: branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/applications/cmdutils/tree/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/ReactOS-0.4.4-FOSDEM2017/reactos... ============================================================================== --- branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/applications/cmdutils/tree/CMakeLists.txt [iso-8859-1] (original) +++ branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/applications/cmdutils/tree/CMakeLists.txt [iso-8859-1] Tue Jan 31 20:55:30 2017 @@ -1,6 +1,9 @@ + +include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
add_executable(tree tree.c tree.rc) set_module_type(tree win32cui UNICODE) +target_link_libraries(tree conutils ${PSEH_LIB}) +add_importlibs(tree msvcrt kernel32) set_target_properties(tree PROPERTIES SUFFIX ".com") -add_importlibs(tree user32 msvcrt kernel32) add_cd_file(TARGET tree DESTINATION reactos/system32 FOR all)
Modified: branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/applications/cmdutils/tree/tree.c URL: http://svn.reactos.org/svn/reactos/branches/ReactOS-0.4.4-FOSDEM2017/reactos... ============================================================================== --- branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/applications/cmdutils/tree/tree.c [iso-8859-1] (original) +++ branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/applications/cmdutils/tree/tree.c [iso-8859-1] Tue Jan 31 20:55:30 2017 @@ -1,44 +1,29 @@ -/* +/* * PROJECT: ReactOS * LICENSE: GNU GPLv2 only as published by the Free Software Foundation - * PURPOSE: Implements tree.com functionality similar to Windows + * PURPOSE: Implements tree.com command similar to Windows * PROGRAMMERS: Asif Bahrainwala (asif_bahrainwala@hotmail.com) */
#include <stdio.h> #include <stdlib.h> + #include <windef.h> #include <winbase.h> -#include <winuser.h> + +#include <conutils.h>
#include "resource.h"
#define STR_MAX 2048
-static void GetDirectoryStructure(wchar_t* strPath, UINT width, const wchar_t* prevLine); - -/* if this flag is set to true, files will also be listed */ +static VOID GetDirectoryStructure(PWSTR strPath, UINT width, PCWSTR prevLine); + +/* If this flag is set to true, files will also be listed within the folder structure */ BOOL bShowFiles = FALSE;
-/* if this flag is true, ASCII characters will be used instead of UNICODE ones */ +/* If this flag is true, ASCII characters will be used instead of UNICODE ones */ BOOL bUseAscii = FALSE; - -/* - * This takes strings from a resource string table - * and outputs it to the console. - */ -VOID PrintResourceString(INT resID, ...) -{ - WCHAR tmpBuffer[STR_MAX]; - CHAR tmpBufferA[STR_MAX]; - va_list arg_ptr; - - va_start(arg_ptr, resID); - LoadStringW(GetModuleHandle(NULL), resID, tmpBuffer, STR_MAX); - CharToOemW(tmpBuffer, tmpBufferA); - vfprintf(stdout, tmpBufferA, arg_ptr); - va_end(arg_ptr); -}
/** * @name: HasSubFolder @@ -47,20 +32,20 @@ * Must specify folder name * * @return -* true if folder has sub folders, else will return false +* true if folder has sub-folders, else will return false */ -static BOOL HasSubFolder(const wchar_t *strPath1) +static BOOL HasSubFolder(PCWSTR strPath1) { BOOL ret = FALSE; - WIN32_FIND_DATA FindFileData; + WIN32_FIND_DATAW FindFileData; HANDLE hFind = NULL; - static wchar_t strPath[STR_MAX] = L""; + static WCHAR strPath[STR_MAX] = L""; ZeroMemory(strPath, sizeof(strPath));
wcscat(strPath, strPath1); wcscat(strPath, L"\*.");
- hFind = FindFirstFile(strPath, &FindFileData); + hFind = FindFirstFileW(strPath, &FindFileData); do { if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) @@ -71,11 +56,11 @@ continue; }
- ret = TRUE; //found subfolder + ret = TRUE; // Sub-folder found break; } } - while (FindNextFile(hFind, &FindFileData)); + while (FindNextFileW(hFind, &FindFileData));
FindClose(hFind); return ret; @@ -100,22 +85,22 @@ * @return * void */ -static void DrawTree(const wchar_t* strPath, - const WIN32_FIND_DATA *arrFolder, +static VOID DrawTree(PCWSTR strPath, + const WIN32_FIND_DATAW* arrFolder, const size_t szArr, UINT width, - const wchar_t *prevLine, + PCWSTR prevLine, BOOL drawfolder) { BOOL bHasSubFolder = HasSubFolder(strPath); UINT i = 0;
- /* this will format the spaces required for correct formatting */ + /* This will format the spaces required for correct formatting */ for (i = 0; i < szArr; ++i) { - wchar_t *consoleOut = (wchar_t*)malloc(sizeof(wchar_t) * STR_MAX); + PWSTR consoleOut = (PWSTR)malloc(STR_MAX * sizeof(WCHAR)); UINT j = 0; - static wchar_t str[STR_MAX]; + static WCHAR str[STR_MAX];
/* As we do not seem to have the _s functions properly set up, use the non-secure version for now */ //wcscpy_s(consoleOut, STR_MAX, L""); @@ -125,15 +110,14 @@
for (j = 0; j < width - 1; ++j) { - /* if the previous line has 'â' or 'â' then the current line will + /* If the previous line has 'â' or 'â' then the current line will add 'â' to continue the connecting line */ - if ((BYTE)prevLine[j] == 195 || (BYTE)prevLine[j] == 179 || - (BYTE)prevLine[j] == L'+' || (BYTE)prevLine[j] == L'|') + if (prevLine[j] == L'\x251C' || prevLine[j] == L'\x2502' || + prevLine[j] == L'+' || prevLine[j] == L'|') { if (!bUseAscii) { - wchar_t a[] = {179, 0}; - wcscat(consoleOut, a); + wcscat(consoleOut, L"\x2502"); } else { @@ -150,27 +134,27 @@ { if (drawfolder) { - /* will add 'ââââFolder name */ + /* Add 'ââââFolder name' (\xC3\xC4\xC4\xC4 or \x251C\x2500\x2500\x2500) */ if (bUseAscii) - wsprintf(str, L"+---%s", (wchar_t*)arrFolder[i].cFileName); - else - wsprintf(str, L"%c%c%c%c%s", 195, 196, 196, 196, (wchar_t*)arrFolder[i].cFileName); + swprintf(str, L"+---%s", arrFolder[i].cFileName); + else + swprintf(str, L"\x251C\x2500\x2500\x2500%s", arrFolder[i].cFileName); } else { if (bHasSubFolder) { - /* will add 'â FileNamw' //thie line is added to connect - the belowfolder sub structure */ + /* Add 'â FileName' (\xB3 or \x2502) */ + // This line is added to connect the below-folder sub-structure if (bUseAscii) - wsprintf(str,L"| %s", (wchar_t*)arrFolder[i].cFileName); + swprintf(str, L"| %s", arrFolder[i].cFileName); else - wsprintf(str,L"%c %s", 179, (wchar_t*)arrFolder[i].cFileName); - } - else - { - /* will add ' FileNamw' */ - wsprintf(str,L" %s", (wchar_t*)arrFolder[i].cFileName); + swprintf(str, L"\x2502 %s", arrFolder[i].cFileName); + } + else + { + /* Add ' FileName' */ + swprintf(str, L" %s", arrFolder[i].cFileName); } } } @@ -178,44 +162,44 @@ { if (drawfolder) { - /* 'ââââFolder name' */ + /* 'ââââFolder name' (\xC0\xC4\xC4\xC4 or \x2514\x2500\x2500\x2500) */ if (bUseAscii) - wsprintf(str, L"\---%s", (wchar_t*)arrFolder[i].cFileName); - else - wsprintf(str, L"%c%c%c%c%s", 192, 196, 196, 196, (wchar_t*)arrFolder[i].cFileName); + swprintf(str, L"\---%s", arrFolder[i].cFileName); + else + swprintf(str, L"\x2514\x2500\x2500\x2500%s", arrFolder[i].cFileName); } else { if (bHasSubFolder) { - /* 'â FileName' */ + /* 'â FileName' (\xB3 or \x2502) */ if (bUseAscii) - wsprintf(str, L"| %s", (wchar_t*)arrFolder[i].cFileName); + swprintf(str, L"| %s", arrFolder[i].cFileName); else - wsprintf(str, L"%c %s", 179, (wchar_t*)arrFolder[i].cFileName); + swprintf(str, L"\x2502 %s", arrFolder[i].cFileName); } else { /* ' FileName' */ - wsprintf(str, L" %s", (wchar_t*)arrFolder[i].cFileName); + swprintf(str, L" %s", arrFolder[i].cFileName); } } }
wcscat(consoleOut, str); - wprintf(L"%s\n", consoleOut); + ConPrintf(StdOut, L"%s\n", consoleOut);
if (drawfolder) { - wchar_t *str = (wchar_t*)malloc(STR_MAX * sizeof(wchar_t)); - ZeroMemory(str, STR_MAX * sizeof(wchar_t)); - - wcscat(str, strPath); - wcscat(str, L"\"); - wcscat(str, arrFolder[i].cFileName); - GetDirectoryStructure(str, width + 4, consoleOut); - - free(str); + PWSTR str = (PWSTR)malloc(STR_MAX * sizeof(WCHAR)); + ZeroMemory(str, STR_MAX * sizeof(WCHAR)); + + wcscat(str, strPath); + wcscat(str, L"\"); + wcscat(str, arrFolder[i].cFileName); + GetDirectoryStructure(str, width + 4, consoleOut); + + free(str); } free(consoleOut); } @@ -235,27 +219,27 @@ * @return * void */ -static void -GetDirectoryStructure(wchar_t* strPath, UINT width, const wchar_t* prevLine) +static VOID +GetDirectoryStructure(PWSTR strPath, UINT width, PCWSTR prevLine) { - WIN32_FIND_DATA FindFileData; + WIN32_FIND_DATAW FindFileData; HANDLE hFind = NULL; //DWORD err = 0; - /* will fill up with names of all sub folders */ - WIN32_FIND_DATA *arrFolder = NULL; + /* Fill up with names of all sub-folders */ + WIN32_FIND_DATAW *arrFolder = NULL; UINT arrFoldersz = 0; - /* will fill up with names of all sub folders */ - WIN32_FIND_DATA *arrFile = NULL; + /* Fill up with names of all sub-folders */ + WIN32_FIND_DATAW *arrFile = NULL; UINT arrFilesz = 0;
ZeroMemory(&FindFileData, sizeof(FindFileData));
{ - static wchar_t tmp[STR_MAX] = L""; + static WCHAR tmp[STR_MAX] = L""; ZeroMemory(tmp, sizeof(tmp)); wcscat(tmp, strPath); wcscat(tmp, L"\*.*"); - hFind = FindFirstFile(tmp, &FindFileData); + hFind = FindFirstFileW(tmp, &FindFileData); //err = GetLastError(); }
@@ -271,7 +255,7 @@ continue;
++arrFoldersz; - arrFolder = (WIN32_FIND_DATA*)realloc(arrFolder, arrFoldersz * sizeof(FindFileData)); + arrFolder = (WIN32_FIND_DATAW*)realloc(arrFolder, arrFoldersz * sizeof(FindFileData));
if (arrFolder == NULL) exit(-1); @@ -282,7 +266,7 @@ else { ++arrFilesz; - arrFile = (WIN32_FIND_DATA*)realloc(arrFile, arrFilesz * sizeof(FindFileData)); + arrFile = (WIN32_FIND_DATAW*)realloc(arrFile, arrFilesz * sizeof(FindFileData));
if(arrFile == NULL) exit(-1); @@ -290,17 +274,17 @@ arrFile[arrFilesz - 1] = FindFileData; } } - while (FindNextFile(hFind, &FindFileData)); + while (FindNextFileW(hFind, &FindFileData));
FindClose(hFind);
if (bShowFiles) { - /* will free(arrFile) */ + /* Will free(arrFile) */ DrawTree(strPath, arrFile, arrFilesz, width, prevLine, FALSE); }
- /* will free(arrFile) */ + /* Will free(arrFile) */ DrawTree(strPath, arrFolder, arrFoldersz, width, prevLine, TRUE);
free(arrFolder); @@ -314,18 +298,21 @@ * @return * error /success value */ -int wmain( int argc, wchar_t *argv[]) +int wmain(int argc, WCHAR* argv[]) { DWORD dwSerial = 0; - wchar_t t = 0; - wchar_t *strPath = NULL; + WCHAR t = 0; + PWSTR strPath = NULL; DWORD sz = 0; - //wchar_t *context = NULL; - wchar_t *driveLetter = NULL; + //PWSTR context = NULL; + PWSTR driveLetter = NULL;
int i;
- /* parse the command line */ + /* Initialize the Console Standard Streams */ + ConInitStdStreams(); + + /* Parse the command line */ for (i = 1; i < argc; ++i) { if (argv[i][0] == L'-' || argv[i][0] == L'/') @@ -333,49 +320,51 @@ switch (towlower(argv[i][1])) { case L'?': - /* will print help and exit after */ - PrintResourceString(IDS_USAGE); + /* Print help and exit after */ + ConResPuts(StdOut, IDS_USAGE); return 0; + case L'f': - /* if set to true, will populate all the files within the folder structure */ bShowFiles = TRUE; break; + case L'a': bUseAscii = TRUE; break; + default: break; } } else { - /* this must be path to some folder */ - - /* will set the current directory for this executable */ + /* This must be path to some folder */ + + /* Set the current directory for this executable */ BOOL b = SetCurrentDirectoryW(argv[i]); if (b == FALSE) { - PrintResourceString(IDS_NO_SUBDIRECTORIES); + ConResPuts(StdOut, IDS_NO_SUBDIRECTORIES); return 1; } } }
- PrintResourceString(IDS_FOLDER_PATH); - - GetVolumeInformation(NULL, NULL, 0, &dwSerial, NULL, NULL, NULL, 0); - PrintResourceString(IDS_VOL_SERIAL, dwSerial >> 16, dwSerial & 0xffff); + ConResPuts(StdOut, IDS_FOLDER_PATH); + + GetVolumeInformationW(NULL, NULL, 0, &dwSerial, NULL, NULL, NULL, 0); + ConResPrintf(StdOut, IDS_VOL_SERIAL, dwSerial >> 16, dwSerial & 0xffff);
/* get the buffer size */ - sz = GetCurrentDirectory(1, &t); + sz = GetCurrentDirectoryW(1, &t); /* must not return before calling delete[] */ - strPath = (wchar_t*)malloc(sizeof(wchar_t) * sz); + strPath = (PWSTR)malloc(sz * sizeof(WCHAR));
/* get the current directory */ - GetCurrentDirectory(sz, strPath); + GetCurrentDirectoryW(sz, strPath);
/* get the drive letter , must not return before calling delete[] */ - driveLetter = (wchar_t*)malloc(sizeof(wchar_t) * sz); + driveLetter = (PWSTR)malloc(sz * sizeof(WCHAR));
/* As we do not seem to have the _s functions properly set up, use the non-secure version for now */ //wcscpy_s(driveLetter,sz,strPath); @@ -383,15 +372,15 @@ wcscpy(driveLetter, strPath); wcstok(driveLetter, L":");
- wprintf(L"%s:.\n", driveLetter); + ConPrintf(StdOut, L"%s:.\n", driveLetter);
free(driveLetter);
- /* get the sub directories within this current folder */ + /* get the sub-directories within this current folder */ GetDirectoryStructure(strPath, 1, L" ");
free(strPath); - wprintf(L"\n"); + ConPuts(StdOut, L"\n");
return 0; }
Modified: branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/shell/cmd/type.c URL: http://svn.reactos.org/svn/reactos/branches/ReactOS-0.4.4-FOSDEM2017/reactos... ============================================================================== --- branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/shell/cmd/type.c [iso-8859-1] (original) +++ branches/ReactOS-0.4.4-FOSDEM2017/reactos/base/shell/cmd/type.c [iso-8859-1] Tue Jan 31 20:55:30 2017 @@ -82,7 +82,7 @@
hFile = CreateFile(argv[i], GENERIC_READ, - FILE_SHARE_READ, NULL, + FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
Modified: branches/ReactOS-0.4.4-FOSDEM2017/reactos/ntoskrnl/mm/ARM3/special.c URL: http://svn.reactos.org/svn/reactos/branches/ReactOS-0.4.4-FOSDEM2017/reactos... ============================================================================== --- branches/ReactOS-0.4.4-FOSDEM2017/reactos/ntoskrnl/mm/ARM3/special.c [iso-8859-1] (original) +++ branches/ReactOS-0.4.4-FOSDEM2017/reactos/ntoskrnl/mm/ARM3/special.c [iso-8859-1] Tue Jan 31 20:55:30 2017 @@ -78,7 +78,14 @@ { /* Special pool is not suitable for allocations bigger than 1 page */ if (NumberOfBytes > (PAGE_SIZE - sizeof(POOL_HEADER))) + { return FALSE; + } + + if (MmSpecialPoolTag == '*') + { + return TRUE; + }
return Tag == MmSpecialPoolTag; }
Modified: branches/ReactOS-0.4.4-FOSDEM2017/reactos/sdk/cmake/CMakeMacros.cmake URL: http://svn.reactos.org/svn/reactos/branches/ReactOS-0.4.4-FOSDEM2017/reactos... ============================================================================== --- branches/ReactOS-0.4.4-FOSDEM2017/reactos/sdk/cmake/CMakeMacros.cmake [iso-8859-1] (original) +++ branches/ReactOS-0.4.4-FOSDEM2017/reactos/sdk/cmake/CMakeMacros.cmake [iso-8859-1] Tue Jan 31 20:55:30 2017 @@ -837,7 +837,11 @@ set(_ROSTESTS_SUBDIR "/${_ROSTESTS_SUBDIR}") endif()
- add_cd_file(FILE ${_ROSTESTS_FILE} DESTINATION "reactos/bin${_ROSTESTS_SUBDIR}" NAME_ON_CD ${_ROSTESTS_RENAME} FOR all) + if(_ROSTESTS_TARGET) + add_cd_file(TARGET ${_ROSTESTS_TARGET} FILE ${_ROSTESTS_FILE} DESTINATION "reactos/bin${_ROSTESTS_SUBDIR}" NAME_ON_CD ${_ROSTESTS_RENAME} FOR all) + else() + add_cd_file(FILE ${_ROSTESTS_FILE} DESTINATION "reactos/bin${_ROSTESTS_SUBDIR}" NAME_ON_CD ${_ROSTESTS_RENAME} FOR all) + endif()
if(DEFINED ENV{ROSTESTS_INSTALL}) install(FILES ${_ROSTESTS_FILE} DESTINATION "$ENV{ROSTESTS_INSTALL}${_ROSTESTS_SUBDIR}" COMPONENT rostests RENAME ${_ROSTESTS_RENAME})