/ Hex Artifact Content
Login

Artifact 8f5fada630348558d5745b334702f301da1ffc61:


0000: 2f 2a 0a 2a 2a 20 32 30 31 35 20 4e 6f 76 65 6d  /*.** 2015 Novem
0010: 62 65 72 20 33 30 0a 2a 2a 0a 2a 2a 20 54 68 65  ber 30.**.** The
0020: 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69 6d   author disclaim
0030: 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20 74  s copyright to t
0040: 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65 2e  his source code.
0050: 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a 2a    In place of.**
0060: 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65 2c   a legal notice,
0070: 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73 73   here is a bless
0080: 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61  ing:.**.**    Ma
0090: 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61 6e  y you do good an
00a0: 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20 20  d not evil..**  
00b0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00c0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00d0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00e0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20 20  ive others..**  
00f0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
0100: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0110: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0120: 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a  ou give..**.****
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 69  *****.** This fi
0180: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64 65  le contains code
0190: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 6d 6f   to implement mo
01a0: 73 74 20 6f 66 20 74 68 65 20 6f 70 65 6e 64 69  st of the opendi
01b0: 72 28 29 20 66 61 6d 69 6c 79 20 6f 66 0a 2a 2a  r() family of.**
01c0: 20 50 4f 53 49 58 20 66 75 6e 63 74 69 6f 6e 73   POSIX functions
01d0: 20 6f 6e 20 57 69 6e 33 32 20 75 73 69 6e 67 20   on Win32 using 
01e0: 74 68 65 20 4d 53 56 43 52 54 2e 0a 2a 2f 0a 0a  the MSVCRT..*/..
01f0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49 4e  #if defined(_WIN
0200: 33 32 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f  32) && defined(_
0210: 4d 53 43 5f 56 45 52 29 0a 0a 23 69 6e 63 6c 75  MSC_VER)..#inclu
0220: 64 65 20 22 74 65 73 74 5f 77 69 6e 64 69 72 65  de "test_windire
0230: 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70  nt.h"../*.** Imp
0240: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
0250: 68 65 20 50 4f 53 49 58 20 6f 70 65 6e 64 69 72  he POSIX opendir
0260: 28 29 20 66 75 6e 63 74 69 6f 6e 20 75 73 69 6e  () function usin
0270: 67 20 74 68 65 20 4d 53 56 43 52 54 2e 0a 2a 2f  g the MSVCRT..*/
0280: 0a 4c 50 44 49 52 20 6f 70 65 6e 64 69 72 28 0a  .LPDIR opendir(.
0290: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 64 69    const char *di
02a0: 72 6e 61 6d 65 0a 29 7b 0a 20 20 73 74 72 75 63  rname.){.  struc
02b0: 74 20 5f 66 69 6e 64 64 61 74 61 5f 74 20 64 61  t _finddata_t da
02c0: 74 61 3b 0a 20 20 4c 50 44 49 52 20 64 69 72 70  ta;.  LPDIR dirp
02d0: 20 3d 20 28 4c 50 44 49 52 29 73 71 6c 69 74 65   = (LPDIR)sqlite
02e0: 33 5f 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28  3_malloc(sizeof(
02f0: 44 49 52 29 29 3b 0a 20 20 53 49 5a 45 5f 54 20  DIR));.  SIZE_T 
0300: 6e 61 6d 65 73 69 7a 65 20 3d 20 73 69 7a 65 6f  namesize = sizeo
0310: 66 28 64 61 74 61 2e 6e 61 6d 65 29 20 2f 20 73  f(data.name) / s
0320: 69 7a 65 6f 66 28 64 61 74 61 2e 6e 61 6d 65 5b  izeof(data.name[
0330: 30 5d 29 3b 0a 0a 20 20 69 66 28 20 64 69 72 70  0]);..  if( dirp
0340: 3d 3d 4e 55 4c 4c 20 29 20 72 65 74 75 72 6e 20  ==NULL ) return 
0350: 4e 55 4c 4c 3b 0a 20 20 6d 65 6d 73 65 74 28 64  NULL;.  memset(d
0360: 69 72 70 2c 20 30 2c 20 73 69 7a 65 6f 66 28 44  irp, 0, sizeof(D
0370: 49 52 29 29 3b 0a 0a 20 20 2f 2a 20 54 4f 44 4f  IR));..  /* TODO
0380: 3a 20 52 65 6d 6f 76 65 20 74 68 69 73 20 69 66  : Remove this if
0390: 20 55 6e 69 78 2d 73 74 79 6c 65 20 72 6f 6f 74   Unix-style root
03a0: 20 70 61 74 68 73 20 61 72 65 20 6e 6f 74 20 75   paths are not u
03b0: 73 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 73 71  sed. */.  if( sq
03c0: 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 64 69  lite3_stricmp(di
03d0: 72 6e 61 6d 65 2c 20 22 2f 22 29 3d 3d 30 20 29  rname, "/")==0 )
03e0: 7b 0a 20 20 20 20 64 69 72 6e 61 6d 65 20 3d 20  {.    dirname = 
03f0: 67 65 74 65 6e 76 28 22 53 79 73 74 65 6d 44 72  getenv("SystemDr
0400: 69 76 65 22 29 3b 0a 20 20 7d 0a 0a 20 20 5f 73  ive");.  }..  _s
0410: 6e 70 72 69 6e 74 66 28 64 61 74 61 2e 6e 61 6d  nprintf(data.nam
0420: 65 2c 20 6e 61 6d 65 73 69 7a 65 2c 20 22 25 73  e, namesize, "%s
0430: 5c 5c 2a 22 2c 20 64 69 72 6e 61 6d 65 29 3b 0a  \\*", dirname);.
0440: 20 20 64 69 72 70 2d 3e 64 5f 68 61 6e 64 6c 65    dirp->d_handle
0450: 20 3d 20 5f 66 69 6e 64 66 69 72 73 74 28 64 61   = _findfirst(da
0460: 74 61 2e 6e 61 6d 65 2c 20 26 64 61 74 61 29 3b  ta.name, &data);
0470: 0a 0a 20 20 69 66 28 20 64 69 72 70 2d 3e 64 5f  ..  if( dirp->d_
0480: 68 61 6e 64 6c 65 3d 3d 42 41 44 5f 49 4e 54 50  handle==BAD_INTP
0490: 54 52 5f 54 20 29 7b 0a 20 20 20 20 63 6c 6f 73  TR_T ){.    clos
04a0: 65 64 69 72 28 64 69 72 70 29 3b 0a 20 20 20 20  edir(dirp);.    
04b0: 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 20 20 7d  return NULL;.  }
04c0: 0a 0a 20 20 2f 2a 20 54 4f 44 4f 3a 20 52 65 6d  ..  /* TODO: Rem
04d0: 6f 76 65 20 74 68 69 73 20 62 6c 6f 63 6b 20 74  ove this block t
04e0: 6f 20 61 6c 6c 6f 77 20 68 69 64 64 65 6e 20 61  o allow hidden a
04f0: 6e 64 20 73 79 73 74 65 6d 20 66 69 6c 65 73 2e  nd system files.
0500: 20 2a 2f 0a 20 20 69 66 28 20 64 61 74 61 2e 61   */.  if( data.a
0510: 74 74 72 69 62 26 5f 41 5f 48 49 44 44 45 4e 20  ttrib&_A_HIDDEN 
0520: 7c 7c 20 64 61 74 61 2e 61 74 74 72 69 62 26 5f  || data.attrib&_
0530: 41 5f 53 59 53 54 45 4d 20 29 7b 0a 20 20 20 20  A_SYSTEM ){.    
0540: 69 66 28 20 5f 66 69 6e 64 6e 65 78 74 28 64 69  if( _findnext(di
0550: 72 70 2d 3e 64 5f 68 61 6e 64 6c 65 2c 20 26 64  rp->d_handle, &d
0560: 61 74 61 29 3d 3d 2d 31 20 29 7b 0a 20 20 20 20  ata)==-1 ){.    
0570: 20 20 63 6c 6f 73 65 64 69 72 28 64 69 72 70 29    closedir(dirp)
0580: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 4e  ;.      return N
0590: 55 4c 4c 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  ULL;.    }.  }..
05a0: 20 20 64 69 72 70 2d 3e 64 5f 66 69 72 73 74 2e    dirp->d_first.
05b0: 64 5f 61 74 74 72 69 62 75 74 65 73 20 3d 20 64  d_attributes = d
05c0: 61 74 61 2e 61 74 74 72 69 62 3b 0a 20 20 73 74  ata.attrib;.  st
05d0: 72 6e 63 70 79 28 64 69 72 70 2d 3e 64 5f 66 69  rncpy(dirp->d_fi
05e0: 72 73 74 2e 64 5f 6e 61 6d 65 2c 20 64 61 74 61  rst.d_name, data
05f0: 2e 6e 61 6d 65 2c 20 4e 41 4d 45 5f 4d 41 58 29  .name, NAME_MAX)
0600: 3b 0a 20 20 64 69 72 70 2d 3e 64 5f 66 69 72 73  ;.  dirp->d_firs
0610: 74 2e 64 5f 6e 61 6d 65 5b 4e 41 4d 45 5f 4d 41  t.d_name[NAME_MA
0620: 58 5d 20 3d 20 27 5c 30 27 3b 0a 0a 20 20 72 65  X] = '\0';..  re
0630: 74 75 72 6e 20 64 69 72 70 3b 0a 7d 0a 0a 2f 2a  turn dirp;.}../*
0640: 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69  .** Implementati
0650: 6f 6e 20 6f 66 20 74 68 65 20 50 4f 53 49 58 20  on of the POSIX 
0660: 72 65 61 64 64 69 72 28 29 20 66 75 6e 63 74 69  readdir() functi
0670: 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 4d 53 56  on using the MSV
0680: 43 52 54 2e 0a 2a 2f 0a 4c 50 44 49 52 45 4e 54  CRT..*/.LPDIRENT
0690: 20 72 65 61 64 64 69 72 28 0a 20 20 4c 50 44 49   readdir(.  LPDI
06a0: 52 20 64 69 72 70 0a 29 7b 0a 20 20 73 74 72 75  R dirp.){.  stru
06b0: 63 74 20 5f 66 69 6e 64 64 61 74 61 5f 74 20 64  ct _finddata_t d
06c0: 61 74 61 3b 0a 0a 20 20 69 66 28 20 64 69 72 70  ata;..  if( dirp
06d0: 3d 3d 4e 55 4c 4c 20 29 20 72 65 74 75 72 6e 20  ==NULL ) return 
06e0: 4e 55 4c 4c 3b 0a 0a 20 20 69 66 28 20 64 69 72  NULL;..  if( dir
06f0: 70 2d 3e 64 5f 66 69 72 73 74 2e 64 5f 69 6e 6f  p->d_first.d_ino
0700: 3d 3d 30 20 29 7b 0a 20 20 20 20 64 69 72 70 2d  ==0 ){.    dirp-
0710: 3e 64 5f 66 69 72 73 74 2e 64 5f 69 6e 6f 2b 2b  >d_first.d_ino++
0720: 3b 0a 20 20 20 20 64 69 72 70 2d 3e 64 5f 6e 65  ;.    dirp->d_ne
0730: 78 74 2e 64 5f 69 6e 6f 2b 2b 3b 0a 0a 20 20 20  xt.d_ino++;..   
0740: 20 72 65 74 75 72 6e 20 26 64 69 72 70 2d 3e 64   return &dirp->d
0750: 5f 66 69 72 73 74 3b 0a 20 20 7d 0a 0a 6e 65 78  _first;.  }..nex
0760: 74 3a 0a 0a 20 20 69 66 28 20 5f 66 69 6e 64 6e  t:..  if( _findn
0770: 65 78 74 28 64 69 72 70 2d 3e 64 5f 68 61 6e 64  ext(dirp->d_hand
0780: 6c 65 2c 20 26 64 61 74 61 29 3d 3d 2d 31 20 29  le, &data)==-1 )
0790: 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 0a 20   return NULL;.. 
07a0: 20 2f 2a 20 54 4f 44 4f 3a 20 52 65 6d 6f 76 65   /* TODO: Remove
07b0: 20 74 68 69 73 20 62 6c 6f 63 6b 20 74 6f 20 61   this block to a
07c0: 6c 6c 6f 77 20 68 69 64 64 65 6e 20 61 6e 64 20  llow hidden and 
07d0: 73 79 73 74 65 6d 20 66 69 6c 65 73 2e 20 2a 2f  system files. */
07e0: 0a 20 20 69 66 28 20 64 61 74 61 2e 61 74 74 72  .  if( data.attr
07f0: 69 62 26 5f 41 5f 48 49 44 44 45 4e 20 29 20 67  ib&_A_HIDDEN ) g
0800: 6f 74 6f 20 6e 65 78 74 3b 0a 20 20 69 66 28 20  oto next;.  if( 
0810: 64 61 74 61 2e 61 74 74 72 69 62 26 5f 41 5f 53  data.attrib&_A_S
0820: 59 53 54 45 4d 20 29 20 67 6f 74 6f 20 6e 65 78  YSTEM ) goto nex
0830: 74 3b 0a 0a 20 20 64 69 72 70 2d 3e 64 5f 6e 65  t;..  dirp->d_ne
0840: 78 74 2e 64 5f 69 6e 6f 2b 2b 3b 0a 20 20 64 69  xt.d_ino++;.  di
0850: 72 70 2d 3e 64 5f 6e 65 78 74 2e 64 5f 61 74 74  rp->d_next.d_att
0860: 72 69 62 75 74 65 73 20 3d 20 64 61 74 61 2e 61  ributes = data.a
0870: 74 74 72 69 62 3b 0a 20 20 73 74 72 6e 63 70 79  ttrib;.  strncpy
0880: 28 64 69 72 70 2d 3e 64 5f 6e 65 78 74 2e 64 5f  (dirp->d_next.d_
0890: 6e 61 6d 65 2c 20 64 61 74 61 2e 6e 61 6d 65 2c  name, data.name,
08a0: 20 4e 41 4d 45 5f 4d 41 58 29 3b 0a 20 20 64 69   NAME_MAX);.  di
08b0: 72 70 2d 3e 64 5f 6e 65 78 74 2e 64 5f 6e 61 6d  rp->d_next.d_nam
08c0: 65 5b 4e 41 4d 45 5f 4d 41 58 5d 20 3d 20 27 5c  e[NAME_MAX] = '\
08d0: 30 27 3b 0a 0a 20 20 72 65 74 75 72 6e 20 26 64  0';..  return &d
08e0: 69 72 70 2d 3e 64 5f 6e 65 78 74 3b 0a 7d 0a 0a  irp->d_next;.}..
08f0: 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61  /*.** Implementa
0900: 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 4f 53 49  tion of the POSI
0910: 58 20 72 65 61 64 64 69 72 5f 72 28 29 20 66 75  X readdir_r() fu
0920: 6e 63 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65  nction using the
0930: 20 4d 53 56 43 52 54 2e 0a 2a 2f 0a 49 4e 54 20   MSVCRT..*/.INT 
0940: 72 65 61 64 64 69 72 5f 72 28 0a 20 20 4c 50 44  readdir_r(.  LPD
0950: 49 52 20 64 69 72 70 2c 0a 20 20 4c 50 44 49 52  IR dirp,.  LPDIR
0960: 45 4e 54 20 65 6e 74 72 79 2c 0a 20 20 4c 50 44  ENT entry,.  LPD
0970: 49 52 45 4e 54 20 2a 72 65 73 75 6c 74 0a 29 7b  IRENT *result.){
0980: 0a 20 20 73 74 72 75 63 74 20 5f 66 69 6e 64 64  .  struct _findd
0990: 61 74 61 5f 74 20 64 61 74 61 3b 0a 0a 20 20 69  ata_t data;..  i
09a0: 66 28 20 64 69 72 70 3d 3d 4e 55 4c 4c 20 29 20  f( dirp==NULL ) 
09b0: 72 65 74 75 72 6e 20 45 42 41 44 46 3b 0a 0a 20  return EBADF;.. 
09c0: 20 69 66 28 20 64 69 72 70 2d 3e 64 5f 66 69 72   if( dirp->d_fir
09d0: 73 74 2e 64 5f 69 6e 6f 3d 3d 30 20 29 7b 0a 20  st.d_ino==0 ){. 
09e0: 20 20 20 64 69 72 70 2d 3e 64 5f 66 69 72 73 74     dirp->d_first
09f0: 2e 64 5f 69 6e 6f 2b 2b 3b 0a 20 20 20 20 64 69  .d_ino++;.    di
0a00: 72 70 2d 3e 64 5f 6e 65 78 74 2e 64 5f 69 6e 6f  rp->d_next.d_ino
0a10: 2b 2b 3b 0a 0a 20 20 20 20 65 6e 74 72 79 2d 3e  ++;..    entry->
0a20: 64 5f 69 6e 6f 20 3d 20 64 69 72 70 2d 3e 64 5f  d_ino = dirp->d_
0a30: 66 69 72 73 74 2e 64 5f 69 6e 6f 3b 0a 20 20 20  first.d_ino;.   
0a40: 20 65 6e 74 72 79 2d 3e 64 5f 61 74 74 72 69 62   entry->d_attrib
0a50: 75 74 65 73 20 3d 20 64 69 72 70 2d 3e 64 5f 66  utes = dirp->d_f
0a60: 69 72 73 74 2e 64 5f 61 74 74 72 69 62 75 74 65  irst.d_attribute
0a70: 73 3b 0a 20 20 20 20 73 74 72 6e 63 70 79 28 65  s;.    strncpy(e
0a80: 6e 74 72 79 2d 3e 64 5f 6e 61 6d 65 2c 20 64 69  ntry->d_name, di
0a90: 72 70 2d 3e 64 5f 66 69 72 73 74 2e 64 5f 6e 61  rp->d_first.d_na
0aa0: 6d 65 2c 20 4e 41 4d 45 5f 4d 41 58 29 3b 0a 20  me, NAME_MAX);. 
0ab0: 20 20 20 65 6e 74 72 79 2d 3e 64 5f 6e 61 6d 65     entry->d_name
0ac0: 5b 4e 41 4d 45 5f 4d 41 58 5d 20 3d 20 27 5c 30  [NAME_MAX] = '\0
0ad0: 27 3b 0a 0a 20 20 20 20 2a 72 65 73 75 6c 74 20  ';..    *result 
0ae0: 3d 20 65 6e 74 72 79 3b 0a 20 20 20 20 72 65 74  = entry;.    ret
0af0: 75 72 6e 20 30 3b 0a 20 20 7d 0a 0a 6e 65 78 74  urn 0;.  }..next
0b00: 3a 0a 0a 20 20 69 66 28 20 5f 66 69 6e 64 6e 65  :..  if( _findne
0b10: 78 74 28 64 69 72 70 2d 3e 64 5f 68 61 6e 64 6c  xt(dirp->d_handl
0b20: 65 2c 20 26 64 61 74 61 29 3d 3d 2d 31 20 29 7b  e, &data)==-1 ){
0b30: 0a 20 20 20 20 2a 72 65 73 75 6c 74 20 3d 20 4e  .    *result = N
0b40: 55 4c 4c 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  ULL;.    return 
0b50: 45 4e 4f 45 4e 54 3b 0a 20 20 7d 0a 0a 20 20 2f  ENOENT;.  }..  /
0b60: 2a 20 54 4f 44 4f 3a 20 52 65 6d 6f 76 65 20 74  * TODO: Remove t
0b70: 68 69 73 20 62 6c 6f 63 6b 20 74 6f 20 61 6c 6c  his block to all
0b80: 6f 77 20 68 69 64 64 65 6e 20 61 6e 64 20 73 79  ow hidden and sy
0b90: 73 74 65 6d 20 66 69 6c 65 73 2e 20 2a 2f 0a 20  stem files. */. 
0ba0: 20 69 66 28 20 64 61 74 61 2e 61 74 74 72 69 62   if( data.attrib
0bb0: 26 5f 41 5f 48 49 44 44 45 4e 20 29 20 67 6f 74  &_A_HIDDEN ) got
0bc0: 6f 20 6e 65 78 74 3b 0a 20 20 69 66 28 20 64 61  o next;.  if( da
0bd0: 74 61 2e 61 74 74 72 69 62 26 5f 41 5f 53 59 53  ta.attrib&_A_SYS
0be0: 54 45 4d 20 29 20 67 6f 74 6f 20 6e 65 78 74 3b  TEM ) goto next;
0bf0: 0a 0a 20 20 65 6e 74 72 79 2d 3e 64 5f 69 6e 6f  ..  entry->d_ino
0c00: 20 3d 20 28 69 6e 6f 5f 74 29 2d 31 3b 20 2f 2a   = (ino_t)-1; /*
0c10: 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 2a   not available *
0c20: 2f 0a 20 20 65 6e 74 72 79 2d 3e 64 5f 61 74 74  /.  entry->d_att
0c30: 72 69 62 75 74 65 73 20 3d 20 64 61 74 61 2e 61  ributes = data.a
0c40: 74 74 72 69 62 3b 0a 20 20 73 74 72 6e 63 70 79  ttrib;.  strncpy
0c50: 28 65 6e 74 72 79 2d 3e 64 5f 6e 61 6d 65 2c 20  (entry->d_name, 
0c60: 64 61 74 61 2e 6e 61 6d 65 2c 20 4e 41 4d 45 5f  data.name, NAME_
0c70: 4d 41 58 29 3b 0a 20 20 65 6e 74 72 79 2d 3e 64  MAX);.  entry->d
0c80: 5f 6e 61 6d 65 5b 4e 41 4d 45 5f 4d 41 58 5d 20  _name[NAME_MAX] 
0c90: 3d 20 27 5c 30 27 3b 0a 0a 20 20 2a 72 65 73 75  = '\0';..  *resu
0ca0: 6c 74 20 3d 20 65 6e 74 72 79 3b 0a 20 20 72 65  lt = entry;.  re
0cb0: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
0cc0: 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   Implementation 
0cd0: 6f 66 20 74 68 65 20 50 4f 53 49 58 20 63 6c 6f  of the POSIX clo
0ce0: 73 65 64 69 72 28 29 20 66 75 6e 63 74 69 6f 6e  sedir() function
0cf0: 20 75 73 69 6e 67 20 74 68 65 20 4d 53 56 43 52   using the MSVCR
0d00: 54 2e 0a 2a 2f 0a 49 4e 54 20 63 6c 6f 73 65 64  T..*/.INT closed
0d10: 69 72 28 0a 20 20 4c 50 44 49 52 20 64 69 72 70  ir(.  LPDIR dirp
0d20: 0a 29 7b 0a 20 20 49 4e 54 20 72 65 73 75 6c 74  .){.  INT result
0d30: 20 3d 20 30 3b 0a 0a 20 20 69 66 28 20 64 69 72   = 0;..  if( dir
0d40: 70 3d 3d 4e 55 4c 4c 20 29 20 72 65 74 75 72 6e  p==NULL ) return
0d50: 20 45 49 4e 56 41 4c 3b 0a 0a 20 20 69 66 28 20   EINVAL;..  if( 
0d60: 64 69 72 70 2d 3e 64 5f 68 61 6e 64 6c 65 21 3d  dirp->d_handle!=
0d70: 4e 55 4c 4c 5f 49 4e 54 50 54 52 5f 54 20 26 26  NULL_INTPTR_T &&
0d80: 20 64 69 72 70 2d 3e 64 5f 68 61 6e 64 6c 65 21   dirp->d_handle!
0d90: 3d 42 41 44 5f 49 4e 54 50 54 52 5f 54 20 29 7b  =BAD_INTPTR_T ){
0da0: 0a 20 20 20 20 72 65 73 75 6c 74 20 3d 20 5f 66  .    result = _f
0db0: 69 6e 64 63 6c 6f 73 65 28 64 69 72 70 2d 3e 64  indclose(dirp->d
0dc0: 5f 68 61 6e 64 6c 65 29 3b 0a 20 20 7d 0a 0a 20  _handle);.  }.. 
0dd0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 64 69   sqlite3_free(di
0de0: 72 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 65  rp);.  return re
0df0: 73 75 6c 74 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  sult;.}..#endif 
0e00: 2f 2a 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  /* defined(WIN32
0e10: 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 4d 53  ) && defined(_MS
0e20: 43 5f 56 45 52 29 20 2a 2f 0a                    C_VER) */.