| Index: third_party/sqlite/src/src/test_windirent.c
 | 
| diff --git a/third_party/sqlite/src/src/test_windirent.c b/third_party/sqlite/src/src/test_windirent.c
 | 
| index 11d7dc07d02fd50534f51caaf8edd1703212d4a4..ca78d345d946e764a5f11e5652f7b84fb31ec628 100644
 | 
| --- a/third_party/sqlite/src/src/test_windirent.c
 | 
| +++ b/third_party/sqlite/src/src/test_windirent.c
 | 
| @@ -18,6 +18,34 @@
 | 
|  #include "test_windirent.h"
 | 
|  
 | 
|  /*
 | 
| +** Implementation of the POSIX getenv() function using the Win32 API.
 | 
| +** This function is not thread-safe.
 | 
| +*/
 | 
| +const char *windirent_getenv(
 | 
| +  const char *name
 | 
| +){
 | 
| +  static char value[32768]; /* Maximum length, per MSDN */
 | 
| +  DWORD dwSize = sizeof(value) / sizeof(char); /* Size in chars */
 | 
| +  DWORD dwRet; /* Value returned by GetEnvironmentVariableA() */
 | 
| +
 | 
| +  memset(value, 0, sizeof(value));
 | 
| +  dwRet = GetEnvironmentVariableA(name, value, dwSize);
 | 
| +  if( dwRet==0 || dwRet>dwSize ){
 | 
| +    /*
 | 
| +    ** The function call to GetEnvironmentVariableA() failed -OR-
 | 
| +    ** the buffer is not large enough.  Either way, return NULL.
 | 
| +    */
 | 
| +    return 0;
 | 
| +  }else{
 | 
| +    /*
 | 
| +    ** The function call to GetEnvironmentVariableA() succeeded
 | 
| +    ** -AND- the buffer contains the entire value.
 | 
| +    */
 | 
| +    return value;
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +/*
 | 
|  ** Implementation of the POSIX opendir() function using the MSVCRT.
 | 
|  */
 | 
|  LPDIR opendir(
 | 
| @@ -32,9 +60,10 @@ LPDIR opendir(
 | 
|  
 | 
|    /* TODO: Remove this if Unix-style root paths are not used. */
 | 
|    if( sqlite3_stricmp(dirname, "/")==0 ){
 | 
| -    dirname = getenv("SystemDrive");
 | 
| +    dirname = windirent_getenv("SystemDrive");
 | 
|    }
 | 
|  
 | 
| +  memset(&data, 0, sizeof(struct _finddata_t));
 | 
|    _snprintf(data.name, namesize, "%s\\*", dirname);
 | 
|    dirp->d_handle = _findfirst(data.name, &data);
 | 
|  
 | 
| @@ -43,12 +72,18 @@ LPDIR opendir(
 | 
|      return NULL;
 | 
|    }
 | 
|  
 | 
| -  /* TODO: Remove this block to allow hidden and system files. */
 | 
| -  if( data.attrib&_A_HIDDEN || data.attrib&_A_SYSTEM ){
 | 
| +  /* TODO: Remove this block to allow hidden and/or system files. */
 | 
| +  if( is_filtered(data) ){
 | 
| +next:
 | 
| +
 | 
| +    memset(&data, 0, sizeof(struct _finddata_t));
 | 
|      if( _findnext(dirp->d_handle, &data)==-1 ){
 | 
|        closedir(dirp);
 | 
|        return NULL;
 | 
|      }
 | 
| +
 | 
| +    /* TODO: Remove this block to allow hidden and/or system files. */
 | 
| +    if( is_filtered(data) ) goto next;
 | 
|    }
 | 
|  
 | 
|    dirp->d_first.d_attributes = data.attrib;
 | 
| @@ -77,11 +112,11 @@ LPDIRENT readdir(
 | 
|  
 | 
|  next:
 | 
|  
 | 
| +  memset(&data, 0, sizeof(struct _finddata_t));
 | 
|    if( _findnext(dirp->d_handle, &data)==-1 ) return NULL;
 | 
|  
 | 
| -  /* TODO: Remove this block to allow hidden and system files. */
 | 
| -  if( data.attrib&_A_HIDDEN ) goto next;
 | 
| -  if( data.attrib&_A_SYSTEM ) goto next;
 | 
| +  /* TODO: Remove this block to allow hidden and/or system files. */
 | 
| +  if( is_filtered(data) ) goto next;
 | 
|  
 | 
|    dirp->d_next.d_ino++;
 | 
|    dirp->d_next.d_attributes = data.attrib;
 | 
| @@ -118,14 +153,14 @@ INT readdir_r(
 | 
|  
 | 
|  next:
 | 
|  
 | 
| +  memset(&data, 0, sizeof(struct _finddata_t));
 | 
|    if( _findnext(dirp->d_handle, &data)==-1 ){
 | 
|      *result = NULL;
 | 
|      return ENOENT;
 | 
|    }
 | 
|  
 | 
| -  /* TODO: Remove this block to allow hidden and system files. */
 | 
| -  if( data.attrib&_A_HIDDEN ) goto next;
 | 
| -  if( data.attrib&_A_SYSTEM ) goto next;
 | 
| +  /* TODO: Remove this block to allow hidden and/or system files. */
 | 
| +  if( is_filtered(data) ) goto next;
 | 
|  
 | 
|    entry->d_ino = (ino_t)-1; /* not available */
 | 
|    entry->d_attributes = data.attrib;
 | 
| 
 |