atlchecked.h
上传用户:hfwmdy
上传日期:2016-01-14
资源大小:83k
文件大小:17k
源码类别:

GDI/图象编程

开发平台:

Visual C++

  1. // This is a part of the Active Template Library.
  2. // Copyright (C) Microsoft Corporation
  3. // All rights reserved.
  4. //
  5. // This source code is only intended as a supplement to the
  6. // Active Template Library Reference and related
  7. // electronic documentation provided with the library.
  8. // See these sources for detailed information regarding the
  9. // Active Template Library product.
  10. #ifndef __ATLCHECKED_H__
  11. #define __ATLCHECKED_H__
  12. #pragma once
  13. #include <atldef.h>
  14. #include <atlexcept.h>
  15. #include <malloc.h>
  16. #include <string.h>
  17. #include <mbstring.h>
  18. #include <wchar.h>
  19. #include <tchar.h>
  20. #include <stdlib.h>
  21. #pragma pack(push,_ATL_PACKING)
  22. namespace ATL
  23. {
  24. inline errno_t AtlCrtErrorCheck(errno_t nError)
  25. {
  26. switch(nError)
  27. {
  28. case ENOMEM:
  29. AtlThrow(E_OUTOFMEMORY);
  30. break;
  31. case EINVAL:
  32. case ERANGE:
  33. AtlThrow(E_INVALIDARG);
  34. break;
  35. case 0:
  36. case STRUNCATE:
  37. break;
  38. default:
  39. AtlThrow(E_FAIL);
  40. break;
  41. }
  42. return nError;
  43. }
  44. /////////////////////////////////////////////////////////////////////////////
  45. // Secure (Checked) CRT functions
  46. namespace Checked
  47. {
  48. #if _SECURE_ATL
  49. #ifdef _AFX
  50. #define ATLMFC_CRT_ERRORCHECK(expr) AFX_CRT_ERRORCHECK(expr)
  51. #else
  52. #define ATLMFC_CRT_ERRORCHECK(expr) ATL_CRT_ERRORCHECK(expr)
  53. #endif
  54. inline void __cdecl memcpy_s(__out_bcount_part(_S1max,_N)  void *_S1, __in size_t _S1max, __in_bcount(_N) const void *_S2, __in size_t _N)
  55. {
  56. ATLMFC_CRT_ERRORCHECK(::memcpy_s(_S1, _S1max, _S2, _N));
  57. }
  58. inline void __cdecl wmemcpy_s(__out_ecount_part(_N1,_N) wchar_t *_S1, __in size_t _N1, __in_ecount(_N) const wchar_t *_S2, __in size_t _N)
  59. {
  60. ATLMFC_CRT_ERRORCHECK(::wmemcpy_s(_S1, _N1, _S2, _N));
  61. }
  62. inline void __cdecl memmove_s(__out_bcount_part(_S1max,_N) void *_S1, __in size_t _S1max, __in_bcount(_N) const void *_S2, size_t _N)
  63. {
  64. ATLMFC_CRT_ERRORCHECK(::memmove_s(_S1, _S1max, _S2, _N));
  65. }
  66. inline void __cdecl strcpy_s(__out_ecount(_S1max) char *_S1, __in size_t _S1max, __in_z const char *_S2)
  67. {
  68. ATLMFC_CRT_ERRORCHECK(::strcpy_s(_S1, _S1max, _S2));
  69. }
  70. inline void __cdecl wcscpy_s(__out_ecount(_S1max) wchar_t *_S1, __in size_t _S1max, __in_z const wchar_t *_S2)
  71. {
  72. ATLMFC_CRT_ERRORCHECK(::wcscpy_s(_S1, _S1max, _S2));
  73. }
  74. inline void __cdecl tcscpy_s(__out_ecount(_SizeInChars) TCHAR * _Dst, __in size_t _SizeInChars, __in_z const TCHAR * _Src)
  75. {
  76. #ifndef _ATL_MIN_CRT
  77. ATLMFC_CRT_ERRORCHECK(::_tcscpy_s(_Dst, _SizeInChars, _Src));
  78. #else
  79. #ifdef UNICODE
  80. ATLMFC_CRT_ERRORCHECK(::wcscpy_s(_Dst, _SizeInChars, _Src));
  81. #else
  82. ATLMFC_CRT_ERRORCHECK(::strcpy_s(_Dst, _SizeInChars, _Src));
  83. #endif
  84. #endif
  85. }
  86. inline errno_t __cdecl strncpy_s(__out_ecount(_SizeInChars) char *_Dest, __in size_t _SizeInChars, __in_z const char *_Source, __in size_t _Count)
  87. {
  88. return ATLMFC_CRT_ERRORCHECK(::strncpy_s(_Dest, _SizeInChars, _Source,_Count));
  89. }
  90. inline errno_t __cdecl wcsncpy_s(__out_ecount(_SizeInChars) wchar_t *_Dest, __in size_t _SizeInChars, __in_z const wchar_t *_Source, __in size_t _Count)
  91. {
  92. return ATLMFC_CRT_ERRORCHECK(::wcsncpy_s(_Dest, _SizeInChars, _Source,_Count));
  93. }
  94. inline errno_t __cdecl tcsncpy_s(__out_ecount(_SizeInChars) TCHAR *_Dest, __in size_t _SizeInChars, __in_z const TCHAR *_Source, __in size_t _Count)
  95. {
  96. #ifndef _ATL_MIN_CRT
  97. return ATLMFC_CRT_ERRORCHECK(::_tcsncpy_s(_Dest, _SizeInChars, _Source,_Count));
  98. #else
  99. #ifdef UNICODE
  100. return ATLMFC_CRT_ERRORCHECK(::wcsncpy_s(_Dest, _SizeInChars, _Source,_Count));
  101. #else
  102. return ATLMFC_CRT_ERRORCHECK(::strncpy_s(_Dest, _SizeInChars, _Source,_Count));
  103. #endif
  104. #endif
  105. }
  106. inline void __cdecl strcat_s(__inout_ecount_z(_SizeInChars) char * _Dst, __in size_t _SizeInChars, __in_z const char * _Src)
  107. {
  108. ATLMFC_CRT_ERRORCHECK(::strcat_s(_Dst, _SizeInChars, _Src));
  109. }
  110. inline void __cdecl wcscat_s(__inout_ecount_z(_SizeInChars) wchar_t * _Dst, __in size_t _SizeInChars, __in_z const wchar_t * _Src)
  111. {
  112. ATLMFC_CRT_ERRORCHECK(::wcscat_s(_Dst, _SizeInChars, _Src));
  113. }
  114. inline void __cdecl tcscat_s(__inout_ecount_z(_SizeInChars) TCHAR * _Dst, __in size_t _SizeInChars, __in_z const TCHAR * _Src)
  115. {
  116. #ifndef _ATL_MIN_CRT
  117. ATLMFC_CRT_ERRORCHECK(::_tcscat_s(_Dst, _SizeInChars, _Src));
  118. #else
  119. #ifdef UNICODE
  120. ATLMFC_CRT_ERRORCHECK(::wcscat_s(_Dst, _SizeInChars, _Src));
  121. #else
  122. ATLMFC_CRT_ERRORCHECK(::strcat_s(_Dst, _SizeInChars, _Src));
  123. #endif
  124. #endif
  125. }
  126. inline void __cdecl strlwr_s(__inout_ecount_z(_SizeInChars) char * _Str, __in size_t _SizeInChars)
  127. {
  128. ATLMFC_CRT_ERRORCHECK(::_strlwr_s(_Str, _SizeInChars));
  129. }
  130. inline void __cdecl wcslwr_s(__inout_ecount_z(_SizeInChars) wchar_t * _Str, __in size_t _SizeInChars)
  131. {
  132. ATLMFC_CRT_ERRORCHECK(::_wcslwr_s(_Str, _SizeInChars));
  133. }
  134. inline void __cdecl mbslwr_s(__inout_bcount_z(_SizeInChars) unsigned char * _Str, __in size_t _SizeInChars)
  135. {
  136. ATLMFC_CRT_ERRORCHECK(::_mbslwr_s(_Str, _SizeInChars));
  137. }
  138. inline void __cdecl tcslwr_s(__inout_ecount_z(_SizeInChars) TCHAR * _Str, __in size_t _SizeInChars)
  139. {
  140. #ifndef _ATL_MIN_CRT
  141. ATLMFC_CRT_ERRORCHECK(::_tcslwr_s(_Str, _SizeInChars));
  142. #else
  143. #ifdef UNICODE
  144. ATLMFC_CRT_ERRORCHECK(::_wcslwr_s(_Str, _SizeInChars));
  145. #else
  146. ATLMFC_CRT_ERRORCHECK(::_strlwr_s(_Str, _SizeInChars));
  147. #endif
  148. #endif
  149. }
  150. inline void __cdecl strupr_s(__inout_ecount_z(_SizeInChars) char * _Str, __in size_t _SizeInChars)
  151. {
  152. ATLMFC_CRT_ERRORCHECK(::_strupr_s(_Str, _SizeInChars));
  153. }
  154. inline void __cdecl wcsupr_s(__inout_ecount_z(_SizeInChars) wchar_t * _Str, __in size_t _SizeInChars)
  155. {
  156. ATLMFC_CRT_ERRORCHECK(::_wcsupr_s(_Str, _SizeInChars));
  157. }
  158. inline void __cdecl mbsupr_s(__inout_bcount_z(_SizeInChars) unsigned char * _Str, __in size_t _SizeInChars)
  159. {
  160. ATLMFC_CRT_ERRORCHECK(::_mbsupr_s(_Str, _SizeInChars));
  161. }
  162. inline void __cdecl tcsupr_s(__inout_ecount_z(_SizeInChars) TCHAR * _Str, __in size_t _SizeInChars)
  163. {
  164. ATLMFC_CRT_ERRORCHECK(::_tcsupr_s(_Str, _SizeInChars));
  165. }
  166. inline void __cdecl itoa_s(__in int _Val, __out_ecount_z(_SizeInChars) char *_Buf, __in size_t _SizeInChars, __in int _Radix)
  167. {
  168. ATLMFC_CRT_ERRORCHECK(::_itoa_s(_Val, _Buf, _SizeInChars, _Radix));
  169. }
  170. inline void __cdecl itot_s(__in int _Val, __out_ecount_z(_SizeInChars) TCHAR *_Buf, __in size_t _SizeInChars, __in int _Radix)
  171. {
  172. ATLMFC_CRT_ERRORCHECK(::_itot_s(_Val, _Buf, _SizeInChars, _Radix));
  173. }
  174. inline void __cdecl ltoa_s(__in long _Val, __out_ecount_z(_SizeInChars) char *_Buf, __in size_t _SizeInChars, __in int _Radix)
  175. {
  176. ATLMFC_CRT_ERRORCHECK(::_ltoa_s(_Val, _Buf, _SizeInChars, _Radix));
  177. }
  178. inline void __cdecl ltot_s(__in long _Val, __out_ecount_z(_SizeInChars) TCHAR *_Buf, __in size_t _SizeInChars, __in int _Radix)
  179. {
  180. ATLMFC_CRT_ERRORCHECK(::_ltot_s(_Val, _Buf, _SizeInChars, _Radix));
  181. }
  182. inline void __cdecl ultoa_s(__in unsigned long _Val, __out_ecount_z(_SizeInChars) char *_Buf, __in size_t _SizeInChars, __in int _Radix)
  183. {
  184. ATLMFC_CRT_ERRORCHECK(::_ultoa_s(_Val, _Buf, _SizeInChars, _Radix));
  185. }
  186. inline void __cdecl ultow_s(__in unsigned long _Val, __out_ecount_z(_SizeInChars) wchar_t *_Buf, __in size_t _SizeInChars, __in int _Radix)
  187. {
  188. ATLMFC_CRT_ERRORCHECK(::_ultow_s(_Val, _Buf, _SizeInChars, _Radix));
  189. }
  190. inline void __cdecl ultot_s(__in unsigned long _Val, __out_ecount_z(_SizeInChars) TCHAR *_Buf, __in size_t _SizeInChars, __in int _Radix)
  191. {
  192. ATLMFC_CRT_ERRORCHECK(::_ultot_s(_Val, _Buf, _SizeInChars, _Radix));
  193. }
  194. inline void __cdecl i64toa_s(__in __int64 _Val, __out_ecount_z(_SizeInChars) char *_Buf, __in size_t _SizeInChars, __in int _Radix)
  195. {
  196. ATLMFC_CRT_ERRORCHECK(::_i64toa_s(_Val, _Buf, _SizeInChars, _Radix));
  197. }
  198. inline void __cdecl i64tow_s(__in __int64 _Val, __out_ecount_z(_SizeInChars) wchar_t *_Buf, __in size_t _SizeInChars, __in int _Radix)
  199. {
  200. ATLMFC_CRT_ERRORCHECK(::_i64tow_s(_Val, _Buf, _SizeInChars, _Radix));
  201. }
  202. inline void __cdecl ui64toa_s(__in unsigned __int64 _Val, __out_ecount_z(_SizeInChars) char *_Buf, __in size_t _SizeInChars, __in int _Radix)
  203. {
  204. ATLMFC_CRT_ERRORCHECK(::_ui64toa_s(_Val, _Buf, _SizeInChars, _Radix));
  205. }
  206. inline void __cdecl ui64tow_s(__in unsigned __int64 _Val, __out_ecount_z(_SizeInChars) wchar_t *_Buf, __in size_t _SizeInChars, __in int _Radix)
  207. {
  208. ATLMFC_CRT_ERRORCHECK(::_ui64tow_s(_Val, _Buf, _SizeInChars, _Radix));
  209. }
  210. inline void __cdecl gcvt_s(__out_ecount_z(_SizeInChars) char *_Buffer, __in size_t _SizeInChars, __in double _Value, __in int _Ndec)
  211. {
  212. ATLMFC_CRT_ERRORCHECK(::_gcvt_s(_Buffer, _SizeInChars, _Value, _Ndec));
  213. }
  214. inline void __cdecl tsplitpath_s(__in_z const TCHAR *_Path, __out_ecount_z_opt(_Drive_len) TCHAR *_Drive, __in size_t _Drive_len, 
  215. __out_ecount_z_opt(_Dir_len) TCHAR *_Dir, __in size_t _Dir_len, 
  216. __out_ecount_z_opt(_Fname_len) TCHAR *_Fname, __in size_t _Fname_len, 
  217. __out_ecount_z_opt(_Ext_len) TCHAR *_Ext, __in size_t _Ext_len)
  218. {
  219. ATLMFC_CRT_ERRORCHECK(::_tsplitpath_s(_Path, _Drive, _Drive_len, _Dir, _Dir_len, _Fname, _Fname_len, _Ext, _Ext_len));
  220. }
  221. inline void __cdecl tmakepath_s(__out_ecount_z(_SizeInChars) TCHAR *_Path, __in size_t _SizeInChars, __in_z const TCHAR *_Drive, 
  222. __in_z const TCHAR *_Dir, __in_z const TCHAR *_Fname, __in_z const TCHAR *_Ext)
  223. {
  224. ATLMFC_CRT_ERRORCHECK(::_tmakepath_s(_Path, _SizeInChars, _Drive, _Dir, _Fname, _Ext));
  225. }
  226. inline size_t __cdecl strnlen(__in_ecount(_Maxsize) const char *_Str, __in size_t _Maxsize)
  227. {
  228. return ::strnlen(_Str, _Maxsize);
  229. }
  230. inline size_t __cdecl wcsnlen(__in_ecount(_Maxsize) const wchar_t *_Wcs, __in size_t _Maxsize)
  231. {
  232. return ::wcsnlen(_Wcs, _Maxsize);
  233. }
  234. inline size_t __cdecl tcsnlen(__in_ecount(_Maxsize) const TCHAR *_Str, __in size_t _Maxsize)
  235. {
  236. return ::_tcsnlen(_Str, _Maxsize);
  237. }
  238. inline int get_errno()
  239. {
  240. int nErrNo;
  241. ATLMFC_CRT_ERRORCHECK(::_get_errno(&nErrNo));
  242. return nErrNo;
  243. }
  244. inline void set_errno(__in int _Value)
  245. {
  246. ATLMFC_CRT_ERRORCHECK(::_set_errno(_Value));
  247. }
  248. #else // !_SECURE_ATL
  249. #define ATLMFC_CRT_ERRORCHECK(expr) do { expr; } while (0)
  250. inline void __cdecl memcpy_s(__out_bcount(_S1max) void *_S1, __in size_t _S1max, __in_bcount(_N) const void *_S2, size_t _N)
  251. {
  252. (_S1max);
  253. memcpy(_S1, _S2, _N);
  254. }
  255. inline void __cdecl wmemcpy_s(__out_ecount(_N1) wchar_t *_S1, __in size_t _N1, __in_ecount(_N) const wchar_t *_S2, __in size_t _N)
  256. {
  257. (_N1);
  258. ::wmemcpy(_S1, _S2, _N);
  259. }
  260. inline void __cdecl memmove_s(__out_bcount(_S1max) void *_S1, __in size_t _S1max, __in_bcount(_N) const void *_S2, __in size_t _N)
  261. {
  262. (_S1max);
  263. memmove(_S1, _S2, _N);
  264. }
  265. inline void __cdecl strcpy_s(__out_ecount_z(_S1max) char *_S1, __in size_t _S1max, __in_z const char *_S2)
  266. {
  267. (_S1max);
  268. ::strcpy(_S1, _S2);
  269. }
  270. inline void __cdecl wcscpy_s(__out_ecount_z(_S1max) wchar_t *_S1, __in size_t _S1max, __in_z const wchar_t *_S2)
  271. {
  272. (_S1max);
  273. ::wcscpy(_S1, _S2);
  274. }
  275. inline void __cdecl tcscpy_s(__out_ecount_z(_SizeInChars) TCHAR * _Dst, __in size_t _SizeInChars, __in_z const TCHAR * _Src)
  276. {
  277. (_SizeInChars);
  278. #ifndef _ATL_MIN_CRT
  279. ::_tcscpy(_Dst, _Src);
  280. #else
  281. #ifdef UNICODE
  282. ::wcscpy(_Dst, _Src);
  283. #else
  284. ::strcpy(_Dst, _Src);
  285. #endif
  286. #endif
  287. }
  288. /* ensure that strncpy_s null-terminate the dest string */
  289. inline errno_t __cdecl strncpy_s(__out_ecount_z(_SizeInChars) char *_Dest, __in size_t _SizeInChars, __in_z const char *_Source,__in size_t _Count)
  290. {
  291. if (_Count == _TRUNCATE)
  292. {
  293. _Count = _SizeInChars - 1;
  294. }
  295. while (_Count > 0 && *_Source != 0)
  296. {
  297. *_Dest++ = *_Source++;
  298. --_Count;
  299. }
  300. *_Dest = 0;
  301. return (*_Source!=0) ? STRUNCATE : 0;
  302. }
  303. inline errno_t __cdecl wcsncpy_s(__out_ecount_z(_SizeInChars) wchar_t *_Dest, __in size_t _SizeInChars, __in_z const wchar_t *_Source, __in size_t _Count)
  304. {
  305. if (_Count == _TRUNCATE)
  306. {
  307. _Count = _SizeInChars - 1;
  308. }
  309. while (_Count > 0 && *_Source != 0)
  310. {
  311. *_Dest++ = *_Source++;
  312. --_Count;
  313. }
  314. *_Dest = 0;
  315. return (*_Source!=0) ? STRUNCATE : 0;
  316. }
  317. inline errno_t __cdecl tcsncpy_s(__out_ecount_z(_SizeInChars) TCHAR *_Dest, __in size_t _SizeInChars, __in_z const TCHAR *_Source,__in size_t _Count)
  318. {
  319. if (_Count == _TRUNCATE)
  320. {
  321. if(_SizeInChars>0)
  322. {
  323. _Count = _SizeInChars - 1;
  324. }
  325. else
  326. {
  327. _Count =0;
  328. }
  329. }
  330. #ifndef _ATL_MIN_CRT
  331. #pragma warning(push)
  332. #pragma warning(disable: 6535)
  333. ::_tcsncpy(_Dest,_Source,_Count);
  334. #pragma warning(pop)
  335. if(_SizeInChars>0)
  336. {
  337. _Dest[_SizeInChars-1] = 0;
  338. }
  339. #else
  340. while (_Count > 0 && *_Source != 0)
  341. {
  342. *_Dest++ = *_Source++;
  343. --_Count;
  344. }
  345. *_Dest = 0;
  346. #endif
  347. return (*_Source!=0) ? STRUNCATE : 0;
  348. }
  349. inline void __cdecl strcat_s(__inout_ecount_z(_SizeInChars) char * _Dst, __in size_t _SizeInChars, __in_z const char * _Src)
  350. {
  351. (_SizeInChars);
  352. ::strcat(_Dst, _Src);
  353. }
  354. inline void __cdecl wcscat_s(__inout_ecount_z(_SizeInChars) wchar_t * _Dst, __in size_t _SizeInChars, __in_z const wchar_t * _Src)
  355. {
  356. (_SizeInChars);
  357. ::wcscat(_Dst, _Src);
  358. }
  359. inline void __cdecl tcscat_s(__inout_ecount_z(_SizeInChars) TCHAR * _Dst, __in size_t _SizeInChars, __in_z const TCHAR * _Src)
  360. {
  361. (_SizeInChars);
  362. #ifndef _ATL_MIN_CRT
  363. ::_tcscat(_Dst, _Src);
  364. #else
  365. #ifdef UNICODE
  366. ::wcscat(_Dst, _Src);
  367. #else
  368. ::strcat(_Dst, _Src);
  369. #endif
  370. #endif
  371. }
  372. inline void __cdecl strlwr_s(__inout_ecount_z(_SizeInChars) char * _Str, size_t _SizeInChars)
  373. {
  374. (_SizeInChars);
  375. ::_strlwr(_Str);
  376. }
  377. inline void __cdecl wcslwr_s(__inout_ecount_z(_SizeInChars) wchar_t * _Str, size_t _SizeInChars)
  378. {
  379. (_SizeInChars);
  380. ::_wcslwr(_Str);
  381. }
  382. inline void __cdecl mbslwr_s(__inout_bcount_z(_SizeInChars) unsigned char * _Str, size_t _SizeInChars)
  383. {
  384. (_SizeInChars);
  385. ::_mbslwr(_Str);
  386. }
  387. inline void __cdecl tcslwr_s(__inout_ecount_z(_SizeInChars) TCHAR * _Str, size_t _SizeInChars)
  388. {
  389. (_SizeInChars);
  390. #ifndef _ATL_MIN_CRT
  391. ::_tcslwr(_Str);
  392. #else
  393. #ifdef UNICODE
  394. ::_wcslwr(_Str);
  395. #else
  396. ::_strlwr(_Str);
  397. #endif
  398. #endif
  399. }
  400. inline void __cdecl itoa_s(__in int _Val, __out_ecount_z(_SizeInChars) char *_Buf, __in size_t _SizeInChars, __in int _Radix)
  401. {
  402. (_SizeInChars);
  403. ::_itoa_s(_Val, _Buf, _SizeInChars, _Radix);
  404. }
  405. inline void __cdecl itot_s(__in int _Val, __out_ecount_z(_SizeInChars) TCHAR *_Buf, __in size_t _SizeInChars, __in int _Radix)
  406. {
  407. (_SizeInChars);
  408. ::_itot(_Val, _Buf, _Radix);
  409. }
  410. inline void __cdecl ltoa_s(__in long _Val, __out_ecount_z(_SizeInChars) char *_Buf, __in size_t _SizeInChars, __in int _Radix)
  411. {
  412. (_SizeInChars);
  413. ::_ltoa(_Val, _Buf, _Radix);
  414. }
  415. inline void __cdecl ltot_s(__in long _Val, __out_ecount_z(_SizeInChars) TCHAR *_Buf, __in size_t _SizeInChars, __in int _Radix)
  416. {
  417. (_SizeInChars);
  418. ::_ltot(_Val, _Buf, _Radix);
  419. }
  420. inline void __cdecl ultoa_s(__in unsigned long _Val, __out_ecount_z(_SizeInChars) char *_Buf, __in size_t _SizeInChars, __in int _Radix)
  421. {
  422. (_SizeInChars);
  423. ::_ultoa(_Val, _Buf, _Radix);
  424. }
  425. inline void __cdecl ultow_s(__in unsigned long _Val, __out_ecount_z(_SizeInChars) wchar_t *_Buf, __in size_t _SizeInChars, __in int _Radix)
  426. {
  427. (_SizeInChars);
  428. ::_ultow(_Val, _Buf, _Radix);
  429. }
  430. inline void __cdecl ultot_s(__in unsigned long _Val, __out_ecount_z(_SizeInChars) TCHAR *_Buf, __in size_t _SizeInChars, __in int _Radix)
  431. {
  432. (_SizeInChars);
  433. ::_ultot(_Val, _Buf, _Radix);
  434. }
  435. inline void __cdecl i64toa_s(__in __int64 _Val, __out_ecount_z(_SizeInChars) char *_Buf, __in size_t _SizeInChars, __in int _Radix)
  436. {
  437. (_SizeInChars);
  438. ::_i64toa(_Val, _Buf, _Radix);
  439. }
  440. inline void __cdecl i64tow_s(__in __int64 _Val, __out_ecount_z(_SizeInChars) wchar_t *_Buf, __in size_t _SizeInChars, __in int _Radix)
  441. {
  442. (_SizeInChars);
  443. ::_i64tow(_Val, _Buf, _Radix);
  444. }
  445. inline void __cdecl ui64toa_s(__in unsigned __int64 _Val, __out_ecount_z(_SizeInChars) char *_Buf, __in size_t _SizeInChars, __in int _Radix)
  446. {
  447. (_SizeInChars);
  448. ::_ui64toa(_Val, _Buf, _Radix);
  449. }
  450. inline void __cdecl ui64tow_s(__in unsigned __int64 _Val, __out_ecount_z(_SizeInChars) wchar_t *_Buf, __in size_t _SizeInChars, __in int _Radix)
  451. {
  452. (_SizeInChars);
  453. ::_ui64tow(_Val, _Buf, _Radix);
  454. }
  455. inline void __cdecl gcvt_s(__out_ecount_z(_SizeInChars) char *_Buffer, __in size_t _SizeInChars, __in double _Value, __in int _Ndec)
  456. {
  457. (_SizeInChars);
  458. ::_gcvt(_Value, _Ndec, _Buffer);
  459. }
  460. inline void __cdecl tsplitpath_s(__in_z const TCHAR *_Path, __out_ecount_z_opt(_Drive_len) TCHAR *_Drive, __in size_t _Drive_len, 
  461. __out_ecount_z_opt(_Dir_len) TCHAR *_Dir, __in size_t _Dir_len, 
  462. __out_ecount_z_opt(_Fname_ext) TCHAR *_Fname, __in size_t _Fname_len, 
  463. __out_ecount_z_opt(_Ext_len) TCHAR *_Ext, __in size_t _Ext_len)
  464. {
  465. (_Drive_len, _Dir_len, _Fname_len, _Ext_len);
  466. ::_tsplitpath(_Path, _Drive, _Dir, _Fname, _Ext);
  467. }
  468. inline void __cdecl tmakepath_s(__out_ecount_z(_SizeInChars) TCHAR *_Path, __in size_t _SizeInChars, __in_z const TCHAR *_Drive, 
  469. __in_z const TCHAR *_Dir, __in_z const TCHAR *_Fname, __in_z const TCHAR *_Ext)
  470. {
  471. (_SizeInChars);
  472. ::_tmakepath(_Path, _Drive, _Dir, _Fname, _Ext);
  473. }
  474. inline size_t __cdecl strnlen(__in_ecount(_Maxsize) const char *_Str, __in size_t _Maxsize)
  475. {
  476. (_Maxsize);
  477. return ::strlen(_Str);
  478. }
  479. inline size_t __cdecl wcsnlen(__in_ecount(_Maxsize) const wchar_t *_Wcs, __in size_t _Maxsize)
  480. {
  481. (_Maxsize);
  482. return ::wcslen(_Wcs);
  483. }
  484. inline size_t __cdecl tcsnlen(__in_ecount(_Maxsize) const TCHAR *_Str, __in size_t _Maxsize)
  485. {
  486. (_Maxsize);
  487. return ::_tcslen(_Str);
  488. }
  489. inline int get_errno()
  490. {
  491. return errno;
  492. }
  493. inline void set_errno(__in int _Value)
  494. {
  495. errno = _Value;
  496. }
  497. #endif // _SECURE_ATL
  498. } // namespace Checked
  499. } // namespace ATL
  500. #pragma pack(pop)
  501. #endif // __ATLCHECKED_H__
  502. /////////////////////////////////////////////////////////////////////////////