{"action":"created","comment":{"url":"https://api.github.com/repos/dotnet/coreclr/pulls/comments/51759944","id":51759944,"diff_hunk":"@@ -0,0 +1,996 @@\n+// Licensed to the .NET Foundation under one or more agreements. \n+// The .NET Foundation licenses this file to you under the MIT license. \n+// See the LICENSE file in the project root for more information. \n+\n+#include \"stdafx.h\"\n+#include \"windows.h\"\n+#include \"winwrappers.h\"\n+#include \"sstring.h\"\n+#include \"ex.h\"\n+\n+typedef InlineSString<2*MAX_PATH> Win32StackSString;  //2*MAX_PATH - is tunable stack allocated buffer size\n+\n+class LongFile\n+{\n+    public:\n+#ifndef FEATURE_PAL\n+        static SString ExtendedPrefix;\n+        static SString DevicePathPrefix;\n+        static SString UNCPathPrefix;\n+        static SString UNCExtendedPathPrefix;\n+        static const WCHAR VolumeSeparatorChar;\n+        static const WCHAR LongFile::DirectorySeparatorChar;\n+        static const WCHAR LongFile::AltDirectorySeparatorChar;\n+#endif //FEATURE_PAL\n+        static BOOL IsExtended(SString & path);\n+        static BOOL IsUNCExtended(SString & path);\n+        static BOOL IsDirectorySeparator(WCHAR c);\n+        static BOOL IsRelative(SString & path);\n+        static BOOL IsDevice(SString & path);\n+\n+        static HRESULT NormalizePath(SString& path);\n+};\n+\n+HMODULE\n+LoadLibraryExWrapper(\n+        LPCWSTR lpLibFileName,\n+        HANDLE hFile,\n+        DWORD dwFlags\n+        )\n+{\n+    HRESULT hr   = S_OK;\n+    HMODULE ret = NULL;\n+    DWORD lastError;\n+\n+    EX_TRY\n+    {\n+\n+        Win32StackSString path(Win32StackSString::Literal, lpLibFileName);\n+\n+        if (LongFile::IsRelative(path) || SUCCEEDED(LongFile::NormalizePath(path)))\n+        {\n+            ret = LoadLibraryExW(path.GetUnicode(), hFile, dwFlags);\n+            lastError = GetLastError();\n+        }\n+    }\n+    EX_CATCH_HRESULT(hr);\n+\n+    if (hr != S_OK)\n+    {\n+        SetLastError(hr);\n+    }\n+    else if(ret == NULL)\n+    {\n+        SetLastError(lastError);\n+    }\n+\n+    return ret;\n+}\n+\n+HANDLE\n+CreateFileWrapper(\n+        _In_ LPCWSTR lpFileName,\n+        _In_ DWORD dwDesiredAccess,\n+        _In_ DWORD dwShareMode,\n+        _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,\n+        _In_ DWORD dwCreationDisposition,\n+        _In_ DWORD dwFlagsAndAttributes,\n+        _In_opt_ HANDLE hTemplateFile\n+        )\n+{\n+    HRESULT hr = S_OK;\n+    DWORD lastError;\n+    HANDLE ret = INVALID_HANDLE_VALUE;\n+    EX_TRY\n+    {\n+        Win32StackSString path(Win32StackSString::Literal, lpFileName);\n+\n+        if (SUCCEEDED(LongFile::NormalizePath(path)))\n+        {\n+            ret = CreateFileW(path.GetUnicode(),\n+                    dwDesiredAccess,\n+                    dwShareMode,\n+                    lpSecurityAttributes,\n+                    dwCreationDisposition,\n+                    dwFlagsAndAttributes,\n+                    hTemplateFile);\n+\n+            lastError = GetLastError();\n+        }\n+    }\n+    EX_CATCH_HRESULT(hr);\n+\n+    if (hr != S_OK )\n+    {\n+        SetLastError(hr);\n+    }\n+    else if(ret == INVALID_HANDLE_VALUE)\n+    {\n+        SetLastError(lastError);\n+    }\n+\n+    return ret;\n+}\n+\n+BOOL\n+SetFileAttributesWrapper(\n+        _In_ LPCWSTR lpFileName,\n+        _In_ DWORD dwFileAttributes\n+        )\n+{\n+    HRESULT hr = S_OK;\n+    BOOL   ret = FALSE;\n+    DWORD lastError;\n+    EX_TRY\n+    {\n+        Win32StackSString path(Win32StackSString::Literal, lpFileName);\n+\n+        if (SUCCEEDED(LongFile::NormalizePath(path)))\n+        {\n+            ret = SetFileAttributesW(\n+                    path.GetUnicode(),\n+                    dwFileAttributes\n+                    );\n+\n+            lastError = GetLastError();\n+        }\n+    }\n+    EX_CATCH_HRESULT(hr);\n+\n+    if (hr != S_OK )\n+    {\n+        SetLastError(hr);\n+    }\n+    else if(ret == FALSE)\n+    {\n+        SetLastError(lastError);\n+    }\n+\n+    return ret;\n+}\n+\n+DWORD\n+GetFileAttributesWrapper(\n+        _In_ LPCWSTR lpFileName\n+        )\n+{\n+    HRESULT hr = S_OK;\n+    DWORD  ret = INVALID_FILE_ATTRIBUTES;\n+    DWORD lastError;\n+    EX_TRY\n+    {\n+        Win32StackSString path(Win32StackSString::Literal, lpFileName);\n+\n+        if (SUCCEEDED(LongFile::NormalizePath(path)))\n+        {\n+            ret = GetFileAttributesW(\n+                    path.GetUnicode()\n+                );\n+\n+            lastError = GetLastError();                    \n+        }\n+    }\n+    EX_CATCH_HRESULT(hr);\n+\n+    if (hr != S_OK )\n+    {\n+        SetLastError(hr);\n+    }\n+    else if(ret == INVALID_FILE_ATTRIBUTES)\n+    {\n+        SetLastError(lastError);\n+    }\n+\n+    return ret;\n+\n+}\n+\n+BOOL\n+GetFileAttributesExWrapper(\n+        _In_ LPCWSTR lpFileName,\n+        _In_ GET_FILEEX_INFO_LEVELS fInfoLevelId,\n+        _Out_writes_bytes_(sizeof(WIN32_FILE_ATTRIBUTE_DATA)) LPVOID lpFileInformation\n+        )\n+{\n+    HRESULT hr = S_OK;\n+    BOOL   ret = FALSE;\n+    DWORD lastError;\n+    EX_TRY\n+    {\n+        Win32StackSString path(Win32StackSString::Literal, lpFileName);\n+\n+        if (SUCCEEDED(LongFile::NormalizePath(path)))\n+        {\n+            ret = GetFileAttributesExW(\n+                    path.GetUnicode(),\n+                    fInfoLevelId,\n+                    lpFileInformation\n+                    );\n+            \n+            lastError = GetLastError();\n+        }\n+    }\n+    EX_CATCH_HRESULT(hr);\n+\n+    if (hr != S_OK )\n+    {\n+        SetLastError(hr);\n+    }\n+    else if(ret == FALSE)\n+    {\n+        SetLastError(lastError);\n+    }\n+\n+    return ret;\n+}\n+\n+BOOL\n+DeleteFileWrapper(\n+        _In_ LPCWSTR lpFileName\n+        )\n+{\n+    HRESULT hr = S_OK;\n+    BOOL   ret = FALSE;\n+    DWORD lastError;\n+    EX_TRY\n+    {\n+        Win32StackSString path(Win32StackSString::Literal, lpFileName);\n+\n+        if (SUCCEEDED(LongFile::NormalizePath(path)))\n+        {\n+            ret = DeleteFileW(\n+                    path.GetUnicode()\n+                    );\n+            \n+            lastError = GetLastError();\n+        }\n+    }\n+    EX_CATCH_HRESULT(hr);\n+\n+    if (hr != S_OK )\n+    {\n+        SetLastError(hr);\n+    }\n+    else if(ret == FALSE)\n+    {\n+        SetLastError(lastError);\n+    }\n+\n+    return ret;\n+}\n+\n+\n+BOOL\n+CopyFileWrapper(\n+        _In_ LPCWSTR lpExistingFileName,\n+        _In_ LPCWSTR lpNewFileName,\n+        _In_ BOOL bFailIfExists\n+        )\n+{\n+    HRESULT hr  = S_OK;\n+    BOOL    ret = FALSE;\n+    DWORD lastError;\n+    EX_TRY\n+    {\n+        Win32StackSString Existingpath(Win32StackSString::Literal, lpExistingFileName);\n+        Win32StackSString Newpath(Win32StackSString::Literal, lpNewFileName);\n+\n+        if (SUCCEEDED(LongFile::NormalizePath(Existingpath)) && SUCCEEDED(LongFile::NormalizePath(Newpath)))\n+        {\n+            ret = CopyFileW(\n+                    Existingpath.GetUnicode(),\n+                    Newpath.GetUnicode(),\n+                    bFailIfExists\n+                    );\n+ \n+            lastError = GetLastError();\n+        }\n+    }\n+    EX_CATCH_HRESULT(hr);\n+\n+    if (hr != S_OK )\n+    {\n+        SetLastError(hr);\n+    }\n+    else if(ret == FALSE)\n+    {\n+        SetLastError(lastError);\n+    }\n+\n+    return ret;\n+}\n+\n+\n+BOOL\n+MoveFileWrapper(\n+        _In_ LPCWSTR lpExistingFileName,\n+        _In_ LPCWSTR lpNewFileName\n+        )\n+{\n+    HRESULT hr  = S_OK;\n+    BOOL    ret = FALSE;\n+    DWORD lastError;\n+    EX_TRY\n+    {\n+        Win32StackSString Existingpath(Win32StackSString::Literal, lpExistingFileName);\n+        Win32StackSString Newpath(Win32StackSString::Literal, lpNewFileName);\n+\n+        if (SUCCEEDED(LongFile::NormalizePath(Existingpath)) && SUCCEEDED(LongFile::NormalizePath(Newpath)))\n+        {\n+            ret = MoveFileW(\n+                    Existingpath.GetUnicode(),\n+                    Newpath.GetUnicode()\n+                    );\n+            \n+            lastError = GetLastError();\n+        }\n+    }\n+    EX_CATCH_HRESULT(hr);\n+\n+    if (hr != S_OK )\n+    {\n+        SetLastError(hr);\n+    }\n+    else if(ret == FALSE)\n+    {\n+        SetLastError(lastError);\n+    }\n+\n+    return ret;\n+}\n+\n+BOOL\n+MoveFileExWrapper(\n+        _In_     LPCWSTR lpExistingFileName,\n+        _In_opt_ LPCWSTR lpNewFileName,\n+        _In_     DWORD    dwFlags\n+        )\n+{\n+    HRESULT hr  = S_OK;\n+    BOOL    ret = FALSE;\n+    DWORD lastError;\n+    EX_TRY\n+    {\n+        Win32StackSString Existingpath(Win32StackSString::Literal, lpExistingFileName);\n+        Win32StackSString Newpath(Win32StackSString::Literal, lpNewFileName);\n+\n+        if (SUCCEEDED(LongFile::NormalizePath(Existingpath)) && SUCCEEDED(LongFile::NormalizePath(Newpath)))\n+        {\n+            ret = MoveFileExW(\n+                    Existingpath.GetUnicode(),\n+                    Newpath.GetUnicode(),\n+                    dwFlags\n+                    );\n+\n+            lastError = GetLastError();\n+        }\n+    }\n+    EX_CATCH_HRESULT(hr);\n+\n+    if (hr != S_OK )\n+    {\n+        SetLastError(hr);\n+    }\n+    else if(ret == FALSE)\n+    {\n+        SetLastError(lastError);\n+    }\n+\n+    return ret;\n+\n+}\n+\n+DWORD\n+SearchPathWrapper(\n+        _In_opt_ LPCWSTR lpPath,\n+        _In_ LPCWSTR lpFileName,\n+        _In_opt_ LPCWSTR lpExtension,\n+        _In_ BOOL getPath,\n+        PathWCharString& lpBuffer,\n+        _Out_opt_ LPWSTR * lpFilePart\n+        )\n+{\n+    DWORD size;\n+    HRESULT hr  = S_OK;\n+    BOOL    ret = FALSE;\n+    EX_TRY\n+    {\n+        Win32StackSString Existingpath(Win32StackSString::Literal, lpPath);\n+        if (lpPath != NULL)\n+        {\n+            if (FAILED(LongFile::NormalizePath(Existingpath)))","path":"src/utilcode/winwrappers.cpp","position":401,"original_position":401,"commit_id":"5d125dab0f9d298220817d0fd83e3fa5ba1aaf0c","original_commit_id":"5d125dab0f9d298220817d0fd83e3fa5ba1aaf0c","user":{"login":"gkhanna79","id":9451457,"avatar_url":"https://avatars.githubusercontent.com/u/9451457?v=3","gravatar_id":"","url":"https://api.github.com/users/gkhanna79","html_url":"https://github.com/gkhanna79","followers_url":"https://api.github.com/users/gkhanna79/followers","following_url":"https://api.github.com/users/gkhanna79/following{/other_user}","gists_url":"https://api.github.com/users/gkhanna79/gists{/gist_id}","starred_url":"https://api.github.com/users/gkhanna79/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gkhanna79/subscriptions","organizations_url":"https://api.github.com/users/gkhanna79/orgs","repos_url":"https://api.github.com/users/gkhanna79/repos","events_url":"https://api.github.com/users/gkhanna79/events{/privacy}","received_events_url":"https://api.github.com/users/gkhanna79/received_events","type":"User","site_admin":false},"body":"The API does not return E_*, so FAILED condition will always be false.","created_at":"2016-02-03T17:57:03Z","updated_at":"2016-02-03T17:57:03Z","html_url":"https://github.com/dotnet/coreclr/pull/2998#discussion_r51759944","pull_request_url":"https://api.github.com/repos/dotnet/coreclr/pulls/2998","_links":{"self":{"href":"https://api.github.com/repos/dotnet/coreclr/pulls/comments/51759944"},"html":{"href":"https://github.com/dotnet/coreclr/pull/2998#discussion_r51759944"},"pull_request":{"href":"https://api.github.com/repos/dotnet/coreclr/pulls/2998"}}},"pull_request":{"url":"https://api.github.com/repos/dotnet/coreclr/pulls/2998","id":58088788,"html_url":"https://github.com/dotnet/coreclr/pull/2998","diff_url":"https://github.com/dotnet/coreclr/pull/2998.diff","patch_url":"https://github.com/dotnet/coreclr/pull/2998.patch","issue_url":"https://api.github.com/repos/dotnet/coreclr/issues/2998","number":2998,"state":"open","locked":false,"title":"[WIP]Support LongFile in the VM","user":{"login":"ramarag","id":10203266,"avatar_url":"https://avatars.githubusercontent.com/u/10203266?v=3","gravatar_id":"","url":"https://api.github.com/users/ramarag","html_url":"https://github.com/ramarag","followers_url":"https://api.github.com/users/ramarag/followers","following_url":"https://api.github.com/users/ramarag/following{/other_user}","gists_url":"https://api.github.com/users/ramarag/gists{/gist_id}","starred_url":"https://api.github.com/users/ramarag/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ramarag/subscriptions","organizations_url":"https://api.github.com/users/ramarag/orgs","repos_url":"https://api.github.com/users/ramarag/repos","events_url":"https://api.github.com/users/ramarag/events{/privacy}","received_events_url":"https://api.github.com/users/ramarag/received_events","type":"User","site_admin":false},"body":"I will have a series of commits in this PR (which I don't plan to merge until they are complete)\r\n\r\nThis First commit is to create Wrappers for the WIn32 APIs that take in a path.\r\nThe LongFile class provides various functionalities like path normalizations, tell if a path is relative etc.\r\nThe APIs which return a path are wrapped is such a way that they take an out parameter of type PathWCharString, this type is very similar to one found within pal.\r\n\r\n@JeremyKuhne  @JohnChen0  @gkhanna79  PTAL","created_at":"2016-02-03T04:04:14Z","updated_at":"2016-02-03T17:57:03Z","closed_at":null,"merged_at":null,"merge_commit_sha":"012860cb255b5daf664f07c8e18e5d41ceda2174","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/dotnet/coreclr/pulls/2998/commits","review_comments_url":"https://api.github.com/repos/dotnet/coreclr/pulls/2998/comments","review_comment_url":"https://api.github.com/repos/dotnet/coreclr/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dotnet/coreclr/issues/2998/comments","statuses_url":"https://api.github.com/repos/dotnet/coreclr/statuses/5d125dab0f9d298220817d0fd83e3fa5ba1aaf0c","head":{"label":"ramarag:LongFileSupport","ref":"LongFileSupport","sha":"5d125dab0f9d298220817d0fd83e3fa5ba1aaf0c","user":{"login":"ramarag","id":10203266,"avatar_url":"https://avatars.githubusercontent.com/u/10203266?v=3","gravatar_id":"","url":"https://api.github.com/users/ramarag","html_url":"https://github.com/ramarag","followers_url":"https://api.github.com/users/ramarag/followers","following_url":"https://api.github.com/users/ramarag/following{/other_user}","gists_url":"https://api.github.com/users/ramarag/gists{/gist_id}","starred_url":"https://api.github.com/users/ramarag/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ramarag/subscriptions","organizations_url":"https://api.github.com/users/ramarag/orgs","repos_url":"https://api.github.com/users/ramarag/repos","events_url":"https://api.github.com/users/ramarag/events{/privacy}","received_events_url":"https://api.github.com/users/ramarag/received_events","type":"User","site_admin":false},"repo":{"id":30266414,"name":"coreclr","full_name":"ramarag/coreclr","owner":{"login":"ramarag","id":10203266,"avatar_url":"https://avatars.githubusercontent.com/u/10203266?v=3","gravatar_id":"","url":"https://api.github.com/users/ramarag","html_url":"https://github.com/ramarag","followers_url":"https://api.github.com/users/ramarag/followers","following_url":"https://api.github.com/users/ramarag/following{/other_user}","gists_url":"https://api.github.com/users/ramarag/gists{/gist_id}","starred_url":"https://api.github.com/users/ramarag/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ramarag/subscriptions","organizations_url":"https://api.github.com/users/ramarag/orgs","repos_url":"https://api.github.com/users/ramarag/repos","events_url":"https://api.github.com/users/ramarag/events{/privacy}","received_events_url":"https://api.github.com/users/ramarag/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ramarag/coreclr","description":"This repo contains the .NET Core runtime, called CoreCLR. It is an execution engine for .NET apps, performing functions such as IL byte code loading, compilation to machine code and garbage collection. The repo contains the complete up-to-date CoreCLR codebase.","fork":true,"url":"https://api.github.com/repos/ramarag/coreclr","forks_url":"https://api.github.com/repos/ramarag/coreclr/forks","keys_url":"https://api.github.com/repos/ramarag/coreclr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ramarag/coreclr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ramarag/coreclr/teams","hooks_url":"https://api.github.com/repos/ramarag/coreclr/hooks","issue_events_url":"https://api.github.com/repos/ramarag/coreclr/issues/events{/number}","events_url":"https://api.github.com/repos/ramarag/coreclr/events","assignees_url":"https://api.github.com/repos/ramarag/coreclr/assignees{/user}","branches_url":"https://api.github.com/repos/ramarag/coreclr/branches{/branch}","tags_url":"https://api.github.com/repos/ramarag/coreclr/tags","blobs_url":"https://api.github.com/repos/ramarag/coreclr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ramarag/coreclr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ramarag/coreclr/git/refs{/sha}","trees_url":"https://api.github.com/repos/ramarag/coreclr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ramarag/coreclr/statuses/{sha}","languages_url":"https://api.github.com/repos/ramarag/coreclr/languages","stargazers_url":"https://api.github.com/repos/ramarag/coreclr/stargazers","contributors_url":"https://api.github.com/repos/ramarag/coreclr/contributors","subscribers_url":"https://api.github.com/repos/ramarag/coreclr/subscribers","subscription_url":"https://api.github.com/repos/ramarag/coreclr/subscription","commits_url":"https://api.github.com/repos/ramarag/coreclr/commits{/sha}","git_commits_url":"https://api.github.com/repos/ramarag/coreclr/git/commits{/sha}","comments_url":"https://api.github.com/repos/ramarag/coreclr/comments{/number}","issue_comment_url":"https://api.github.com/repos/ramarag/coreclr/issues/comments{/number}","contents_url":"https://api.github.com/repos/ramarag/coreclr/contents/{+path}","compare_url":"https://api.github.com/repos/ramarag/coreclr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ramarag/coreclr/merges","archive_url":"https://api.github.com/repos/ramarag/coreclr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ramarag/coreclr/downloads","issues_url":"https://api.github.com/repos/ramarag/coreclr/issues{/number}","pulls_url":"https://api.github.com/repos/ramarag/coreclr/pulls{/number}","milestones_url":"https://api.github.com/repos/ramarag/coreclr/milestones{/number}","notifications_url":"https://api.github.com/repos/ramarag/coreclr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ramarag/coreclr/labels{/name}","releases_url":"https://api.github.com/repos/ramarag/coreclr/releases{/id}","deployments_url":"https://api.github.com/repos/ramarag/coreclr/deployments","created_at":"2015-02-03T21:50:27Z","updated_at":"2016-01-20T22:31:20Z","pushed_at":"2016-02-03T08:58:41Z","git_url":"git://github.com/ramarag/coreclr.git","ssh_url":"git@github.com:ramarag/coreclr.git","clone_url":"https://github.com/ramarag/coreclr.git","svn_url":"https://github.com/ramarag/coreclr","homepage":"","size":55994,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dotnet:master","ref":"master","sha":"c92c399cee4c2c772093b67cb6f6cac3d705adc8","user":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars.githubusercontent.com/u/9141961?v=3","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"repo":{"id":30092893,"name":"coreclr","full_name":"dotnet/coreclr","owner":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars.githubusercontent.com/u/9141961?v=3","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dotnet/coreclr","description":"This repo contains the .NET Core runtime, called CoreCLR, and the base library, called mscorlib. It includes the garbage collector, JIT compiler, base .NET data types and many low-level classes.","fork":false,"url":"https://api.github.com/repos/dotnet/coreclr","forks_url":"https://api.github.com/repos/dotnet/coreclr/forks","keys_url":"https://api.github.com/repos/dotnet/coreclr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dotnet/coreclr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dotnet/coreclr/teams","hooks_url":"https://api.github.com/repos/dotnet/coreclr/hooks","issue_events_url":"https://api.github.com/repos/dotnet/coreclr/issues/events{/number}","events_url":"https://api.github.com/repos/dotnet/coreclr/events","assignees_url":"https://api.github.com/repos/dotnet/coreclr/assignees{/user}","branches_url":"https://api.github.com/repos/dotnet/coreclr/branches{/branch}","tags_url":"https://api.github.com/repos/dotnet/coreclr/tags","blobs_url":"https://api.github.com/repos/dotnet/coreclr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dotnet/coreclr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dotnet/coreclr/git/refs{/sha}","trees_url":"https://api.github.com/repos/dotnet/coreclr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dotnet/coreclr/statuses/{sha}","languages_url":"https://api.github.com/repos/dotnet/coreclr/languages","stargazers_url":"https://api.github.com/repos/dotnet/coreclr/stargazers","contributors_url":"https://api.github.com/repos/dotnet/coreclr/contributors","subscribers_url":"https://api.github.com/repos/dotnet/coreclr/subscribers","subscription_url":"https://api.github.com/repos/dotnet/coreclr/subscription","commits_url":"https://api.github.com/repos/dotnet/coreclr/commits{/sha}","git_commits_url":"https://api.github.com/repos/dotnet/coreclr/git/commits{/sha}","comments_url":"https://api.github.com/repos/dotnet/coreclr/comments{/number}","issue_comment_url":"https://api.github.com/repos/dotnet/coreclr/issues/comments{/number}","contents_url":"https://api.github.com/repos/dotnet/coreclr/contents/{+path}","compare_url":"https://api.github.com/repos/dotnet/coreclr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dotnet/coreclr/merges","archive_url":"https://api.github.com/repos/dotnet/coreclr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dotnet/coreclr/downloads","issues_url":"https://api.github.com/repos/dotnet/coreclr/issues{/number}","pulls_url":"https://api.github.com/repos/dotnet/coreclr/pulls{/number}","milestones_url":"https://api.github.com/repos/dotnet/coreclr/milestones{/number}","notifications_url":"https://api.github.com/repos/dotnet/coreclr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dotnet/coreclr/labels{/name}","releases_url":"https://api.github.com/repos/dotnet/coreclr/releases{/id}","deployments_url":"https://api.github.com/repos/dotnet/coreclr/deployments","created_at":"2015-01-30T22:10:02Z","updated_at":"2016-02-03T09:33:06Z","pushed_at":"2016-02-03T17:10:09Z","git_url":"git://github.com/dotnet/coreclr.git","ssh_url":"git@github.com:dotnet/coreclr.git","clone_url":"https://github.com/dotnet/coreclr.git","svn_url":"https://github.com/dotnet/coreclr","homepage":"http://dotnet.github.io/","size":61621,"stargazers_count":5814,"watchers_count":5814,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1279,"mirror_url":null,"open_issues_count":502,"forks":1279,"open_issues":502,"watchers":5814,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dotnet/coreclr/pulls/2998"},"html":{"href":"https://github.com/dotnet/coreclr/pull/2998"},"issue":{"href":"https://api.github.com/repos/dotnet/coreclr/issues/2998"},"comments":{"href":"https://api.github.com/repos/dotnet/coreclr/issues/2998/comments"},"review_comments":{"href":"https://api.github.com/repos/dotnet/coreclr/pulls/2998/comments"},"review_comment":{"href":"https://api.github.com/repos/dotnet/coreclr/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dotnet/coreclr/pulls/2998/commits"},"statuses":{"href":"https://api.github.com/repos/dotnet/coreclr/statuses/5d125dab0f9d298220817d0fd83e3fa5ba1aaf0c"}}}}