From: Dirk Lemstra Date: Sun, 2 Jun 2019 12:57:49 +0000 (+0200) Subject: Added method that can be used to determine if long paths are enable on Windows. X-Git-Tag: 7.0.8-49~15 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=df7045eccfb1327e8a08e56b651364962a64a218;p=imagemagick Added method that can be used to determine if long paths are enable on Windows. --- diff --git a/MagickCore/nt-base-private.h b/MagickCore/nt-base-private.h index 69ad10a11..d2a4a3fd5 100644 --- a/MagickCore/nt-base-private.h +++ b/MagickCore/nt-base-private.h @@ -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 *); diff --git a/MagickCore/nt-base.c b/MagickCore/nt-base.c index ee26926d8..081ed0eb2 100644 --- a/MagickCore/nt-base.c +++ b/MagickCore/nt-base.c @@ -120,7 +120,9 @@ static SemaphoreInfo static WSADATA *wsaData = (WSADATA*) NULL; - +static size_t + long_paths_enabled = 2; + 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, + ®istry_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); +} + +/* +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% % +% % + N T M a p M e m o r y % % % % %