1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2008-2012 - TortoiseGit
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 TGIT_GIT_ERROR_OPEN_PIP
,
27 TGIT_GIT_ERROR_CREATE_PROCESS
,
28 TGIT_GIT_ERROR_GET_EXIT_CODE
31 extern BOOL g_IsWingitDllload
;
33 class CGitByteArray
:public std::vector
<BYTE
>
36 CGitByteArray(){ m_critSec
.Init(); }
37 CComCriticalSection m_critSec
;
39 int find(BYTE data
,int start
=0)
41 for(unsigned int i
=start
;i
<size();i
++)
46 int RevertFind(BYTE data
, int start
=-1)
49 start
= (int)size() - 1;
54 for(int i
=start
; i
>=0;i
--)
59 int findNextString(int start
=0)
70 if (pos
>= (int)size())
77 int findData(const BYTE
* dataToFind
, size_t dataSize
, int start
=0)
84 if(dataSize
>size()-start
)
85 return -1;//Data to find is greater then data to search in. No match
88 const BYTE
* pos
=&*(begin()+start
);
89 const BYTE
* dataEnd
=&*(begin()+(size()-dataSize
) );++dataEnd
;//Set end one step after last place to search
91 return -1;//Started over end. Return not found
93 return start
;//No search data. Return current position
94 BYTE firstByte
=dataToFind
[0];
97 //memchr for first character
98 const BYTE
* found
=(const BYTE
*)memchr(pos
,firstByte
,dataEnd
-pos
);
100 return -1;//Not found
101 //check rest of characters
102 if(memcmp(found
,dataToFind
,dataSize
)==0)
103 return (int)(found
-&*begin());//Match. Return position.
104 //No match. Set position on next byte and continue search
109 int append( std::vector
<BYTE
> &v
,int start
=0,int end
=-1)
113 for(int i
=start
;i
<end
;i
++)
114 this->push_back(v
[i
]);
117 int append(const BYTE
* data
, size_t dataSize
)
119 size_t oldsize
=size();
120 resize(oldsize
+dataSize
);
121 memcpy(&*(begin()+oldsize
),data
,dataSize
);
125 typedef std::vector
<CString
> STRING_VECTOR
;
126 typedef std::map
<CGitHash
, STRING_VECTOR
> MAP_HASH_NAME
;
127 typedef CGitByteArray BYTE_VECTOR
;