Fix memory leaks/wrong heap usage by replacing calls to _tcsdup with cmd_dup

svn path=/trunk/; revision=29909
This commit is contained in:
Thomas Bluemel
2007-10-27 03:13:37 +00:00
parent 93fe183181
commit 283b505889
4 changed files with 26 additions and 4 deletions
+17
View File
@@ -146,6 +146,23 @@ cmd_free_dbg(void *ptr, const char *file, int line)
free(ptr);
}
TCHAR *
cmd_dup_dbg(const TCHAR *str, const char *file, int line)
{
TCHAR *ptr = NULL;
if (str != NULL)
{
ptr = (TCHAR *)cmd_alloc_dbg((_tcslen(str) + 1) * sizeof(TCHAR), file, line);
if (ptr != NULL)
{
_tcscpy(ptr, str);
}
}
return ptr;
}
void
cmd_checkbuffer_dbg(void *ptr, const char *file, int line)
{
+5
View File
@@ -4,6 +4,7 @@
#define cmd_realloc(ptr,size) cmd_realloc_dbg(ptr, size, __FILE__, __LINE__)
#define cmd_free(ptr) cmd_free_dbg(ptr, __FILE__, __LINE__)
#define cmd_checkbuffer(ptr) cmd_checkbuffer_dbg(ptr, __FILE__, __LINE__)
#define cmd_dup(str) cmd_dup_dbg(str, __FILE__, __LINE__)
void *
cmd_alloc_dbg(size_t size, const char *file, int line);
@@ -14,6 +15,9 @@ cmd_realloc_dbg(void *ptr, size_t size, const char *file, int line);
void
cmd_free_dbg(void *ptr, const char *file, int line);
TCHAR *
cmd_dup_dbg(const TCHAR *str, const char *file, int line);
void
cmd_checkbuffer_dbg(void *ptr, const char *file, int line);
@@ -25,6 +29,7 @@ cmd_exit(int code);
#define cmd_alloc(size) malloc(size)
#define cmd_realloc(ptr,size) realloc(ptr, size)
#define cmd_free(ptr) free(ptr)
#define cmd_dup(str) _tcsdup(str)
#define cmd_checkbuffer(ptr)
#endif
+1 -1
View File
@@ -135,7 +135,7 @@ INT cmd_for (LPTSTR cmd, LPTSTR param)
bc->params = BatchParams (_T(""), param); /* Split out list */
bc->shiftlevel = 0;
bc->forvar = var;
bc->forproto = _tcsdup (pp);
bc->forproto = cmd_dup (pp);
if (bc->prev)
bc->bEcho = bc->prev->bEcho;
else
+3 -3
View File
@@ -236,7 +236,7 @@ SearchForExecutable (LPCTSTR pFileName, LPTSTR pFullName)
if (pExt != NULL)
{
LPTSTR pszBuffer2;
pszBuffer2 = _tcsdup(pszBuffer);
pszBuffer2 = cmd_dup(pszBuffer);
if (pszBuffer2)
{
pCh = _tcstok(pszBuffer2, _T(";"));
@@ -245,12 +245,12 @@ SearchForExecutable (LPCTSTR pFileName, LPTSTR pFullName)
if (0 == _tcsicmp(pCh, pExt))
{
cmd_free(pszBuffer);
LocalFree(pszBuffer2);
cmd_free(pszBuffer2);
return SearchForExecutableSingle(pFileName, pFullName, NULL);
}
pCh = _tcstok(NULL, _T(";"));
}
LocalFree(pszBuffer2);
cmd_free(pszBuffer2);
}
}