Files
GitVer/GitVer/GitVer_common.cpp
2026-04-23 14:57:22 +08:00

95 lines
1.7 KiB
C++

#include "pch.h"
#include "gitver.h"
#include "gitver_common.h"
CString BuildArgsForLog(int argc, TCHAR* argv[])
{
CString strArgs;
for (int i = 0; i < argc; ++i)
{
if (i > 0)
{
strArgs += _T(" ");
}
strArgs += QuoteCmdArg(argv[i]);
}
return strArgs;
}
DWORD LogCommandStart(LPCTSTR lpCommandName)
{
DWORD dwStartTick = GetTickCount();
_tprintf(_T("Command start: %s\n"), lpCommandName);
return dwStartTick;
}
CString QuoteCmdArg(const CString& strArg)
{
if (strArg.Find(_T(' ')) == -1 && strArg.Find(_T('\t')) == -1 && strArg.Find(_T('"')) == -1)
{
return strArg;
}
CString strEscaped = strArg;
strEscaped.Replace(_T("\""), _T("\\\""));
CString strQuoted;
strQuoted.Format(_T("\"%s\""), strEscaped.GetString());
return strQuoted;
}
BOOL TryParseUInt16(const CString& strValue, UINT& nValue)
{
CString strTrimmed = strValue;
strTrimmed.Trim();
if (strTrimmed.IsEmpty())
{
return FALSE;
}
for (int i = 0; i < strTrimmed.GetLength(); ++i)
{
if (!_istdigit(strTrimmed[i]))
{
return FALSE;
}
}
ULONGLONG ullValue = _tcstoui64(strTrimmed, NULL, 10);
if (ullValue > 65535)
{
return FALSE;
}
nValue = (UINT)ullValue;
return TRUE;
}
int ParseUInt16ArgOrError(TCHAR* argv[], int nIndex, LPCTSTR lpArgName, UINT& nValue, int nErrorCode)
{
if (!TryParseUInt16(argv[nIndex], nValue))
{
_tprintf(_T("Error: invalid %s %s\n"), lpArgName, argv[nIndex]);
return nErrorCode;
}
return 0;
}
BOOL IsLikelyPathArg(LPCTSTR lpArg)
{
if (lpArg == NULL)
{
return FALSE;
}
CString strArg = lpArg;
if (strArg.IsEmpty())
{
return FALSE;
}
return strArg.Find(_T('\\')) >= 0
|| strArg.Find(_T('/')) >= 0
|| strArg.Find(_T(':')) >= 0
|| strArg.Left(1) == _T(".");
}