Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

221 lines
5.6 KiB

  1. /*++
  2. Copyright (c) 1997 Microsoft Corporation
  3. Module Name:
  4. utils.c
  5. Abstract:
  6. Cross Language Migration Tools String-Search/Replacemet Util
  7. Author:
  8. Xiaofeng Zang (xiaoz) 17-Sep-2001 Created
  9. Revision History:
  10. --*/
  11. #include "StdAfx.h"
  12. #include "clmt.h"
  13. #ifdef NEVER
  14. LONG UpdateMszTableInReg(HKEY,LPTSTR,LPTSTR*,LPTSTR);
  15. LONG UpdateDWORDArrayInReg(HKEY,LPTSTR,PDWORD*,DWORD);
  16. #endif
  17. BOOL AddItemToStrRepaceTable(
  18. LPTSTR szUserName,
  19. LPTSTR szOriginalStr,
  20. LPTSTR szReplacingStr,
  21. LPTSTR szFullPathStr,
  22. DWORD nId,
  23. PREG_STRING_REPLACE pTable)
  24. {
  25. if (!szUserName || !szOriginalStr || !szReplacingStr || !szFullPathStr)
  26. {
  27. return FALSE;
  28. }
  29. if (!szUserName[0] || !szOriginalStr[0] || !szReplacingStr[0] || !szFullPathStr[0])
  30. {
  31. return FALSE;
  32. }
  33. if (!MyStrCmpI(szOriginalStr,szReplacingStr))
  34. {
  35. return TRUE;
  36. }
  37. if (!AppendSzToMultiSz(szUserName,
  38. &(pTable->szUserNameLst),
  39. &(pTable->cchUserName)))
  40. {
  41. return FALSE;
  42. }
  43. if (!AppendSzToMultiSz(szOriginalStr,
  44. &(pTable->lpSearchString),
  45. &(pTable->cchSearchString)))
  46. {
  47. return FALSE;
  48. }
  49. if (!AppendSzToMultiSz(szReplacingStr,
  50. &(pTable->lpReplaceString),
  51. &(pTable->cchReplaceString)))
  52. {
  53. return FALSE;
  54. }
  55. if (!AppendSzToMultiSz(szFullPathStr,
  56. &(pTable->lpFullStringList),
  57. &(pTable->cchFullStringList)))
  58. {
  59. }
  60. if ((pTable->nNumOfElem+1) > pTable->cchAttribList)
  61. {
  62. LPDWORD lpTmp = malloc( (pTable->cchAttribList + DWORD_BUF_DELTA) * sizeof(DWORD) );
  63. if (!lpTmp)
  64. {
  65. return FALSE;
  66. }
  67. memcpy((PBYTE)lpTmp,(PBYTE)pTable->lpAttrib,pTable->cchAttribList * sizeof(DWORD));
  68. free(pTable->lpAttrib);
  69. pTable->lpAttrib = lpTmp;
  70. pTable->cchAttribList += DWORD_BUF_DELTA;
  71. }
  72. pTable->lpAttrib[pTable->nNumOfElem] = nId;
  73. pTable->nNumOfElem++;
  74. return TRUE;
  75. }
  76. BOOL InitStrRepaceTable()
  77. {
  78. BOOL bRet = TRUE;
  79. int i, n;
  80. //Initialize the global table used to do string replacement
  81. g_StrReplaceTable.nNumOfElem = 0;
  82. g_StrReplaceTable.szUserNameLst = malloc(MULTI_SZ_BUF_DELTA * sizeof(TCHAR));
  83. if (!g_StrReplaceTable.szUserNameLst )
  84. {
  85. bRet = FALSE;
  86. goto Cleanup;
  87. }
  88. memset(g_StrReplaceTable.szUserNameLst,0,MULTI_SZ_BUF_DELTA * sizeof(TCHAR));
  89. g_StrReplaceTable.cchUserName = MULTI_SZ_BUF_DELTA;
  90. g_StrReplaceTable.lpSearchString = malloc(MULTI_SZ_BUF_DELTA * sizeof(TCHAR));
  91. if (!g_StrReplaceTable.lpSearchString )
  92. {
  93. bRet = FALSE;
  94. goto Cleanup;
  95. }
  96. memset(g_StrReplaceTable.lpSearchString,0,MULTI_SZ_BUF_DELTA * sizeof(TCHAR));
  97. g_StrReplaceTable.cchSearchString = MULTI_SZ_BUF_DELTA;
  98. g_StrReplaceTable.lpReplaceString = malloc(MULTI_SZ_BUF_DELTA * sizeof(TCHAR));
  99. if (!g_StrReplaceTable.lpReplaceString )
  100. {
  101. bRet = FALSE;
  102. goto Cleanup;
  103. }
  104. memset(g_StrReplaceTable.lpReplaceString,0,MULTI_SZ_BUF_DELTA * sizeof(TCHAR));
  105. g_StrReplaceTable.cchReplaceString = MULTI_SZ_BUF_DELTA;
  106. g_StrReplaceTable.lpFullStringList = malloc(MULTI_SZ_BUF_DELTA * sizeof(TCHAR));
  107. if (!g_StrReplaceTable.lpFullStringList )
  108. {
  109. bRet = FALSE;
  110. goto Cleanup;
  111. }
  112. g_StrReplaceTable.cchFullStringList = MULTI_SZ_BUF_DELTA;
  113. memset(g_StrReplaceTable.lpFullStringList,0,MULTI_SZ_BUF_DELTA * sizeof(TCHAR));
  114. g_StrReplaceTable.lpAttrib = malloc(DWORD_BUF_DELTA * sizeof(DWORD)) ;
  115. if (!g_StrReplaceTable.lpAttrib)
  116. {
  117. bRet = FALSE;
  118. goto Cleanup;
  119. }
  120. memset(g_StrReplaceTable.lpAttrib,0,DWORD_BUF_DELTA * sizeof(DWORD));
  121. g_StrReplaceTable.cchAttribList = DWORD_BUF_DELTA;
  122. Cleanup:
  123. if (!bRet)
  124. {
  125. if (g_StrReplaceTable.lpSearchString)
  126. {
  127. free(g_StrReplaceTable.lpSearchString);
  128. g_StrReplaceTable.lpSearchString = NULL;
  129. }
  130. if (g_StrReplaceTable.lpReplaceString)
  131. {
  132. free(g_StrReplaceTable.lpReplaceString);
  133. g_StrReplaceTable.lpReplaceString = NULL;
  134. }
  135. if (g_StrReplaceTable.lpAttrib)
  136. {
  137. free(g_StrReplaceTable.lpAttrib);
  138. g_StrReplaceTable.lpAttrib = NULL;
  139. }
  140. if (g_StrReplaceTable.lpFullStringList)
  141. {
  142. free(g_StrReplaceTable.lpFullStringList);
  143. g_StrReplaceTable.lpFullStringList = NULL;
  144. }
  145. }
  146. return bRet;
  147. }
  148. void DeInitStrRepaceTable()
  149. {
  150. if (g_StrReplaceTable.lpSearchString)
  151. {
  152. free(g_StrReplaceTable.lpSearchString);
  153. g_StrReplaceTable.lpSearchString = NULL;
  154. }
  155. if (g_StrReplaceTable.lpReplaceString)
  156. {
  157. free(g_StrReplaceTable.lpReplaceString);
  158. g_StrReplaceTable.lpReplaceString = NULL;
  159. }
  160. if (g_StrReplaceTable.lpAttrib)
  161. {
  162. free(g_StrReplaceTable.lpAttrib);
  163. g_StrReplaceTable.lpAttrib = NULL;
  164. }
  165. if (g_StrReplaceTable.lpFullStringList)
  166. {
  167. free(g_StrReplaceTable.lpFullStringList);
  168. g_StrReplaceTable.lpFullStringList = NULL;
  169. }
  170. if (g_StrReplaceTable.szUserNameLst)
  171. {
  172. free(g_StrReplaceTable.szUserNameLst);
  173. g_StrReplaceTable.szUserNameLst = NULL;
  174. }
  175. }