Return-Path: X-Original-To: apmail-hadoop-common-commits-archive@www.apache.org Delivered-To: apmail-hadoop-common-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 508CCDD56 for ; Mon, 21 Jan 2013 21:41:03 +0000 (UTC) Received: (qmail 71015 invoked by uid 500); 21 Jan 2013 21:41:03 -0000 Delivered-To: apmail-hadoop-common-commits-archive@hadoop.apache.org Received: (qmail 70977 invoked by uid 500); 21 Jan 2013 21:41:03 -0000 Mailing-List: contact common-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: common-dev@hadoop.apache.org Delivered-To: mailing list common-commits@hadoop.apache.org Received: (qmail 70969 invoked by uid 99); 21 Jan 2013 21:41:02 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 21 Jan 2013 21:41:02 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 21 Jan 2013 21:40:58 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 9F6D82388900 for ; Mon, 21 Jan 2013 21:40:37 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1436634 - in /hadoop/common/branches/branch-1-win: ./ src/winutils/ src/winutils/include/ Date: Mon, 21 Jan 2013 21:40:37 -0000 To: common-commits@hadoop.apache.org From: suresh@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130121214037.9F6D82388900@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: suresh Date: Mon Jan 21 21:40:36 2013 New Revision: 1436634 URL: http://svn.apache.org/viewvc?rev=1436634&view=rev Log: HADOOP-9177. Address issues that reported by static code analysis on winutils. Contributed by Ivan Mitic. Modified: hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt hadoop/common/branches/branch-1-win/src/winutils/chmod.c hadoop/common/branches/branch-1-win/src/winutils/chown.c hadoop/common/branches/branch-1-win/src/winutils/groups.c hadoop/common/branches/branch-1-win/src/winutils/hardlink.c hadoop/common/branches/branch-1-win/src/winutils/include/winutils.h hadoop/common/branches/branch-1-win/src/winutils/libwinutils.c hadoop/common/branches/branch-1-win/src/winutils/ls.c hadoop/common/branches/branch-1-win/src/winutils/main.c hadoop/common/branches/branch-1-win/src/winutils/symlink.c hadoop/common/branches/branch-1-win/src/winutils/systeminfo.c hadoop/common/branches/branch-1-win/src/winutils/task.c Modified: hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt?rev=1436634&r1=1436633&r2=1436634&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt (original) +++ hadoop/common/branches/branch-1-win/CHANGES.branch-1-win.txt Mon Jan 21 21:40:36 2013 @@ -337,3 +337,6 @@ Branch-hadoop-1-win (branched from branc HADOOP-9191. TestAccessControlList and TestJobHistoryConfig fail with JDK7. (Arpit Agarwal via suresh) + + HADOOP-9177. Address issues that reported by static code analysis on + winutils. (Ivan Mitic via suresh) Modified: hadoop/common/branches/branch-1-win/src/winutils/chmod.c URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/chmod.c?rev=1436634&r1=1436633&r2=1436634&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/chmod.c (original) +++ hadoop/common/branches/branch-1-win/src/winutils/chmod.c Mon Jan 21 21:40:36 2013 @@ -74,18 +74,22 @@ static BOOL ParseMode(LPCWSTR modeString static BOOL FreeActions(PMODE_CHANGE_ACTION actions); -static BOOL ParseCommandLineArguments(__in int argc, __in wchar_t *argv[], - __out BOOL *rec, __out_opt INT *mask, - __out_opt PMODE_CHANGE_ACTION *actions, __out LPCWSTR *path); +static BOOL ParseCommandLineArguments( + __in int argc, + __in_ecount(argc) wchar_t *argv[], + __out BOOL *rec, + __out_opt INT *mask, + __out_opt PMODE_CHANGE_ACTION *actions, + __out LPCWSTR *path); static BOOL ChangeFileModeByActions(__in LPCWSTR path, - PMODE_CHANGE_ACTION actions); + MODE_CHANGE_ACTION const *actions); static BOOL ChangeFileMode(__in LPCWSTR path, __in_opt INT mode, - __in_opt PMODE_CHANGE_ACTION actions); + __in_opt MODE_CHANGE_ACTION const *actions); static BOOL ChangeFileModeRecursively(__in LPCWSTR path, __in_opt INT mode, - __in_opt PMODE_CHANGE_ACTION actions); + __in_opt MODE_CHANGE_ACTION const *actions); //---------------------------------------------------------------------------- @@ -99,7 +103,7 @@ static BOOL ChangeFileModeRecursively(__ // // Notes: // -int Chmod(int argc, wchar_t *argv[]) +int Chmod(__in int argc, __in_ecount(argc) wchar_t *argv[]) { LPWSTR pathName = NULL; LPWSTR longPathName = NULL; @@ -169,7 +173,7 @@ ChmodEnd: // Notes: // static BOOL ChangeFileMode(__in LPCWSTR path, __in_opt INT unixAccessMask, - __in_opt PMODE_CHANGE_ACTION actions) + __in_opt MODE_CHANGE_ACTION const *actions) { if (actions != NULL) return ChangeFileModeByActions(path, actions); @@ -202,7 +206,7 @@ static BOOL ChangeFileMode(__in LPCWSTR // - Otherwise, call the method on all its children, then change its mode. // static BOOL ChangeFileModeRecursively(__in LPCWSTR path, __in_opt INT mode, - __in_opt PMODE_CHANGE_ACTION actions) + __in_opt MODE_CHANGE_ACTION const *actions) { BOOL isDir = FALSE; BOOL isSymlink = FALSE; @@ -335,7 +339,9 @@ ChangeFileModeRecursivelyEnd: // 1. Recursive is only set on directories // 2. 'actions' is NULL if the mode is octal // -static BOOL ParseCommandLineArguments(__in int argc, __in wchar_t *argv[], +static BOOL ParseCommandLineArguments( + __in int argc, + __in_ecount(argc) wchar_t *argv[], __out BOOL *rec, __out_opt INT *mask, __out_opt PMODE_CHANGE_ACTION *actions, @@ -551,9 +557,9 @@ static INT ComputeNewMode(__in INT oldMo // none // static BOOL ConvertActionsToMask(__in LPCWSTR path, - __in PMODE_CHANGE_ACTION actions, __out PINT puMask) + __in MODE_CHANGE_ACTION const *actions, __out PINT puMask) { - PMODE_CHANGE_ACTION curr = NULL; + MODE_CHANGE_ACTION const *curr = NULL; BY_HANDLE_FILE_INFORMATION fileInformation; DWORD dwErrorCode = ERROR_SUCCESS; @@ -608,7 +614,7 @@ static BOOL ConvertActionsToMask(__in LP // none // static BOOL ChangeFileModeByActions(__in LPCWSTR path, - PMODE_CHANGE_ACTION actions) + MODE_CHANGE_ACTION const *actions) { INT mask = 0; @@ -769,10 +775,14 @@ static BOOL ParseMode(LPCWSTR modeString switch (c) { case NULL: + __fallthrough; case L',': i++; + __fallthrough; case L'+': + __fallthrough; case L'-': + __fallthrough; case L'=': state = PARSE_MODE_ACTION_WHO_STATE; Modified: hadoop/common/branches/branch-1-win/src/winutils/chown.c URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/chown.c?rev=1436634&r1=1436633&r2=1436634&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/chown.c (original) +++ hadoop/common/branches/branch-1-win/src/winutils/chown.c Mon Jan 21 21:40:36 2013 @@ -116,13 +116,13 @@ ChangeFileOwnerByNameEnd: // Notes: // // -int Chown(int argc, wchar_t *argv[]) +int Chown(__in int argc, __in_ecount(argc) wchar_t *argv[]) { LPWSTR pathName = NULL; LPWSTR ownerInfo = NULL; - LPWSTR colonPos = NULL; + WCHAR const * colonPos = NULL; LPWSTR userName = NULL; size_t userNameLen = 0; Modified: hadoop/common/branches/branch-1-win/src/winutils/groups.c URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/groups.c?rev=1436634&r1=1436633&r2=1436634&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/groups.c (original) +++ hadoop/common/branches/branch-1-win/src/winutils/groups.c Mon Jan 21 21:40:36 2013 @@ -32,12 +32,12 @@ // otherwise, space. // static BOOL PrintGroups( - LPLOCALGROUP_USERS_INFO_0 groups, + LOCALGROUP_USERS_INFO_0 const *groups, DWORD entries, BOOL formatOutput) { BOOL ret = TRUE; - LPLOCALGROUP_USERS_INFO_0 pTmpBuf = groups; + LOCALGROUP_USERS_INFO_0 const *pTmpBuf = groups; DWORD i; for (i = 0; i < entries; i++) @@ -80,7 +80,10 @@ static BOOL PrintGroups( // TRUE on the valid command line, FALSE otherwise // static BOOL ParseCommandLine( - int argc, wchar_t *argv[], wchar_t **user, BOOL *formatOutput) + __in int argc, + __in_ecount(argc) wchar_t *argv[], + __out PWSTR *user, + __out BOOL *formatOutput) { *formatOutput = FALSE; @@ -132,7 +135,7 @@ static BOOL ParseCommandLine( // Notes: // // -int Groups(int argc, wchar_t *argv[]) +int Groups(__in int argc, __in_ecount(argc) wchar_t *argv[]) { LPWSTR input = NULL; Modified: hadoop/common/branches/branch-1-win/src/winutils/hardlink.c URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/hardlink.c?rev=1436634&r1=1436633&r2=1436634&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/hardlink.c (original) +++ hadoop/common/branches/branch-1-win/src/winutils/hardlink.c Mon Jan 21 21:40:36 2013 @@ -37,7 +37,7 @@ typedef enum HardLinkCommandOptionType // TRUE: If the command line is valid // FALSE: otherwise static BOOL ParseCommandLine(__in int argc, - __in wchar_t *argv[], + __in_ecount(argc) wchar_t *argv[], __out HardLinkCommandOption *command) { *command = HardLinkInvalid; @@ -161,7 +161,7 @@ HardlinkCreateExit: // Returns: // EXIT_SUCCESS: On success // EXIT_FAILURE: otherwise -int Hardlink(int argc, wchar_t *argv[]) +int Hardlink(__in int argc, __in_ecount(argc) wchar_t *argv[]) { DWORD dwErrorCode = ERROR_SUCCESS; int ret = EXIT_FAILURE; Modified: hadoop/common/branches/branch-1-win/src/winutils/include/winutils.h URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/include/winutils.h?rev=1436634&r1=1436633&r2=1436634&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/include/winutils.h (original) +++ hadoop/common/branches/branch-1-win/src/winutils/include/winutils.h Mon Jan 21 21:40:36 2013 @@ -20,13 +20,11 @@ #endif #pragma once - #include #include #include #include #include -#include #include #include @@ -85,25 +83,25 @@ enum WindowsAclMask extern const ACCESS_MASK WinMasks[]; -int Ls(int argc, wchar_t *argv[]); +int Ls(__in int argc, __in_ecount(argc) wchar_t *argv[]); void LsUsage(LPCWSTR program); -int Chmod(int argc, wchar_t *argv[]); +int Chmod(__in int argc, __in_ecount(argc) wchar_t *argv[]); void ChmodUsage(LPCWSTR program); -int Chown(int argc, wchar_t *argv[]); +int Chown(__in int argc, __in_ecount(argc) wchar_t *argv[]); void ChownUsage(LPCWSTR program); -int Groups(int argc, wchar_t *argv[]); +int Groups(__in int argc, __in_ecount(argc) wchar_t *argv[]); void GroupsUsage(LPCWSTR program); -int Hardlink(int argc, wchar_t *argv[]); +int Hardlink(__in int argc, __in_ecount(argc) wchar_t *argv[]); void HardlinkUsage(); -int Task(int argc, wchar_t *argv[]); +int Task(__in int argc, __in_ecount(argc) wchar_t *argv[]); void TaskUsage(); -int Symlink(int argc, wchar_t *argv[]); +int Symlink(__in int argc, __in_ecount(argc) wchar_t *argv[]); void SymlinkUsage(); int SystemInfo(); @@ -114,9 +112,9 @@ DWORD GetFileInformationByName(__in LPCW DWORD ConvertToLongPath(__in PCWSTR path, __deref_out PWSTR *newPath); -DWORD GetSidFromAcctNameW(LPCWSTR acctName, PSID* ppSid); +DWORD GetSidFromAcctNameW(__in PCWSTR acctName, __out PSID* ppSid); -DWORD GetAccntNameFromSid(PSID pSid, LPWSTR *ppAcctName); +DWORD GetAccntNameFromSid(__in PSID pSid, __out LPWSTR *ppAcctName); void ReportErrorCode(LPCWSTR func, DWORD err); Modified: hadoop/common/branches/branch-1-win/src/winutils/libwinutils.c URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/libwinutils.c?rev=1436634&r1=1436633&r2=1436634&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/libwinutils.c (original) +++ hadoop/common/branches/branch-1-win/src/winutils/libwinutils.c Mon Jan 21 21:40:36 2013 @@ -226,7 +226,6 @@ ConvertToLongPathExit: if (dwErrorCode != ERROR_SUCCESS) { LocalFree(newPathValue); - *newPath = NULL; } return dwErrorCode; @@ -398,7 +397,7 @@ DWORD JunctionPointCheck(__in LPCWSTR pa // Notes: // Caller needs to destroy the memory of Sid by calling LocalFree() // -DWORD GetSidFromAcctNameW(LPCWSTR acctName, PSID *ppSid) +DWORD GetSidFromAcctNameW(__in PCWSTR acctName, __out PSID *ppSid) { DWORD dwSidSize = 0; DWORD cchDomainName = 0; @@ -545,7 +544,7 @@ static DWORD GetAccess(AUTHZ_CLIENT_CONT { return GetLastError(); } - *pAccessRights = (*(PACCESS_MASK)(AccessReply.GrantedAccessMask)); + *pAccessRights = (*(const ACCESS_MASK *)(AccessReply.GrantedAccessMask)); return ERROR_SUCCESS; } @@ -1088,6 +1087,7 @@ DWORD ChangeFileModeByMask(__in LPCWSTR DWORD revision = 0; PSECURITY_DESCRIPTOR pAbsSD = NULL; + PSECURITY_DESCRIPTOR pNonNullSD = NULL; PACL pAbsDacl = NULL; PACL pAbsSacl = NULL; PSID pAbsOwner = NULL; @@ -1200,7 +1200,8 @@ DWORD ChangeFileModeByMask(__in LPCWSTR // present in the security descriptor, the DACL is replaced. The security // descriptor is then used to set the security of a file or directory. // - if (!SetSecurityDescriptorDacl(pAbsSD, TRUE, pNewDACL, FALSE)) + pNonNullSD = (pAbsSD != NULL) ? pAbsSD : pSD; + if (!SetSecurityDescriptorDacl(pNonNullSD, TRUE, pNewDACL, FALSE)) { ret = GetLastError(); goto ChangeFileModeByMaskEnd; @@ -1220,13 +1221,14 @@ DWORD ChangeFileModeByMask(__in LPCWSTR // its parent, and the child objects will not lose their inherited permissions // from the current object. // - if (!SetFileSecurity(longPathName, DACL_SECURITY_INFORMATION, pAbsSD)) + if (!SetFileSecurity(longPathName, DACL_SECURITY_INFORMATION, pNonNullSD)) { ret = GetLastError(); goto ChangeFileModeByMaskEnd; } ChangeFileModeByMaskEnd: + pNonNullSD = NULL; LocalFree(longPathName); LocalFree(pSD); LocalFree(pNewDACL); @@ -1252,7 +1254,7 @@ ChangeFileModeByMaskEnd: // Notes: // Caller needs to destroy the memory of account name by calling LocalFree() // -DWORD GetAccntNameFromSid(PSID pSid, LPWSTR *ppAcctName) +DWORD GetAccntNameFromSid(__in PSID pSid, __out PWSTR *ppAcctName) { LPWSTR lpName = NULL; DWORD cchName = 0; Modified: hadoop/common/branches/branch-1-win/src/winutils/ls.c URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/ls.c?rev=1436634&r1=1436633&r2=1436634&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/ls.c (original) +++ hadoop/common/branches/branch-1-win/src/winutils/ls.c Mon Jan 21 21:40:36 2013 @@ -32,7 +32,7 @@ // altered. The caller need to initilize the mask string to be all '-' to get // the correct mask string. // -static BOOL GetMaskString(INT accessMask, LPWSTR maskString) +static BOOL GetMaskString(__in INT accessMask, __in_ecount(10) LPWSTR maskString) { if(wcslen(maskString) != 10) return FALSE; @@ -163,7 +163,10 @@ static wchar_t* CurrentDir = L"."; // TRUE on the valid command line, FALSE otherwise // BOOL ParseCommandLine( - int argc, wchar_t *argv[], wchar_t** path, int *optionsMask) + __in int argc, + __in_ecount(argc) wchar_t *argv[], + __deref_out PWSTR *path, + __out int *optionsMask) { int MaxOptions = 2; // Should be equal to the number of elems in CmdLineOption int i = 0; @@ -236,7 +239,7 @@ BOOL ParseCommandLine( // // Notes: // -int Ls(int argc, wchar_t *argv[]) +int Ls(__in int argc, __in_ecount(argc) wchar_t *argv[]) { LPWSTR pathName = NULL; LPWSTR longPathName = NULL; Modified: hadoop/common/branches/branch-1-win/src/winutils/main.c URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/main.c?rev=1436634&r1=1436633&r2=1436634&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/main.c (original) +++ hadoop/common/branches/branch-1-win/src/winutils/main.c Mon Jan 21 21:40:36 2013 @@ -19,7 +19,7 @@ static void Usage(LPCWSTR program); -int wmain(int argc, wchar_t* argv[]) +int wmain(__in int argc, __in_ecount(argc) wchar_t* argv[]) { LPCWSTR cmd = NULL; Modified: hadoop/common/branches/branch-1-win/src/winutils/symlink.c URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/symlink.c?rev=1436634&r1=1436633&r2=1436634&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/symlink.c (original) +++ hadoop/common/branches/branch-1-win/src/winutils/symlink.c Mon Jan 21 21:40:36 2013 @@ -28,7 +28,7 @@ // // Notes: // -int Symlink(int argc, wchar_t *argv[]) +int Symlink(__in int argc, __in_ecount(argc) wchar_t *argv[]) { PWSTR longLinkName = NULL; PWSTR longFileName = NULL; Modified: hadoop/common/branches/branch-1-win/src/winutils/systeminfo.c URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/systeminfo.c?rev=1436634&r1=1436633&r2=1436634&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/systeminfo.c (original) +++ hadoop/common/branches/branch-1-win/src/winutils/systeminfo.c Mon Jan 21 21:40:36 2013 @@ -51,8 +51,8 @@ int SystemInfo() ULONGLONG cpuTimeMs; size_t size; LPBYTE pBuffer; - PPROCESSOR_POWER_INFORMATION ppi; - long cpuFrequencyKhz; + PROCESSOR_POWER_INFORMATION const *ppi; + ULONGLONG cpuFrequencyKhz; NTSTATUS status; ZeroMemory(&memInfo, sizeof(PERFORMANCE_INFORMATION)); @@ -98,11 +98,12 @@ int SystemInfo() LocalFree(pBuffer); return EXIT_FAILURE; } - ppi = (PPROCESSOR_POWER_INFORMATION)pBuffer; + ppi = (PROCESSOR_POWER_INFORMATION const *)pBuffer; cpuFrequencyKhz = ppi->MaxMhz*1000; LocalFree(pBuffer); - fwprintf_s(stdout, L"%Iu,%Iu,%Iu,%Iu,%Iu,%Iu,%Iu\n", vmemSize, memSize, vmemFree, memFree, sysInfo.dwNumberOfProcessors, cpuFrequencyKhz, cpuTimeMs); + fwprintf_s(stdout, L"%Iu,%Iu,%Iu,%Iu,%u,%I64u,%I64u\n", vmemSize, memSize, + vmemFree, memFree, sysInfo.dwNumberOfProcessors, cpuFrequencyKhz, cpuTimeMs); return EXIT_SUCCESS; } Modified: hadoop/common/branches/branch-1-win/src/winutils/task.c URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1-win/src/winutils/task.c?rev=1436634&r1=1436633&r2=1436634&view=diff ============================================================================== --- hadoop/common/branches/branch-1-win/src/winutils/task.c (original) +++ hadoop/common/branches/branch-1-win/src/winutils/task.c Mon Jan 21 21:40:36 2013 @@ -46,7 +46,7 @@ typedef enum TaskCommandOptionType // TRUE: If the command line is valid // FALSE: otherwise static BOOL ParseCommandLine(__in int argc, - __in wchar_t *argv[], + __in_ecount(argc) wchar_t *argv[], __out TaskCommandOption *command) { *command = TaskInvalid; @@ -95,7 +95,7 @@ static BOOL ParseCommandLine(__in int ar // Returns: // ERROR_SUCCESS: On success // GetLastError: otherwise -DWORD createTask(_TCHAR* jobObjName, _TCHAR* cmdLine) +DWORD createTask(__in PCWSTR jobObjName,__in PWSTR cmdLine) { DWORD err = ERROR_SUCCESS; DWORD exitCode = EXIT_FAILURE; @@ -134,7 +134,7 @@ DWORD createTask(_TCHAR* jobObjName, _TC // the child JVM uses this env var to send the task OS process identifier // to the TaskTracker. We pass the job object name. - if(SetEnvironmentVariable(_T("JVM_PID"), jobObjName) == 0) + if(SetEnvironmentVariable(L"JVM_PID", jobObjName) == 0) { err = GetLastError(); CloseHandle(jobObject); @@ -144,12 +144,14 @@ DWORD createTask(_TCHAR* jobObjName, _TC ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); - if(CreateProcess(NULL, cmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi) == 0) + + if (CreateProcess(NULL, cmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi) == 0) { err = GetLastError(); CloseHandle(jobObject); return err; } + CloseHandle(pi.hThread); // Wait until child process exits. @@ -190,7 +192,7 @@ DWORD createTask(_TCHAR* jobObjName, _TC // Returns: // ERROR_SUCCESS: On success // GetLastError: otherwise -DWORD isTaskAlive(const _TCHAR* jobObjName, int* isAlive, int* procsInJob) +DWORD isTaskAlive(const WCHAR* jobObjName, int* isAlive, int* procsInJob) { PJOBOBJECT_BASIC_PROCESS_ID_LIST procList; HANDLE jobObject = NULL; @@ -250,7 +252,7 @@ DWORD isTaskAlive(const _TCHAR* jobObjNa // Returns: // ERROR_SUCCESS: On success // GetLastError: otherwise -DWORD killTask(_TCHAR* jobObjName) +DWORD killTask(PCWSTR jobObjName) { HANDLE jobObject = OpenJobObject(JOB_OBJECT_TERMINATE, FALSE, jobObjName); if(jobObject == NULL) @@ -282,7 +284,7 @@ DWORD killTask(_TCHAR* jobObjName) // Returns: // ERROR_SUCCESS: On success // GetLastError: otherwise -DWORD printTaskProcessList(const _TCHAR* jobObjName) +DWORD printTaskProcessList(const WCHAR* jobObjName) { DWORD i; PJOBOBJECT_BASIC_PROCESS_ID_LIST procList; @@ -313,9 +315,9 @@ DWORD printTaskProcessList(const _TCHAR* numProcs = procList->NumberOfAssignedProcesses; LocalFree(procList); procList = (PJOBOBJECT_BASIC_PROCESS_ID_LIST) LocalAlloc(LPTR, sizeof (JOBOBJECT_BASIC_PROCESS_ID_LIST) + numProcs*32); - if (!procList) + if (procList == NULL) { - DWORD err = GetLastError(); + err = GetLastError(); CloseHandle(jobObject); return err; } @@ -339,7 +341,7 @@ DWORD printTaskProcessList(const _TCHAR* userTime.HighPart = user.dwHighDateTime; userTime.LowPart = user.dwLowDateTime; cpuTimeMs = (kernelTime.QuadPart+userTime.QuadPart)/10000; - _ftprintf_s(stdout, TEXT("%u,%Iu,%Iu,%Iu\n"), procList->ProcessIdList[i], pmc.PrivateUsage, pmc.WorkingSetSize, cpuTimeMs); + fwprintf_s(stdout, L"%Iu,%Iu,%Iu,%I64u\n", procList->ProcessIdList[i], pmc.PrivateUsage, pmc.WorkingSetSize, cpuTimeMs); } } CloseHandle( hProcess ); @@ -362,7 +364,7 @@ DWORD printTaskProcessList(const _TCHAR* // Returns: // ERROR_SUCCESS: On success // Error code otherwise: otherwise -int Task(int argc, wchar_t *argv[]) +int Task(__in int argc, __in_ecount(argc) wchar_t *argv[]) { DWORD dwErrorCode = ERROR_SUCCESS; TaskCommandOption command = TaskInvalid;