simplify secure function usage using template overloads
Modified: trunk/reactos/subsys/system/explorer/explorer.vcproj
Modified: trunk/reactos/subsys/system/explorer/precomp.h
Modified: trunk/reactos/subsys/system/explorer/shell/fatfs.cpp
Modified: trunk/reactos/subsys/system/explorer/shell/mainframe.cpp
Modified: trunk/reactos/subsys/system/explorer/shell/pane.cpp
Modified: trunk/reactos/subsys/system/explorer/shell/regfs.cpp
Modified: trunk/reactos/subsys/system/explorer/shell/shellfs.cpp
Modified: trunk/reactos/subsys/system/explorer/taskbar/quicklaunch.cpp
Modified: trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp
Modified: trunk/reactos/subsys/system/explorer/taskbar/traynotify.cpp
Modified: trunk/reactos/subsys/system/explorer/utility/utility.cpp
Modified: trunk/reactos/subsys/system/explorer/utility/utility.h
Modified: trunk/reactos/subsys/system/explorer/utility/xmlstorage.cpp
Modified: trunk/reactos/subsys/system/explorer/utility/xmlstorage.h

Modified: trunk/reactos/subsys/system/explorer/explorer.vcproj
--- trunk/reactos/subsys/system/explorer/explorer.vcproj	2005-12-01 22:15:57 UTC (rev 19813)
+++ trunk/reactos/subsys/system/explorer/explorer.vcproj	2005-12-01 22:24:00 UTC (rev 19814)
@@ -43,7 +43,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				PreprocessorDefinitions="_DEBUG;UNICODE;WIN32;_WIN32_IE=0x0600;_WIN32_WINNT=0x0501"
+				PreprocessorDefinitions="_DEBUG;UNICODE;WIN32;_WIN32_IE=0x0600;_WIN32_WINNT=0x0501,_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES,_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT"
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
@@ -141,7 +141,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="2"
 				InlineFunctionExpansion="1"
-				PreprocessorDefinitions="NDEBUG;UNICODE;WIN32;_WIN32_IE=0x0600;_WIN32_WINNT=0x0501"
+				PreprocessorDefinitions="NDEBUG;UNICODE;WIN32;_WIN32_IE=0x0600;_WIN32_WINNT=0x0501,_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES,_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT"
 				StringPooling="true"
 				RuntimeLibrary="2"
 				EnableFunctionLevelLinking="true"
@@ -426,7 +426,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				PreprocessorDefinitions="_DEBUG;WIN32;_WIN32_IE=0x0600;_WIN32_WINNT=0x0501"
+				PreprocessorDefinitions="_DEBUG;WIN32;_WIN32_IE=0x0600;_WIN32_WINNT=0x0501,_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES,_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT"
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
@@ -524,7 +524,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="1"
 				InlineFunctionExpansion="1"
-				PreprocessorDefinitions="NDEBUG;WIN32;_WIN32_IE=0x0600;_WIN32_WINNT=0x0501;_CRT_SECURE_NO_DEPRECATE_xx"
+				PreprocessorDefinitions="NDEBUG;WIN32;_WIN32_IE=0x0600;_WIN32_WINNT=0x0501;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES,_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT"
 				StringPooling="true"
 				RuntimeLibrary="2"
 				EnableFunctionLevelLinking="true"

Modified: trunk/reactos/subsys/system/explorer/precomp.h
--- trunk/reactos/subsys/system/explorer/precomp.h	2005-12-01 22:15:57 UTC (rev 19813)
+++ trunk/reactos/subsys/system/explorer/precomp.h	2005-12-01 22:24:00 UTC (rev 19814)
@@ -25,6 +25,9 @@
  // Martin Fuchs, 17.05.2004
  //
 
+#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES			1
+#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT	1
+
 #include "utility/utility.h"
 
 #include "explorer.h"

Modified: trunk/reactos/subsys/system/explorer/shell/fatfs.cpp
--- trunk/reactos/subsys/system/explorer/shell/fatfs.cpp	2005-12-01 22:15:57 UTC (rev 19813)
+++ trunk/reactos/subsys/system/explorer/shell/fatfs.cpp	2005-12-01 22:24:00 UTC (rev 19814)
@@ -83,7 +83,7 @@
 
 	TCHAR buffer[MAX_PATH];
 
-	_tcscpy_s(buffer, COUNTOF(buffer), (LPCTSTR)_path);
+	_tcscpy(buffer, (LPCTSTR)_path);
 	LPTSTR pname = buffer + _tcslen(buffer);
 	int plen = COUNTOF(buffer) - _tcslen(buffer);
 

Modified: trunk/reactos/subsys/system/explorer/shell/mainframe.cpp
--- trunk/reactos/subsys/system/explorer/shell/mainframe.cpp	2005-12-01 22:15:57 UTC (rev 19813)
+++ trunk/reactos/subsys/system/explorer/shell/mainframe.cpp	2005-12-01 22:24:00 UTC (rev 19814)
@@ -1021,7 +1021,7 @@
 		if (activate_drive_window(root))
 			return 0;
 
-		_tsplitpath_s(root, drv, COUNTOF(drv), 0, 0, 0, 0, 0, 0);
+		_tsplitpath_s(root, drv, COUNTOF(drv), NULL, 0, NULL, 0, NULL, 0);
 
 		if (!SetCurrentDirectory(drv)) {
 			display_error(_hwnd, GetLastError());
@@ -1251,14 +1251,14 @@
 	TCHAR drv1[_MAX_DRIVE], drv2[_MAX_DRIVE];
 	HWND child_wnd;
 
-	_tsplitpath_s(path, drv1, COUNTOF(drv1), 0, 0, 0, 0, 0, 0);
+	_tsplitpath_s(path, drv1, COUNTOF(drv1), NULL, 0, NULL, 0, NULL, 0);
 
 	 // search for a already open window for the same drive
 	for(child_wnd=::GetNextWindow(_hmdiclient,GW_CHILD); child_wnd; child_wnd=::GetNextWindow(child_wnd, GW_HWNDNEXT)) {
 		FileChildWindow* child = (FileChildWindow*) SendMessage(child_wnd, PM_GET_FILEWND_PTR, 0, 0);
 
 		if (child) {
-			_tsplitpath_s(child->get_root()._path, drv2, COUNTOF(drv2), 0, 0, 0, 0, 0, 0);
+			_tsplitpath_s(child->get_root()._path, drv2, COUNTOF(drv2), NULL, 0, NULL, 0, NULL, 0);
 
 			if (!lstrcmpi(drv2, drv1)) {
 				SendMessage(_hmdiclient, WM_MDIACTIVATE, (WPARAM)child_wnd, 0);

Modified: trunk/reactos/subsys/system/explorer/shell/pane.cpp
--- trunk/reactos/subsys/system/explorer/shell/pane.cpp	2005-12-01 22:15:57 UTC (rev 19813)
+++ trunk/reactos/subsys/system/explorer/shell/pane.cpp	2005-12-01 22:24:00 UTC (rev 19814)
@@ -501,7 +501,7 @@
 	if (visible_cols & COL_SIZE) {
 		ULONGLONG size = ((ULONGLONG)entry->_data.nFileSizeHigh << 32) | entry->_data.nFileSizeLow;
 
-		_stprintf_s1(buffer, BUFFER_LEN, TEXT("%") LONGLONGARG TEXT("d"), size);
+		_stprintf(buffer, TEXT("%") LONGLONGARG TEXT("d"), size);
 
 		if (calcWidthCol == -1)
 			_out_wrkr.output_number(dis, _positions, col, buffer);
@@ -539,7 +539,7 @@
 		ULONGLONG index = ((ULONGLONG)entry->_bhfi.nFileIndexHigh << 32) | entry->_bhfi.nFileIndexLow;
 
 		if (visible_cols & COL_INDEX) {
-			_stprintf_s1(buffer, BUFFER_LEN, TEXT("%") LONGLONGARG TEXT("X"), index);
+			_stprintf(buffer, TEXT("%") LONGLONGARG TEXT("X"), index);
 
 			if (calcWidthCol == -1)
 				_out_wrkr.output_text(dis, _positions, col, buffer, DT_RIGHT);

Modified: trunk/reactos/subsys/system/explorer/shell/regfs.cpp
--- trunk/reactos/subsys/system/explorer/shell/regfs.cpp	2005-12-01 22:15:57 UTC (rev 19813)
+++ trunk/reactos/subsys/system/explorer/shell/regfs.cpp	2005-12-01 22:24:00 UTC (rev 19814)
@@ -40,7 +40,7 @@
 
 	TCHAR buffer[MAX_PATH];
 
-	_tcscpy_s(buffer, COUNTOF(buffer), (LPCTSTR)_path);
+	_tcscpy(buffer, (LPCTSTR)_path);
 	LPTSTR pname = buffer + _tcslen(buffer);
 	int plen = MAX_PATH - _tcslen(buffer);
 
@@ -65,7 +65,7 @@
 				break;
 
 			w32fd.dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY;
-			_tcsncpy_s(w32fd.cFileName, COUNTOF(w32fd.cFileName), name, name_len);
+			_tcsncpy(w32fd.cFileName, name, name_len);
 
 			_tcscpy_s(pname, plen, name);
 			entry = new RegDirectory(this, buffer, _hKeyRoot);
@@ -153,7 +153,7 @@
 					entry->_content = _tcsdup(value);
 				else if (type == REG_DWORD) {
 					TCHAR b[32];
-					_stprintf_s1(b, COUNTOF(b), TEXT("%ld"), *(DWORD*)&value);
+					_stprintf(b, TEXT("%ld"), *(DWORD*)&value);
 					entry->_content = _tcsdup(b);
 				}
 			}
@@ -254,49 +254,49 @@
 	_data.dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY;
 
 	entry = new RegDirectory(this, TEXT("\\"), HKEY_CURRENT_USER);
-	_tcscpy_s(entry->_data.cFileName, COUNTOF(entry->_data.cFileName), TEXT("HKEY_CURRENT_USER"));
+	_tcscpy(entry->_data.cFileName, TEXT("HKEY_CURRENT_USER"));
 	entry->_level = level;
 
 	first_entry = entry;
 	last = entry;
 
 	entry = new RegDirectory(this, TEXT("\\"), HKEY_LOCAL_MACHINE);
-	_tcscpy_s(entry->_data.cFileName, COUNTOF(entry->_data.cFileName), TEXT("HKEY_LOCAL_MACHINE"));
+	_tcscpy(entry->_data.cFileName, TEXT("HKEY_LOCAL_MACHINE"));
 	entry->_level = level;
 
 	last->_next = entry;
 	last = entry;
 
 	entry = new RegDirectory(this, TEXT("\\"), HKEY_CLASSES_ROOT);
-	_tcscpy_s(entry->_data.cFileName, COUNTOF(entry->_data.cFileName), TEXT("HKEY_CLASSES_ROOT"));
+	_tcscpy(entry->_data.cFileName, TEXT("HKEY_CLASSES_ROOT"));
 	entry->_level = level;
 
 	last->_next = entry;
 	last = entry;
 
 	entry = new RegDirectory(this, TEXT("\\"), HKEY_USERS);
-	_tcscpy_s(entry->_data.cFileName, COUNTOF(entry->_data.cFileName), TEXT("HKEY_USERS"));
+	_tcscpy(entry->_data.cFileName, TEXT("HKEY_USERS"));
 	entry->_level = level;
 
 	last->_next = entry;
 	last = entry;
 /*
 	entry = new RegDirectory(this, TEXT("\\"), HKEY_PERFORMANCE_DATA);
-	_tcscpy_s(entry->_data.cFileName, COUNTOF(entry->_data.cFileName), TEXT("HKEY_PERFORMANCE_DATA"));
+	_tcscpy(entry->_data.cFileName, TEXT("HKEY_PERFORMANCE_DATA"));
 	entry->_level = level;
 
 	last->_next = entry;
 	last = entry;
 */
 	entry = new RegDirectory(this, TEXT("\\"), HKEY_CURRENT_CONFIG);
-	_tcscpy_s(entry->_data.cFileName, COUNTOF(entry->_data.cFileName), TEXT("HKEY_CURRENT_CONFIG"));
+	_tcscpy(entry->_data.cFileName, TEXT("HKEY_CURRENT_CONFIG"));
 	entry->_level = level;
 
 	last->_next = entry;
 	last = entry;
 /*
 	entry = new RegDirectory(this, TEXT("\\"), HKEY_DYN_DATA);
-	_tcscpy_s(entry->_data.cFileName, COUNTOF(entry->_data.cFileName), TEXT("HKEY_DYN_DATA"));
+	_tcscpy(entry->_data.cFileName, TEXT("HKEY_DYN_DATA"));
 	entry->_level = level;
 
 	last->_next = entry;

Modified: trunk/reactos/subsys/system/explorer/shell/shellfs.cpp
--- trunk/reactos/subsys/system/explorer/shell/shellfs.cpp	2005-12-01 22:15:57 UTC (rev 19813)
+++ trunk/reactos/subsys/system/explorer/shell/shellfs.cpp	2005-12-01 22:24:00 UTC (rev 19814)
@@ -61,7 +61,7 @@
 				if (path) {
 					 // fill with drive names "C:", ...
 					assert(_tcslen(path) < GlobalSize(medium.UNION_MEMBER(hGlobal)));
-					_tcscpy_s(pw32fdata->cFileName, COUNTOF(pw32fdata->cFileName), path);
+					_tcscpy(pw32fdata->cFileName, path);
 
 					UINT sem_org = SetErrorMode(SEM_FAILCRITICALERRORS);
 
@@ -412,7 +412,7 @@
 
 					if (SUCCEEDED(name_from_pidl(_folder, pidls[n], name, COUNTOF(name), SHGDN_INFOLDER|0x2000/*0x2000=SHGDN_INCLUDE_NONFILESYS*/))) {
 						if (!entry->_data.cFileName[0])
-							_tcscpy_s(entry->_data.cFileName, COUNTOF(entry->_data.cFileName), name);
+							_tcscpy(entry->_data.cFileName, name);
 						else if (_tcscmp(entry->_display_name, name))
 							entry->_display_name = _tcsdup(name);	// store display name separate from file name; sort display by file name
 					}

Modified: trunk/reactos/subsys/system/explorer/taskbar/quicklaunch.cpp
--- trunk/reactos/subsys/system/explorer/taskbar/quicklaunch.cpp	2005-12-01 22:15:57 UTC (rev 19813)
+++ trunk/reactos/subsys/system/explorer/taskbar/quicklaunch.cpp	2005-12-01 22:24:00 UTC (rev 19814)
@@ -100,7 +100,7 @@
 
 		SpecialFolderFSPath app_data(CSIDL_APPDATA, _hwnd);	///@todo perhaps also look into CSIDL_COMMON_APPDATA ?
 
-		_stprintf_s1(path, COUNTOF(path), TEXT("%s\\")QUICKLAUNCH_FOLDER, (LPCTSTR)app_data);
+		_stprintf(path, TEXT("%s\\")QUICKLAUNCH_FOLDER, (LPCTSTR)app_data);
 
 		RecursiveCreateDirectory(path);
 		_dir = new ShellDirectory(GetDesktopFolder(), path, _hwnd);

Modified: trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp
--- trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp	2005-12-01 22:15:57 UTC (rev 19813)
+++ trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp	2005-12-01 22:24:00 UTC (rev 19814)
@@ -250,8 +250,8 @@
 	if (!ignore.empty()) {
 		_tsplitpath_s(ignore, ignore_path, COUNTOF(ignore_path), ignore_dir, COUNTOF(ignore_dir), ignore_name, COUNTOF(ignore_name), ignore_ext, COUNTOF(ignore_ext));
 
-		_tcscat_s(ignore_path, COUNTOF(ignore_path), ignore_dir);
-		_tcscat_s(ignore_name, COUNTOF(ignore_path), ignore_ext);
+		_tcscat(ignore_path, ignore_dir);
+		_tcscat(ignore_name, ignore_ext);
 
 		dir.get_path(dir_path, COUNTOF(dir_path));
 

Modified: trunk/reactos/subsys/system/explorer/taskbar/traynotify.cpp
--- trunk/reactos/subsys/system/explorer/taskbar/traynotify.cpp	2005-12-01 22:15:57 UTC (rev 19813)
+++ trunk/reactos/subsys/system/explorer/taskbar/traynotify.cpp	2005-12-01 22:24:00 UTC (rev 19814)
@@ -1285,7 +1285,7 @@
 	TCHAR buffer[8];
 
 	if (!GetTimeFormat(LOCALE_USER_DEFAULT, TIME_NOSECONDS, NULL, NULL, buffer, sizeof(buffer)/sizeof(TCHAR)))
-		_tcscpy_s(buffer, COUNTOF(buffer), TEXT("00:00"));
+		_tcscpy(buffer, TEXT("00:00"));
 
 	DrawText(canvas, buffer, -1, &rect, DT_SINGLELINE|DT_NOPREFIX|DT_CALCRECT);
 	int clockwindowWidth = rect.right-rect.left + 4;
@@ -1324,7 +1324,7 @@
 		GetLocalTime(&systime);
 
 		if (GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &systime, NULL, buffer, 64))
-			_tcscpy_s(pdi->szText, COUNTOF(pdi->szText), buffer);
+			_tcscpy(pdi->szText, buffer);
 		else
 			pdi->szText[0] = '\0';
 	}
@@ -1344,7 +1344,7 @@
 
 	if (GetTimeFormat(LOCALE_USER_DEFAULT, TIME_NOSECONDS, NULL, NULL, buffer, sizeof(buffer)/sizeof(TCHAR)))
 		if (_tcscmp(buffer, _time)) {
-			_tcscpy_s(_time, COUNTOF(_time), buffer);
+			_tcscpy(_time, buffer);
 			return true;	// The text to display has changed.
 		}
 

Modified: trunk/reactos/subsys/system/explorer/utility/utility.cpp
--- trunk/reactos/subsys/system/explorer/utility/utility.cpp	2005-12-01 22:15:57 UTC (rev 19813)
+++ trunk/reactos/subsys/system/explorer/utility/utility.cpp	2005-12-01 22:24:00 UTC (rev 19814)
@@ -393,7 +393,7 @@
 {
 	TCHAR path[MAX_PATH], hole_path[MAX_PATH];
 
-	_tcscpy_s(hole_path, COUNTOF(hole_path), path_in);
+	_tcscpy(hole_path, path_in);
 
 	int drv_len = 0;
 	LPCTSTR d;
@@ -418,7 +418,7 @@
 	HANDLE hFind = FindFirstFile(hole_path, &w32fd);
 
 	if (hFind == INVALID_HANDLE_VALUE) {
-		_tcsncpy_s(path, COUNTOF(path), hole_path, drv_len);
+		_tcsncpy(path, hole_path, drv_len);
 		int i = drv_len;
 
 		for(p=dir; *p=='/'||*p=='\\'; p++)
@@ -521,7 +521,7 @@
 			TCHAR drv[_MAX_DRIVE], dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT];
 
 			_tsplitpath_s(path, drv, COUNTOF(drv), dir, COUNTOF(dir), fname, COUNTOF(fname), ext, COUNTOF(ext));
-			_stprintf_s2(path, COUNTOF(path), TEXT("%s%s"), drv, dir);
+			_stprintf(path, TEXT("%s%s"), drv, dir);
 
 			fname_out.printf(TEXT("%s%s"), fname, ext);
 		}

Modified: trunk/reactos/subsys/system/explorer/utility/utility.h
--- trunk/reactos/subsys/system/explorer/utility/utility.h	2005-12-01 22:15:57 UTC (rev 19813)
+++ trunk/reactos/subsys/system/explorer/utility/utility.h	2005-12-01 22:24:00 UTC (rev 19814)
@@ -69,7 +69,11 @@
 
 #define	for if (0) {} else for
 
+#ifdef _countof
+#define COUNTOF _countof
+#else
 #define	COUNTOF(x)	(sizeof(x)/sizeof(x[0]))
+#endif
 
 
 #define	BUFFER_LEN				2048
@@ -169,12 +173,6 @@
  // secure CRT functions
 #ifdef __STDC_WANT_SECURE_LIB__	// for VS 2005: _MSC_VER>=1400
 
-#undef _vsntprintf
-#define _vsntprintf(b, s, f, l) _vsntprintf_s(b, s, s, f, l)
-
-#undef _sntprintf
-#define _sntprintf(b, s, f, l) _sntprintf_s(b, s, s, f, l)
-
 #define _stprintf_s1 _stprintf_s
 #define _stprintf_s2 _stprintf_s
 
@@ -182,9 +180,7 @@
 
 #define strcpy_s(d, l, s) strcpy(d, s)
 #define _tcscpy_s(d, l, s) _tcscpy(d, s)
-#define _tcscat_s(d, l, s) _tcscat(d, s)
 #define wcsncpy_s(d, l, s, n) wcsncpy(d, s, n)
-#define _tcsncpy_s(d, l, s, n) _tcsncpy(d, s, n)
 #define _stprintf_s1(b, l, f, p1) _stprintf(b, f, p1)
 #define _stprintf_s2(b, l, f, p1,p2) _stprintf(b, f, p1,p2)
 #define _tsplitpath_s(f, d,dl, p,pl, n,nl, e,el) _tsplitpath(f, d, p, n, e)

Modified: trunk/reactos/subsys/system/explorer/utility/xmlstorage.cpp
--- trunk/reactos/subsys/system/explorer/utility/xmlstorage.cpp	2005-12-01 22:15:57 UTC (rev 19813)
+++ trunk/reactos/subsys/system/explorer/utility/xmlstorage.cpp	2005-12-01 22:24:00 UTC (rev 19814)
@@ -492,7 +492,7 @@
 		  default:
 			if ((unsigned)*p<20 && *p!='\t' && *p!='\r' && *p!='\n') {
 				char b[16];
-				sprintf_s1(b, COUNTOF(b), "&%d;", (unsigned)*p);
+				sprintf(b, "&%d;", (unsigned)*p);
 				for(const char*q=b; *q; )
 					*o++ = *q++;
 			} else

Modified: trunk/reactos/subsys/system/explorer/utility/xmlstorage.h
--- trunk/reactos/subsys/system/explorer/utility/xmlstorage.h	2005-12-01 22:15:57 UTC (rev 19813)
+++ trunk/reactos/subsys/system/explorer/utility/xmlstorage.h	2005-12-01 22:24:00 UTC (rev 19814)
@@ -71,14 +71,6 @@
 namespace XMLStorage {
 
 
- // secure CRT functions
-#ifdef __STDC_WANT_SECURE_LIB__	// VS 2005
-#define sprintf_s1 sprintf_s
-#else
-#define sprintf_s1(b, l, f, p1) sprintf(b, f, p1)
-#endif
-
-
 #ifndef XS_String
 
 #ifdef XS_STRING_UTF8
@@ -282,7 +274,7 @@
 {
 	FileHolder(LPCTSTR path, LPCTSTR mode)
 	{
-#ifdef __STDC_WANT_SECURE_LIB__	// VS2005
+#ifdef __STDC_WANT_SECURE_LIB__	// secure CRT functions using VS 2005
 		if (_tfopen_s(&_pfile, path, mode) != 0)
 			_pfile = NULL;
 #else