]> granicus.if.org Git - taglib/commitdiff
Fix Visual C++ specific warnings about security
authorTsuda Kageyu <tsuda.kageyu@gmail.com>
Thu, 23 Aug 2012 12:57:12 +0000 (21:57 +0900)
committerTsuda Kageyu <tsuda.kageyu@gmail.com>
Thu, 23 Aug 2012 12:57:12 +0000 (21:57 +0900)
taglib/toolkit/tfile.cpp
taglib/toolkit/tfilestream.cpp
taglib/toolkit/tstring.cpp

index 09b8fdbcf0e7e01a5d68e999214b78eb9ecbfa63..30cc9fbc114a5234aec764c43777a7cab1cc3d33 100644 (file)
@@ -452,12 +452,32 @@ long File::length()
 
 bool File::isReadable(const char *file)
 {
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)  // VC++2005 or later
+
+  return _access_s(file, R_OK) == 0;
+
+#else
+
   return access(file, R_OK) == 0;
+
+#endif
+
 }
 
 bool File::isWritable(const char *file)
 {
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)  // VC++2005 or later
+
+  return _access_s(file, W_OK) == 0;
+
+#else
+
   return access(file, W_OK) == 0;
+
+#endif
+
 }
 
 ////////////////////////////////////////////////////////////////////////////////
index e2aebae391c36bd8ff63c16f100174ea2e284845..46f05a8d1dab38af8a2da9eb2bedcbba00c9ff77 100644 (file)
@@ -87,10 +87,45 @@ FileStream::FileStreamPrivate::FileStreamPrivate(FileName fileName, bool openRea
 {
   // First try with read / write mode, if that fails, fall back to read only.
 
-#ifdef _WIN32
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)  // VC++2005 or later
 
+  errno_t err;
   if(wcslen((const wchar_t *) fileName) > 0) {
+    if(openReadOnly)
+      err = _wfopen_s(&file, name, L"rb");
+    else {
+      err = _wfopen_s(&file, name, L"rb+");
+
+      if(err == 0)
+        readOnly = false;
+      else
+        err = _wfopen_s(&file, name, L"rb");
+    }
+
+    if(err == 0)
+      return;
+  }
+
+  if(openReadOnly)
+    err = fopen_s(&file, name, "rb");
+  else {
+    err = fopen_s(&file, name, "rb+");
+
+    if(err == 0)
+      readOnly = false;
+    else
+      err = fopen_s(&file, name, "rb");
+  }
+
+  if(err != 0) {
+    debug("Could not open file " + String((const char *) name));
+  }
+
+#else   // defined(_MSC_VER) && (_MSC_VER >= 1400)
 
+# ifdef _WIN32
+
+  if(wcslen((const wchar_t *) fileName) > 0) {
     if(openReadOnly)
       file = _wfopen(name, L"rb");
     else {
@@ -104,10 +139,9 @@ FileStream::FileStreamPrivate::FileStreamPrivate(FileName fileName, bool openRea
 
     if(file)
       return;
-
   }
 
-#endif
+# endif // defined(_WIN32)
 
   if(openReadOnly)
     file = fopen(name, "rb");
@@ -120,10 +154,12 @@ FileStream::FileStreamPrivate::FileStreamPrivate(FileName fileName, bool openRea
       file = fopen(name, "rb");
   }
 
-  if(!file)
-  {
+  if(!file) {
     debug("Could not open file " + String((const char *) name));
   }
+
+#endif  // defined(_MSC_VER) && (_MSC_VER >= 1400)
+
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -379,7 +415,17 @@ long FileStream::length()
 
 void FileStream::truncate(long length)
 {
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)  // VC++2005 or later
+
+  ftruncate(_fileno(d->file), length);
+
+#else
+
   ftruncate(fileno(d->file), length);
+
+#endif
+
 }
 
 TagLib::uint FileStream::bufferSize()
index f99d1c371ede5603c47a9e316404bc6abdd5c610..bad397497383bc09c62a74a831d98ee27f78a6e5 100644 (file)
@@ -259,8 +259,17 @@ const char *String::toCString(bool unicode) const
 
   std::string buffer = to8Bit(unicode);
   d->CString = new char[buffer.size() + 1];
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)  // VC++2005 or later
+
+  strcpy_s(d->CString, buffer.size() + 1, buffer.c_str());
+
+#else
+
   strcpy(d->CString, buffer.c_str());
 
+#endif                                          
+
   return d->CString;
 }