]> granicus.if.org Git - taglib/commitdiff
Fix opening of read-only files on Windows
authorLukáš Lalinský <lalinsky@gmail.com>
Tue, 20 Nov 2012 13:15:16 +0000 (14:15 +0100)
committerLukáš Lalinský <lalinsky@gmail.com>
Tue, 20 Nov 2012 13:15:16 +0000 (14:15 +0100)
The CreateFile* functions return INVALID_HANDLE_VALUE on error, not NULL.

http://article.gmane.org/gmane.comp.kde.devel.taglib/2346

taglib/toolkit/tfilestream.cpp

index 16efb579795de96af4374eae29d4f03ec9c31314..35300de6031e6a88b74eb09071e8603c6b9e2527 100644 (file)
@@ -56,10 +56,16 @@ namespace {
   {
     DWORD access = readOnly ? GENERIC_READ : (GENERIC_READ | GENERIC_WRITE);
 
+    HANDLE handle;
     if(wcslen(path) > 0)
-      return CreateFileW(path, access, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
+      handle = CreateFileW(path, access, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
     else
-      return CreateFileA(path, access, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
+      handle = CreateFileA(path, access, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
+
+    if(handle == INVALID_HANDLE_VALUE)
+      handle = NULL;
+
+    return handle;
   }
 
   size_t fread(void *ptr, size_t size, size_t nmemb, HANDLE stream)