OSDN Git Service

Fix crash when click loading item
[tortoisegit/TortoiseGitJp.git] / src / Git / Git.cpp
index 60c81ec..7a4eede 100644 (file)
@@ -14,7 +14,8 @@ CGit::~CGit(void)
 {\r
 }\r
 \r
-char buffer[4096];\r
+static char g_Buffer[4096];\r
+\r
 int CGit::RunAsync(CString cmd,PROCESS_INFORMATION *piOut,HANDLE *hReadOut,CString *StdioFile)\r
 {\r
        SECURITY_ATTRIBUTES sa;\r
@@ -68,6 +69,15 @@ int CGit::RunAsync(CString cmd,PROCESS_INFORMATION *piOut,HANDLE *hReadOut,CStri
        return 0;\r
 \r
 }\r
+//Must use sperate function to convert ANSI str to union code string\r
+//Becuase A2W use stack as internal convert buffer. \r
+void CGit::StringAppend(CString *str,char *p)\r
+{\r
+       USES_CONVERSION;\r
+       str->Append(A2W(p));\r
+\r
+}      \r
+\r
 int CGit::Run(CString cmd, CString* output)\r
 {\r
        PROCESS_INFORMATION pi;\r
@@ -76,11 +86,10 @@ int CGit::Run(CString cmd, CString* output)
                return GIT_ERROR_CREATE_PROCESS;\r
 \r
        DWORD readnumber;\r
-       while(ReadFile(hRead,buffer,4090,&readnumber,NULL))\r
+       while(ReadFile(hRead,g_Buffer,1023,&readnumber,NULL))\r
        {\r
-               buffer[readnumber]=0;\r
-               USES_CONVERSION;\r
-               output->Append(A2W(buffer));\r
+               g_Buffer[readnumber]=0;\r
+               StringAppend(output,g_Buffer);\r
        }\r
 \r
        \r
@@ -182,14 +191,21 @@ int CGit::GetLog(CString& logOut, CString &hash, int count)
 }\r
 \r
 \r
-int CGit::GetShortLog(CString &logOut)\r
+int CGit::GetShortLog(CString &logOut,CTGitPath * path, int count)\r
 {\r
        CString cmd;\r
        CString log;\r
-       cmd=("git.exe log --topo-order -n100 --pretty=format:\"");\r
+       int n;\r
+       if(count<0)\r
+               n=100;\r
+       else\r
+               n=count;\r
+       cmd.Format(_T("git.exe log --topo-order -n%d --pretty=format:\""),n);\r
        BuildOutputFormat(log,false);\r
-       cmd += log;\r
-       cmd += CString(_T("\" HEAD~40..HEAD"));\r
+       cmd += log+_T("\"");\r
+       if (path)\r
+               cmd+= _T("  -- \"")+path->GetGitPathString()+_T("\"");\r
+       //cmd += CString(_T("\" HEAD~40..HEAD"));\r
        return Run(cmd,&logOut);\r
 }\r
 \r