]> granicus.if.org Git - imagemagick/commitdiff
Added method that can be used to determine if long paths are enable on Windows.
authorDirk Lemstra <dirk@lemstra.org>
Sun, 2 Jun 2019 12:57:49 +0000 (14:57 +0200)
committerDirk Lemstra <dirk@lemstra.org>
Sun, 2 Jun 2019 13:08:03 +0000 (15:08 +0200)
MagickCore/nt-base-private.h
MagickCore/nt-base.c

index 69ad10a1172af0cad4370911743c0d42f3e9363a..d2a4a3fd517917eddc75721a8d11b77912b68e51 100644 (file)
@@ -147,6 +147,9 @@ extern MagickPrivate MagickBooleanType
   NTGetModulePath(const char *,char *),
   NTReportEvent(const char *,const MagickBooleanType);
 
+extern MagickExport MagickBooleanType
+  NTLongPathsEnabled();
+
 extern MagickPrivate struct dirent
   *NTReadDirectory(DIR *);
 
index ee26926d863fd6acade725097dc73d9f21ecf0fd..081ed0eb200788b88972315e00b76c0436a4daea 100644 (file)
@@ -120,7 +120,9 @@ static SemaphoreInfo
 static WSADATA
   *wsaData = (WSADATA*) NULL;
 
-
+static size_t
+  long_paths_enabled = 2;
+\f
 struct
 {
   const HKEY
@@ -1685,6 +1687,69 @@ MagickPrivate void NTInitializeWinsock(MagickBooleanType use_lock)
 %                                                                             %
 %                                                                             %
 %                                                                             %
+%   N T L o n g P a t h s E n a b l e d                                       %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  NTLongPathsEnabled() returns a boolean indicating whether long paths are
+$  enabled.
+%
+%  The format of the NTLongPathsEnabled method is:
+%
+%      MagickBooleanType NTLongPathsEnabled()
+%
+*/
+MagickExport MagickBooleanType NTLongPathsEnabled()
+{
+  if (long_paths_enabled == 2)
+    {
+      DWORD
+        size,
+        type,
+        value;
+
+      HKEY
+        registry_key;
+
+      LONG
+        status;
+
+      registry_key=(HKEY) INVALID_HANDLE_VALUE;
+      status=RegOpenKeyExA(HKEY_LOCAL_MACHINE,
+        "SYSTEM\\CurrentControlSet\\Control\\FileSystem",0,KEY_READ,
+        &registry_key);
+      if (status != ERROR_SUCCESS)
+      {
+        long_paths_enabled=0;
+        return(MagickFalse);
+      }
+      value=(PVOID) NULL;
+      status=RegQueryValueExA(registry_key,"LongPathsEnabled",0,&type,NULL,
+        NULL);
+      if ((status != ERROR_SUCCESS) || (type != REG_DWORD))
+      {
+        long_paths_enabled=0;
+        return(MagickFalse);
+      }
+      status=RegQueryValueExA(registry_key,"LongPathsEnabled",0,&type,&value,
+        &size);
+      if (status != ERROR_SUCCESS)
+      {
+        long_paths_enabled=0;
+        return(MagickFalse);
+      }
+      long_paths_enabled=(size_t)value;
+    }
+  return(long_paths_enabled == 1 ? MagickTrue : MagickFalse);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 +  N T M a p M e m o r y                                                      %
 %                                                                             %
 %                                                                             %