1 // 2 // Copyright (c) 2012 Artyom Beilis (Tonkikh) 3 // Copyright (c) 2020 Alexander Grund 4 // 5 // Distributed under the Boost Software License, Version 1.0. (See 6 // accompanying file LICENSE or copy at 7 // http://www.boost.org/LICENSE_1_0.txt) 8 // 9 10 #define BOOST_NOWIDE_SOURCE 11 12 #ifdef _MSC_VER 13 #define _CRT_SECURE_NO_WARNINGS 14 #elif(defined(__MINGW32__) || defined(__CYGWIN__)) && defined(__STRICT_ANSI__) 15 // Need the _w* functions which are extensions on MinGW/Cygwin 16 #undef __STRICT_ANSI__ 17 #endif 18 19 #include <boost/nowide/cstdio.hpp> 20 #include <boost/nowide/stackstring.hpp> 21 22 namespace boost { 23 namespace nowide { 24 namespace detail { wfopen(const wchar_t * filename,const wchar_t * mode)25 FILE* wfopen(const wchar_t* filename, const wchar_t* mode) 26 { 27 #ifdef BOOST_WINDOWS 28 return ::_wfopen(filename, mode); 29 #else 30 const stackstring name(filename); 31 const short_stackstring smode2(mode); 32 return std::fopen(name.get(), smode2.get()); 33 #endif 34 } 35 } // namespace detail 36 37 #ifdef BOOST_WINDOWS 38 /// 39 /// \brief Same as freopen but file_name and mode are UTF-8 strings 40 /// freopen(const char * file_name,const char * mode,FILE * stream)41 FILE* freopen(const char* file_name, const char* mode, FILE* stream) 42 { 43 const wstackstring wname(file_name); 44 const wshort_stackstring wmode(mode); 45 return _wfreopen(wname.get(), wmode.get(), stream); 46 } 47 /// 48 /// \brief Same as fopen but file_name and mode are UTF-8 strings 49 /// fopen(const char * file_name,const char * mode)50 FILE* fopen(const char* file_name, const char* mode) 51 { 52 const wstackstring wname(file_name); 53 const wshort_stackstring wmode(mode); 54 return _wfopen(wname.get(), wmode.get()); 55 } 56 /// 57 /// \brief Same as rename but old_name and new_name are UTF-8 strings 58 /// rename(const char * old_name,const char * new_name)59 int rename(const char* old_name, const char* new_name) 60 { 61 const wstackstring wold(old_name), wnew(new_name); 62 return _wrename(wold.get(), wnew.get()); 63 } 64 /// 65 /// \brief Same as rename but name is UTF-8 string 66 /// remove(const char * name)67 int remove(const char* name) 68 { 69 const wstackstring wname(name); 70 return _wremove(wname.get()); 71 } 72 #endif 73 } // namespace nowide 74 } // namespace boost 75