/ Hex Artifact Content
Login

Artifact 3b152a1b6d426228c1d10d75cdcc7adcc89b8e8c:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 36 0a 2a 2a 0a 2a 2a 20 54 68  mber 16.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you 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 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a 2a  ***********.**.*
0180: 2a 20 54 68 69 73 20 68 65 61 64 65 72 20 66 69  * This header fi
0190: 6c 65 20 28 74 6f 67 65 74 68 65 72 20 77 69 74  le (together wit
01a0: 68 20 69 73 20 63 6f 6d 70 61 6e 69 6f 6e 20 43  h is companion C
01b0: 20 73 6f 75 72 63 65 2d 63 6f 64 65 20 66 69 6c   source-code fil
01c0: 65 0a 2a 2a 20 22 6f 73 2e 63 22 29 20 61 74 74  e.** "os.c") att
01d0: 65 6d 70 74 20 74 6f 20 61 62 73 74 72 61 63 74  empt to abstract
01e0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
01f0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
0200: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 74 68 65 20   so that.** the 
0210: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 77  SQLite library w
0220: 69 6c 6c 20 77 6f 72 6b 20 6f 6e 20 62 6f 74 68  ill work on both
0230: 20 50 4f 53 49 58 20 61 6e 64 20 77 69 6e 64 6f   POSIX and windo
0240: 77 73 20 73 79 73 74 65 6d 73 2e 0a 2a 2a 0a 2a  ws systems..**.*
0250: 2a 20 54 68 69 73 20 68 65 61 64 65 72 20 66 69  * This header fi
0260: 6c 65 20 69 73 20 23 69 6e 63 6c 75 64 65 2d 65  le is #include-e
0270: 64 20 62 79 20 73 71 6c 69 74 65 49 6e 74 2e 68  d by sqliteInt.h
0280: 20 61 6e 64 20 74 68 75 73 20 65 6e 64 73 20 75   and thus ends u
0290: 70 0a 2a 2a 20 62 65 69 6e 67 20 69 6e 63 6c 75  p.** being inclu
02a0: 64 65 64 20 62 79 20 65 76 65 72 79 20 73 6f 75  ded by every sou
02b0: 72 63 65 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 66  rce file..*/.#if
02c0: 6e 64 65 66 20 5f 53 51 4c 49 54 45 5f 4f 53 5f  ndef _SQLITE_OS_
02d0: 48 5f 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49  H_.#define _SQLI
02e0: 54 45 5f 4f 53 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20  TE_OS_H_../*.** 
02f0: 46 69 67 75 72 65 20 6f 75 74 20 69 66 20 77 65  Figure out if we
0300: 20 61 72 65 20 64 65 61 6c 69 6e 67 20 77 69 74   are dealing wit
0310: 68 20 55 6e 69 78 2c 20 57 69 6e 64 6f 77 73 2c  h Unix, Windows,
0320: 20 6f 72 20 73 6f 6d 65 20 6f 74 68 65 72 0a 2a   or some other.*
0330: 2a 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  * operating syst
0340: 65 6d 2e 20 20 41 66 74 65 72 20 74 68 65 20 66  em.  After the f
0350: 6f 6c 6c 6f 77 69 6e 67 20 62 6c 6f 63 6b 20 6f  ollowing block o
0360: 66 20 70 72 65 70 72 6f 63 65 73 73 20 6d 61 63  f preprocess mac
0370: 72 6f 73 2c 0a 2a 2a 20 61 6c 6c 20 6f 66 20 53  ros,.** all of S
0380: 51 4c 49 54 45 5f 4f 53 5f 55 4e 49 58 2c 20 53  QLITE_OS_UNIX, S
0390: 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 2c 20 53 51  QLITE_OS_WIN, SQ
03a0: 4c 49 54 45 5f 4f 53 5f 4f 53 32 2c 20 61 6e 64  LITE_OS_OS2, and
03b0: 20 53 51 4c 49 54 45 5f 4f 53 5f 4f 54 48 45 52   SQLITE_OS_OTHER
03c0: 20 0a 2a 2a 20 77 69 6c 6c 20 64 65 66 69 6e 65   .** will define
03d0: 64 20 74 6f 20 65 69 74 68 65 72 20 31 20 6f 72  d to either 1 or
03e0: 20 30 2e 20 20 4f 6e 65 20 6f 66 20 74 68 65 20   0.  One of the 
03f0: 66 6f 75 72 20 77 69 6c 6c 20 62 65 20 31 2e 20  four will be 1. 
0400: 20 54 68 65 20 6f 74 68 65 72 20 0a 2a 2a 20 74   The other .** t
0410: 68 72 65 65 20 77 69 6c 6c 20 62 65 20 30 2e 0a  hree will be 0..
0420: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
0430: 51 4c 49 54 45 5f 4f 53 5f 4f 54 48 45 52 29 0a  QLITE_OS_OTHER).
0440: 23 20 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 4f  # if SQLITE_OS_O
0450: 54 48 45 52 3d 3d 31 0a 23 20 20 20 75 6e 64 65  THER==1.#   unde
0460: 66 20 53 51 4c 49 54 45 5f 4f 53 5f 55 4e 49 58  f SQLITE_OS_UNIX
0470: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
0480: 54 45 5f 4f 53 5f 55 4e 49 58 20 30 0a 23 20 20  TE_OS_UNIX 0.#  
0490: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 53   undef SQLITE_OS
04a0: 5f 57 49 4e 0a 23 20 20 20 64 65 66 69 6e 65 20  _WIN.#   define 
04b0: 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 20 30 0a  SQLITE_OS_WIN 0.
04c0: 23 20 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45  #   undef SQLITE
04d0: 5f 4f 53 5f 4f 53 32 0a 23 20 20 20 64 65 66 69  _OS_OS2.#   defi
04e0: 6e 65 20 53 51 4c 49 54 45 5f 4f 53 5f 4f 53 32  ne SQLITE_OS_OS2
04f0: 20 30 0a 23 20 65 6c 73 65 0a 23 20 20 20 75 6e   0.# else.#   un
0500: 64 65 66 20 53 51 4c 49 54 45 5f 4f 53 5f 4f 54  def SQLITE_OS_OT
0510: 48 45 52 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  HER.# endif.#end
0520: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
0530: 53 51 4c 49 54 45 5f 4f 53 5f 55 4e 49 58 29 20  SQLITE_OS_UNIX) 
0540: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
0550: 54 45 5f 4f 53 5f 4f 54 48 45 52 29 0a 23 20 64  TE_OS_OTHER).# d
0560: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 53 5f  efine SQLITE_OS_
0570: 4f 54 48 45 52 20 30 0a 23 20 69 66 6e 64 65 66  OTHER 0.# ifndef
0580: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 23   SQLITE_OS_WIN.#
0590: 20 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f 57     if defined(_W
05a0: 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64  IN32) || defined
05b0: 28 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e  (WIN32) || defin
05c0: 65 64 28 5f 5f 43 59 47 57 49 4e 5f 5f 29 20 7c  ed(__CYGWIN__) |
05d0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e 47  | defined(__MING
05e0: 57 33 32 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  W32__) || define
05f0: 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29 0a  d(__BORLANDC__).
0600: 23 20 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  #     define SQL
0610: 49 54 45 5f 4f 53 5f 57 49 4e 20 31 0a 23 20 20  ITE_OS_WIN 1.#  
0620: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
0630: 5f 4f 53 5f 55 4e 49 58 20 30 0a 23 20 20 20 20  _OS_UNIX 0.#    
0640: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
0650: 53 5f 4f 53 32 20 30 0a 23 20 20 20 65 6c 69 66  S_OS2 0.#   elif
0660: 20 64 65 66 69 6e 65 64 28 5f 5f 45 4d 58 5f 5f   defined(__EMX__
0670: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4f 53  ) || defined(_OS
0680: 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 4f 53  2) || defined(OS
0690: 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4f  2) || defined(_O
06a0: 53 32 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  S2_) || defined(
06b0: 5f 5f 4f 53 32 5f 5f 29 0a 23 20 20 20 20 20 64  __OS2__).#     d
06c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 53 5f  efine SQLITE_OS_
06d0: 57 49 4e 20 30 0a 23 20 20 20 20 20 64 65 66 69  WIN 0.#     defi
06e0: 6e 65 20 53 51 4c 49 54 45 5f 4f 53 5f 55 4e 49  ne SQLITE_OS_UNI
06f0: 58 20 30 0a 23 20 20 20 20 20 64 65 66 69 6e 65  X 0.#     define
0700: 20 53 51 4c 49 54 45 5f 4f 53 5f 4f 53 32 20 31   SQLITE_OS_OS2 1
0710: 0a 23 20 20 20 65 6c 73 65 0a 23 20 20 20 20 20  .#   else.#     
0720: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 53  define SQLITE_OS
0730: 5f 57 49 4e 20 30 0a 23 20 20 20 20 20 64 65 66  _WIN 0.#     def
0740: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 53 5f 55 4e  ine SQLITE_OS_UN
0750: 49 58 20 31 0a 23 20 20 20 20 20 64 65 66 69 6e  IX 1.#     defin
0760: 65 20 53 51 4c 49 54 45 5f 4f 53 5f 4f 53 32 20  e SQLITE_OS_OS2 
0770: 30 0a 23 20 20 65 6e 64 69 66 0a 23 20 65 6c 73  0.#  endif.# els
0780: 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  e.#  define SQLI
0790: 54 45 5f 4f 53 5f 55 4e 49 58 20 30 0a 23 20 20  TE_OS_UNIX 0.#  
07a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 53  define SQLITE_OS
07b0: 5f 4f 53 32 20 30 0a 23 20 65 6e 64 69 66 0a 23  _OS2 0.# endif.#
07c0: 65 6c 73 65 0a 23 20 69 66 6e 64 65 66 20 53 51  else.# ifndef SQ
07d0: 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 23 20 20 64  LITE_OS_WIN.#  d
07e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 53 5f  efine SQLITE_OS_
07f0: 57 49 4e 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  WIN 0.# endif.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ndif../*.** Dete
0810: 72 6d 69 6e 65 20 69 66 20 77 65 20 61 72 65 20  rmine if we are 
0820: 64 65 61 6c 69 6e 67 20 77 69 74 68 20 57 69 6e  dealing with Win
0830: 64 6f 77 73 20 4e 54 2e 0a 2a 2a 0a 2a 2a 20 57  dows NT..**.** W
0840: 65 20 6f 75 67 68 74 20 74 6f 20 62 65 20 61 62  e ought to be ab
0850: 6c 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  le to determine 
0860: 69 66 20 77 65 20 61 72 65 20 63 6f 6d 70 69 6c  if we are compil
0870: 69 6e 67 20 66 6f 72 20 77 69 6e 39 38 20 6f 72  ing for win98 or
0880: 20 77 69 6e 4e 54 0a 2a 2a 20 75 73 69 6e 67 20   winNT.** using 
0890: 74 68 65 20 5f 57 49 4e 33 32 5f 57 49 4e 4e 54  the _WIN32_WINNT
08a0: 20 6d 61 63 72 6f 20 61 73 20 66 6f 6c 6c 6f 77   macro as follow
08b0: 73 3a 0a 2a 2a 0a 2a 2a 20 23 69 66 20 64 65 66  s:.**.** #if def
08c0: 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 49 4e 4e  ined(_WIN32_WINN
08d0: 54 29 0a 2a 2a 20 23 20 64 65 66 69 6e 65 20 53  T).** # define S
08e0: 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 4e 54 20 31  QLITE_OS_WINNT 1
08f0: 0a 2a 2a 20 23 65 6c 73 65 0a 2a 2a 20 23 20 64  .** #else.** # d
0900: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 53 5f  efine SQLITE_OS_
0910: 57 49 4e 4e 54 20 30 0a 2a 2a 20 23 65 6e 64 69  WINNT 0.** #endi
0920: 66 0a 2a 2a 0a 2a 2a 20 48 6f 77 65 76 65 72 2c  f.**.** However,
0930: 20 76 73 32 30 30 35 20 64 6f 65 73 20 6e 6f 74   vs2005 does not
0940: 20 73 65 74 20 5f 57 49 4e 33 32 5f 57 49 4e 4e   set _WIN32_WINN
0950: 54 20 62 79 20 64 65 66 61 75 6c 74 2c 20 61 73  T by default, as
0960: 20 69 74 20 6f 75 67 68 74 20 74 6f 2c 0a 2a 2a   it ought to,.**
0970: 20 73 6f 20 74 68 65 20 61 62 6f 76 65 20 74 65   so the above te
0980: 73 74 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b  st does not work
0990: 2e 20 20 57 65 27 6c 6c 20 6a 75 73 74 20 61 73  .  We'll just as
09a0: 73 75 6d 65 20 74 68 61 74 20 65 76 65 72 79 74  sume that everyt
09b0: 68 69 6e 67 20 69 73 0a 2a 2a 20 77 69 6e 4e 54  hing is.** winNT
09c0: 20 75 6e 6c 65 73 73 20 74 68 65 20 70 72 6f 67   unless the prog
09d0: 72 61 6d 6d 65 72 20 65 78 70 6c 69 63 69 74 6c  rammer explicitl
09e0: 79 20 73 61 79 73 20 6f 74 68 65 72 77 69 73 65  y says otherwise
09f0: 20 62 79 20 73 65 74 74 69 6e 67 0a 2a 2a 20 53   by setting.** S
0a00: 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 4e 54 20 74  QLITE_OS_WINNT t
0a10: 6f 20 30 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  o 0..*/.#if SQLI
0a20: 54 45 5f 4f 53 5f 57 49 4e 20 26 26 20 21 64 65  TE_OS_WIN && !de
0a30: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 53 5f  fined(SQLITE_OS_
0a40: 57 49 4e 4e 54 29 0a 23 20 64 65 66 69 6e 65 20  WINNT).# define 
0a50: 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 4e 54 20  SQLITE_OS_WINNT 
0a60: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
0a70: 44 65 74 65 72 6d 69 6e 65 20 69 66 20 77 65 20  Determine if we 
0a80: 61 72 65 20 64 65 61 6c 69 6e 67 20 77 69 74 68  are dealing with
0a90: 20 57 69 6e 64 6f 77 73 43 45 20 2d 20 77 68 69   WindowsCE - whi
0aa0: 63 68 20 68 61 73 20 61 20 6d 75 63 68 0a 2a 2a  ch has a much.**
0ab0: 20 72 65 64 75 63 65 64 20 41 50 49 2e 0a 2a 2f   reduced API..*/
0ac0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49  .#if defined(_WI
0ad0: 4e 33 32 5f 57 43 45 29 0a 23 20 64 65 66 69 6e  N32_WCE).# defin
0ae0: 65 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 43  e SQLITE_OS_WINC
0af0: 45 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  E 1.#else.# defi
0b00: 6e 65 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  ne SQLITE_OS_WIN
0b10: 43 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  CE 0.#endif../* 
0b20: 49 66 20 74 68 65 20 53 45 54 5f 46 55 4c 4c 53  If the SET_FULLS
0b30: 59 4e 43 20 6d 61 63 72 6f 20 69 73 20 6e 6f 74  YNC macro is not
0b40: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2c 20   defined above, 
0b50: 74 68 65 6e 20 6d 61 6b 65 20 69 74 0a 2a 2a 20  then make it.** 
0b60: 61 20 6e 6f 2d 6f 70 0a 2a 2f 0a 23 69 66 6e 64  a no-op.*/.#ifnd
0b70: 65 66 20 53 45 54 5f 46 55 4c 4c 53 59 4e 43 0a  ef SET_FULLSYNC.
0b80: 23 20 64 65 66 69 6e 65 20 53 45 54 5f 46 55 4c  # define SET_FUL
0b90: 4c 53 59 4e 43 28 78 2c 79 29 0a 23 65 6e 64 69  LSYNC(x,y).#endi
0ba0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
0bb0: 61 75 6c 74 20 73 69 7a 65 20 6f 66 20 61 20 64  ault size of a d
0bc0: 69 73 6b 20 73 65 63 74 6f 72 0a 2a 2f 0a 23 69  isk sector.*/.#i
0bd0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
0be0: 41 55 4c 54 5f 53 45 43 54 4f 52 5f 53 49 5a 45  AULT_SECTOR_SIZE
0bf0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
0c00: 5f 44 45 46 41 55 4c 54 5f 53 45 43 54 4f 52 5f  _DEFAULT_SECTOR_
0c10: 53 49 5a 45 20 34 30 39 36 0a 23 65 6e 64 69 66  SIZE 4096.#endif
0c20: 0a 0a 2f 2a 0a 2a 2a 20 54 65 6d 70 6f 72 61 72  ../*.** Temporar
0c30: 79 20 66 69 6c 65 73 20 61 72 65 20 6e 61 6d 65  y files are name
0c40: 64 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  d starting with 
0c50: 74 68 69 73 20 70 72 65 66 69 78 20 66 6f 6c 6c  this prefix foll
0c60: 6f 77 65 64 20 62 79 20 31 36 20 72 61 6e 64 6f  owed by 16 rando
0c70: 6d 0a 2a 2a 20 61 6c 70 68 61 6e 75 6d 65 72 69  m.** alphanumeri
0c80: 63 20 63 68 61 72 61 63 74 65 72 73 2c 20 61 6e  c characters, an
0c90: 64 20 6e 6f 20 66 69 6c 65 20 65 78 74 65 6e 73  d no file extens
0ca0: 69 6f 6e 2e 20 54 68 65 79 20 61 72 65 20 73 74  ion. They are st
0cb0: 6f 72 65 64 20 69 6e 20 74 68 65 0a 2a 2a 20 4f  ored in the.** O
0cc0: 53 27 73 20 73 74 61 6e 64 61 72 64 20 74 65 6d  S's standard tem
0cd0: 70 6f 72 61 72 79 20 66 69 6c 65 20 64 69 72 65  porary file dire
0ce0: 63 74 6f 72 79 2c 20 61 6e 64 20 61 72 65 20 64  ctory, and are d
0cf0: 65 6c 65 74 65 64 20 70 72 69 6f 72 20 74 6f 20  eleted prior to 
0d00: 65 78 69 74 2e 0a 2a 2a 20 49 66 20 73 71 6c 69  exit..** If sqli
0d10: 74 65 20 69 73 20 62 65 69 6e 67 20 65 6d 62 65  te is being embe
0d20: 64 64 65 64 20 69 6e 20 61 6e 6f 74 68 65 72 20  dded in another 
0d30: 70 72 6f 67 72 61 6d 2c 20 79 6f 75 20 6d 61 79  program, you may
0d40: 20 77 69 73 68 20 74 6f 20 63 68 61 6e 67 65 20   wish to change 
0d50: 74 68 65 0a 2a 2a 20 70 72 65 66 69 78 20 74 6f  the.** prefix to
0d60: 20 72 65 66 6c 65 63 74 20 79 6f 75 72 20 70 72   reflect your pr
0d70: 6f 67 72 61 6d 27 73 20 6e 61 6d 65 2c 20 73 6f  ogram's name, so
0d80: 20 74 68 61 74 20 69 66 20 79 6f 75 72 20 70 72   that if your pr
0d90: 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a 20 70  ogram exits.** p
0da0: 72 65 6d 61 74 75 72 65 6c 79 2c 20 6f 6c 64 20  rematurely, old 
0db0: 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 20  temporary files 
0dc0: 63 61 6e 20 62 65 20 65 61 73 69 6c 79 20 69 64  can be easily id
0dd0: 65 6e 74 69 66 69 65 64 2e 20 54 68 69 73 20 63  entified. This c
0de0: 61 6e 20 62 65 20 64 6f 6e 65 0a 2a 2a 20 75 73  an be done.** us
0df0: 69 6e 67 20 2d 44 53 51 4c 49 54 45 5f 54 45 4d  ing -DSQLITE_TEM
0e00: 50 5f 46 49 4c 45 5f 50 52 45 46 49 58 3d 6d 79  P_FILE_PREFIX=my
0e10: 70 72 65 66 69 78 5f 20 6f 6e 20 74 68 65 20 63  prefix_ on the c
0e20: 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20  ompiler command 
0e30: 6c 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 32 30 30 36  line..**.** 2006
0e40: 2d 31 30 2d 33 31 3a 20 20 54 68 65 20 64 65 66  -10-31:  The def
0e50: 61 75 6c 74 20 70 72 65 66 69 78 20 75 73 65 64  ault prefix used
0e60: 20 74 6f 20 62 65 20 22 73 71 6c 69 74 65 5f 22   to be "sqlite_"
0e70: 2e 20 20 42 75 74 20 74 68 65 6e 0a 2a 2a 20 4d  .  But then.** M
0e80: 63 61 66 65 65 20 73 74 61 72 74 65 64 20 75 73  cafee started us
0e90: 69 6e 67 20 53 51 4c 69 74 65 20 69 6e 20 74 68  ing SQLite in th
0ea0: 65 69 72 20 61 6e 74 69 2d 76 69 72 75 73 20 70  eir anti-virus p
0eb0: 72 6f 64 75 63 74 20 61 6e 64 20 69 74 0a 2a 2a  roduct and it.**
0ec0: 20 73 74 61 72 74 65 64 20 70 75 74 74 69 6e 67   started putting
0ed0: 20 66 69 6c 65 73 20 77 69 74 68 20 74 68 65 20   files with the 
0ee0: 22 73 71 6c 69 74 65 22 20 6e 61 6d 65 20 69 6e  "sqlite" name in
0ef0: 20 74 68 65 20 63 3a 2f 74 65 6d 70 20 66 6f 6c   the c:/temp fol
0f00: 64 65 72 2e 0a 2a 2a 20 54 68 69 73 20 61 6e 6e  der..** This ann
0f10: 6f 79 65 64 20 6d 61 6e 79 20 77 69 6e 64 6f 77  oyed many window
0f20: 73 20 75 73 65 72 73 2e 20 20 54 68 6f 73 65 20  s users.  Those 
0f30: 75 73 65 72 73 20 77 6f 75 6c 64 20 74 68 65 6e  users would then
0f40: 20 64 6f 20 61 20 0a 2a 2a 20 47 6f 6f 67 6c 65   do a .** Google
0f50: 20 73 65 61 72 63 68 20 66 6f 72 20 22 73 71 6c   search for "sql
0f60: 69 74 65 22 2c 20 66 69 6e 64 20 74 68 65 20 74  ite", find the t
0f70: 65 6c 65 70 68 6f 6e 65 20 6e 75 6d 62 65 72 73  elephone numbers
0f80: 20 6f 66 20 74 68 65 0a 2a 2a 20 64 65 76 65 6c   of the.** devel
0f90: 6f 70 65 72 73 20 61 6e 64 20 63 61 6c 6c 20 74  opers and call t
0fa0: 6f 20 77 61 6b 65 20 74 68 65 6d 20 75 70 20 61  o wake them up a
0fb0: 74 20 6e 69 67 68 74 20 61 6e 64 20 63 6f 6d 70  t night and comp
0fc0: 6c 61 69 6e 2e 0a 2a 2a 20 46 6f 72 20 74 68 69  lain..** For thi
0fd0: 73 20 72 65 61 73 6f 6e 2c 20 74 68 65 20 64 65  s reason, the de
0fe0: 66 61 75 6c 74 20 6e 61 6d 65 20 70 72 65 66 69  fault name prefi
0ff0: 78 20 69 73 20 63 68 61 6e 67 65 64 20 74 6f 20  x is changed to 
1000: 62 65 20 22 73 71 6c 69 74 65 22 20 0a 2a 2a 20  be "sqlite" .** 
1010: 73 70 65 6c 6c 65 64 20 62 61 63 6b 77 61 72 64  spelled backward
1020: 73 2e 20 20 53 6f 20 74 68 65 20 74 65 6d 70 20  s.  So the temp 
1030: 66 69 6c 65 73 20 61 72 65 20 73 74 69 6c 6c 20  files are still 
1040: 69 64 65 6e 74 69 66 69 65 64 2c 20 62 75 74 0a  identified, but.
1050: 2a 2a 20 61 6e 79 62 6f 64 79 20 73 6d 61 72 74  ** anybody smart
1060: 20 65 6e 6f 75 67 68 20 74 6f 20 66 69 67 75 72   enough to figur
1070: 65 20 6f 75 74 20 74 68 65 20 63 6f 64 65 20 69  e out the code i
1080: 73 20 61 6c 73 6f 20 6c 69 6b 65 6c 79 20 73 6d  s also likely sm
1090: 61 72 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 74 6f  art.** enough to
10a0: 20 6b 6e 6f 77 20 74 68 61 74 20 63 61 6c 6c 69   know that calli
10b0: 6e 67 20 74 68 65 20 64 65 76 65 6c 6f 70 65 72  ng the developer
10c0: 20 77 69 6c 6c 20 6e 6f 74 20 68 65 6c 70 20 67   will not help g
10d0: 65 74 20 72 69 64 0a 2a 2a 20 6f 66 20 74 68 65  et rid.** of the
10e0: 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65   file..*/.#ifnde
10f0: 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 46 49  f SQLITE_TEMP_FI
1100: 4c 45 5f 50 52 45 46 49 58 0a 23 20 64 65 66 69  LE_PREFIX.# defi
1110: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 46  ne SQLITE_TEMP_F
1120: 49 4c 45 5f 50 52 45 46 49 58 20 22 65 74 69 6c  ILE_PREFIX "etil
1130: 71 73 5f 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  qs_".#endif../*.
1140: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1150: 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20 70   values may be p
1160: 61 73 73 65 64 20 61 73 20 74 68 65 20 73 65 63  assed as the sec
1170: 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a  ond argument to.
1180: 2a 2a 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b  ** sqlite3OsLock
1190: 28 29 2e 20 54 68 65 20 76 61 72 69 6f 75 73 20  (). The various 
11a0: 6c 6f 63 6b 73 20 65 78 68 69 62 69 74 20 74 68  locks exhibit th
11b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 6d 61  e following sema
11c0: 6e 74 69 63 73 3a 0a 2a 2a 0a 2a 2a 20 53 48 41  ntics:.**.** SHA
11d0: 52 45 44 3a 20 20 20 20 41 6e 79 20 6e 75 6d 62  RED:    Any numb
11e0: 65 72 20 6f 66 20 70 72 6f 63 65 73 73 65 73 20  er of processes 
11f0: 6d 61 79 20 68 6f 6c 64 20 61 20 53 48 41 52 45  may hold a SHARE
1200: 44 20 6c 6f 63 6b 20 73 69 6d 75 6c 74 61 6e 65  D lock simultane
1210: 6f 75 73 6c 79 2e 0a 2a 2a 20 52 45 53 45 52 56  ously..** RESERV
1220: 45 44 3a 20 20 41 20 73 69 6e 67 6c 65 20 70 72  ED:  A single pr
1230: 6f 63 65 73 73 20 6d 61 79 20 68 6f 6c 64 20 61  ocess may hold a
1240: 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 6f   RESERVED lock o
1250: 6e 20 61 20 66 69 6c 65 20 61 74 0a 2a 2a 20 20  n a file at.**  
1260: 20 20 20 20 20 20 20 20 20 20 61 6e 79 20 74 69            any ti
1270: 6d 65 2e 20 4f 74 68 65 72 20 70 72 6f 63 65 73  me. Other proces
1280: 73 65 73 20 6d 61 79 20 68 6f 6c 64 20 61 6e 64  ses may hold and
1290: 20 6f 62 74 61 69 6e 20 6e 65 77 20 53 48 41 52   obtain new SHAR
12a0: 45 44 20 6c 6f 63 6b 73 2e 0a 2a 2a 20 50 45 4e  ED locks..** PEN
12b0: 44 49 4e 47 3a 20 20 20 41 20 73 69 6e 67 6c 65  DING:   A single
12c0: 20 70 72 6f 63 65 73 73 20 6d 61 79 20 68 6f 6c   process may hol
12d0: 64 20 61 20 50 45 4e 44 49 4e 47 20 6c 6f 63 6b  d a PENDING lock
12e0: 20 6f 6e 20 61 20 66 69 6c 65 20 61 74 0a 2a 2a   on a file at.**
12f0: 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 79 20              any 
1300: 6f 6e 65 20 74 69 6d 65 2e 20 45 78 69 73 74 69  one time. Existi
1310: 6e 67 20 53 48 41 52 45 44 20 6c 6f 63 6b 73 20  ng SHARED locks 
1320: 6d 61 79 20 70 65 72 73 69 73 74 2c 20 62 75 74  may persist, but
1330: 20 6e 6f 20 6e 65 77 0a 2a 2a 20 20 20 20 20 20   no new.**      
1340: 20 20 20 20 20 20 53 48 41 52 45 44 20 6c 6f 63        SHARED loc
1350: 6b 73 20 6d 61 79 20 62 65 20 6f 62 74 61 69 6e  ks may be obtain
1360: 65 64 20 62 79 20 6f 74 68 65 72 20 70 72 6f 63  ed by other proc
1370: 65 73 73 65 73 2e 0a 2a 2a 20 45 58 43 4c 55 53  esses..** EXCLUS
1380: 49 56 45 3a 20 41 6e 20 45 58 43 4c 55 53 49 56  IVE: An EXCLUSIV
1390: 45 20 6c 6f 63 6b 20 70 72 65 63 6c 75 64 65 73  E lock precludes
13a0: 20 61 6c 6c 20 6f 74 68 65 72 20 6c 6f 63 6b 73   all other locks
13b0: 2e 0a 2a 2a 0a 2a 2a 20 50 45 4e 44 49 4e 47 5f  ..**.** PENDING_
13c0: 4c 4f 43 4b 20 6d 61 79 20 6e 6f 74 20 62 65 20  LOCK may not be 
13d0: 70 61 73 73 65 64 20 64 69 72 65 63 74 6c 79 20  passed directly 
13e0: 74 6f 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b  to sqlite3OsLock
13f0: 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 61 0a 2a  (). Instead, a.*
1400: 2a 20 70 72 6f 63 65 73 73 20 74 68 61 74 20 72  * process that r
1410: 65 71 75 65 73 74 73 20 61 6e 20 45 58 43 4c 55  equests an EXCLU
1420: 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 61 63  SIVE lock may ac
1430: 74 75 61 6c 6c 79 20 6f 62 74 61 69 6e 20 61 20  tually obtain a 
1440: 50 45 4e 44 49 4e 47 0a 2a 2a 20 6c 6f 63 6b 2e  PENDING.** lock.
1450: 20 54 68 69 73 20 63 61 6e 20 62 65 20 75 70 67   This can be upg
1460: 72 61 64 65 64 20 74 6f 20 61 6e 20 45 58 43 4c  raded to an EXCL
1470: 55 53 49 56 45 20 6c 6f 63 6b 20 62 79 20 61 20  USIVE lock by a 
1480: 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 20  subsequent call 
1490: 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 4f 73 4c  to.** sqlite3OsL
14a0: 6f 63 6b 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ock()..*/.#defin
14b0: 65 20 4e 4f 5f 4c 4f 43 4b 20 20 20 20 20 20 20  e NO_LOCK       
14c0: 20 20 30 0a 23 64 65 66 69 6e 65 20 53 48 41 52    0.#define SHAR
14d0: 45 44 5f 4c 4f 43 4b 20 20 20 20 20 31 0a 23 64  ED_LOCK     1.#d
14e0: 65 66 69 6e 65 20 52 45 53 45 52 56 45 44 5f 4c  efine RESERVED_L
14f0: 4f 43 4b 20 20 20 32 0a 23 64 65 66 69 6e 65 20  OCK   2.#define 
1500: 50 45 4e 44 49 4e 47 5f 4c 4f 43 4b 20 20 20 20  PENDING_LOCK    
1510: 33 0a 23 64 65 66 69 6e 65 20 45 58 43 4c 55 53  3.#define EXCLUS
1520: 49 56 45 5f 4c 4f 43 4b 20 20 34 0a 0a 2f 2a 0a  IVE_LOCK  4../*.
1530: 2a 2a 20 46 69 6c 65 20 4c 6f 63 6b 69 6e 67 20  ** File Locking 
1540: 4e 6f 74 65 73 3a 20 20 28 4d 6f 73 74 6c 79 20  Notes:  (Mostly 
1550: 61 62 6f 75 74 20 77 69 6e 64 6f 77 73 20 62 75  about windows bu
1560: 74 20 61 6c 73 6f 20 73 6f 6d 65 20 69 6e 66 6f  t also some info
1570: 20 66 6f 72 20 55 6e 69 78 29 0a 2a 2a 0a 2a 2a   for Unix).**.**
1580: 20 57 65 20 63 61 6e 6e 6f 74 20 75 73 65 20 4c   We cannot use L
1590: 6f 63 6b 46 69 6c 65 45 78 28 29 20 6f 72 20 55  ockFileEx() or U
15a0: 6e 6c 6f 63 6b 46 69 6c 65 45 78 28 29 20 6f 6e  nlockFileEx() on
15b0: 20 57 69 6e 39 35 2f 39 38 2f 4d 45 20 62 65 63   Win95/98/ME bec
15c0: 61 75 73 65 0a 2a 2a 20 74 68 6f 73 65 20 66 75  ause.** those fu
15d0: 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20  nctions are not 
15e0: 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 6f 20 77  available.  So w
15f0: 65 20 75 73 65 20 6f 6e 6c 79 20 4c 6f 63 6b 46  e use only LockF
1600: 69 6c 65 28 29 20 61 6e 64 0a 2a 2a 20 55 6e 6c  ile() and.** Unl
1610: 6f 63 6b 46 69 6c 65 28 29 2e 0a 2a 2a 0a 2a 2a  ockFile()..**.**
1620: 20 4c 6f 63 6b 46 69 6c 65 28 29 20 70 72 65 76   LockFile() prev
1630: 65 6e 74 73 20 6e 6f 74 20 6a 75 73 74 20 77 72  ents not just wr
1640: 69 74 69 6e 67 20 62 75 74 20 61 6c 73 6f 20 72  iting but also r
1650: 65 61 64 69 6e 67 20 62 79 20 6f 74 68 65 72 20  eading by other 
1660: 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2a 20 41 20  processes..** A 
1670: 53 48 41 52 45 44 5f 4c 4f 43 4b 20 69 73 20 6f  SHARED_LOCK is o
1680: 62 74 61 69 6e 65 64 20 62 79 20 6c 6f 63 6b 69  btained by locki
1690: 6e 67 20 61 20 73 69 6e 67 6c 65 20 72 61 6e 64  ng a single rand
16a0: 6f 6d 6c 79 2d 63 68 6f 73 65 6e 20 0a 2a 2a 20  omly-chosen .** 
16b0: 62 79 74 65 20 6f 75 74 20 6f 66 20 61 20 73 70  byte out of a sp
16c0: 65 63 69 66 69 63 20 72 61 6e 67 65 20 6f 66 20  ecific range of 
16d0: 62 79 74 65 73 2e 20 54 68 65 20 6c 6f 63 6b 20  bytes. The lock 
16e0: 62 79 74 65 20 69 73 20 6f 62 74 61 69 6e 65 64  byte is obtained
16f0: 20 61 74 20 0a 2a 2a 20 72 61 6e 64 6f 6d 20 73   at .** random s
1700: 6f 20 74 77 6f 20 73 65 70 61 72 61 74 65 20 72  o two separate r
1710: 65 61 64 65 72 73 20 63 61 6e 20 70 72 6f 62 61  eaders can proba
1720: 62 6c 79 20 61 63 63 65 73 73 20 74 68 65 20 66  bly access the f
1730: 69 6c 65 20 61 74 20 74 68 65 20 0a 2a 2a 20 73  ile at the .** s
1740: 61 6d 65 20 74 69 6d 65 2c 20 75 6e 6c 65 73 73  ame time, unless
1750: 20 74 68 65 79 20 61 72 65 20 75 6e 6c 75 63 6b   they are unluck
1760: 79 20 61 6e 64 20 63 68 6f 6f 73 65 20 74 68 65  y and choose the
1770: 20 73 61 6d 65 20 6c 6f 63 6b 20 62 79 74 65 2e   same lock byte.
1780: 0a 2a 2a 20 41 6e 20 45 58 43 4c 55 53 49 56 45  .** An EXCLUSIVE
1790: 5f 4c 4f 43 4b 20 69 73 20 6f 62 74 61 69 6e 65  _LOCK is obtaine
17a0: 64 20 62 79 20 6c 6f 63 6b 69 6e 67 20 61 6c 6c  d by locking all
17b0: 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 61   bytes in the ra
17c0: 6e 67 65 2e 0a 2a 2a 20 54 68 65 72 65 20 63 61  nge..** There ca
17d0: 6e 20 6f 6e 6c 79 20 62 65 20 6f 6e 65 20 77 72  n only be one wr
17e0: 69 74 65 72 2e 20 20 41 20 52 45 53 45 52 56 45  iter.  A RESERVE
17f0: 44 5f 4c 4f 43 4b 20 69 73 20 6f 62 74 61 69 6e  D_LOCK is obtain
1800: 65 64 20 62 79 20 6c 6f 63 6b 69 6e 67 0a 2a 2a  ed by locking.**
1810: 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 20 6f   a single byte o
1820: 66 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 20  f the file that 
1830: 69 73 20 64 65 73 69 67 6e 61 74 65 64 20 61 73  is designated as
1840: 20 74 68 65 20 72 65 73 65 72 76 65 64 20 6c 6f   the reserved lo
1850: 63 6b 20 62 79 74 65 2e 0a 2a 2a 20 41 20 50 45  ck byte..** A PE
1860: 4e 44 49 4e 47 5f 4c 4f 43 4b 20 69 73 20 6f 62  NDING_LOCK is ob
1870: 74 61 69 6e 65 64 20 62 79 20 6c 6f 63 6b 69 6e  tained by lockin
1880: 67 20 61 20 64 65 73 69 67 6e 61 74 65 64 20 62  g a designated b
1890: 79 74 65 20 64 69 66 66 65 72 65 6e 74 20 66 72  yte different fr
18a0: 6f 6d 0a 2a 2a 20 74 68 65 20 52 45 53 45 52 56  om.** the RESERV
18b0: 45 44 5f 4c 4f 43 4b 20 62 79 74 65 2e 0a 2a 2a  ED_LOCK byte..**
18c0: 0a 2a 2a 20 4f 6e 20 57 69 6e 4e 54 2f 32 4b 2f  .** On WinNT/2K/
18d0: 58 50 20 73 79 73 74 65 6d 73 2c 20 4c 6f 63 6b  XP systems, Lock
18e0: 46 69 6c 65 45 78 28 29 20 61 6e 64 20 55 6e 6c  FileEx() and Unl
18f0: 6f 63 6b 46 69 6c 65 45 78 28 29 20 61 72 65 20  ockFileEx() are 
1900: 61 76 61 69 6c 61 62 6c 65 2c 0a 2a 2a 20 77 68  available,.** wh
1910: 69 63 68 20 6d 65 61 6e 73 20 77 65 20 63 61 6e  ich means we can
1920: 20 75 73 65 20 72 65 61 64 65 72 2f 77 72 69 74   use reader/writ
1930: 65 72 20 6c 6f 63 6b 73 2e 20 20 57 68 65 6e 20  er locks.  When 
1940: 72 65 61 64 65 72 2f 77 72 69 74 65 72 20 6c 6f  reader/writer lo
1950: 63 6b 73 0a 2a 2a 20 61 72 65 20 75 73 65 64 2c  cks.** are used,
1960: 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 70 6c 61   the lock is pla
1970: 63 65 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  ced on the same 
1980: 72 61 6e 67 65 20 6f 66 20 62 79 74 65 73 20 74  range of bytes t
1990: 68 61 74 20 69 73 20 75 73 65 64 0a 2a 2a 20 66  hat is used.** f
19a0: 6f 72 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63  or probabilistic
19b0: 20 6c 6f 63 6b 69 6e 67 20 69 6e 20 57 69 6e 39   locking in Win9
19c0: 35 2f 39 38 2f 4d 45 2e 20 20 48 65 6e 63 65 2c  5/98/ME.  Hence,
19d0: 20 74 68 65 20 6c 6f 63 6b 69 6e 67 20 73 63 68   the locking sch
19e0: 65 6d 65 0a 2a 2a 20 77 69 6c 6c 20 73 75 70 70  eme.** will supp
19f0: 6f 72 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  ort two or more 
1a00: 57 69 6e 39 35 20 72 65 61 64 65 72 73 20 6f 72  Win95 readers or
1a10: 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 57 69 6e   two or more Win
1a20: 4e 54 20 72 65 61 64 65 72 73 2e 0a 2a 2a 20 42  NT readers..** B
1a30: 75 74 20 61 20 73 69 6e 67 6c 65 20 57 69 6e 39  ut a single Win9
1a40: 35 20 72 65 61 64 65 72 20 77 69 6c 6c 20 6c 6f  5 reader will lo
1a50: 63 6b 20 6f 75 74 20 61 6c 6c 20 57 69 6e 4e 54  ck out all WinNT
1a60: 20 72 65 61 64 65 72 73 20 61 6e 64 20 61 20 73   readers and a s
1a70: 69 6e 67 6c 65 0a 2a 2a 20 57 69 6e 4e 54 20 72  ingle.** WinNT r
1a80: 65 61 64 65 72 20 77 69 6c 6c 20 6c 6f 63 6b 20  eader will lock 
1a90: 6f 75 74 20 61 6c 6c 20 6f 74 68 65 72 20 57 69  out all other Wi
1aa0: 6e 39 35 20 72 65 61 64 65 72 73 2e 0a 2a 2a 0a  n95 readers..**.
1ab0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1ac0: 20 23 64 65 66 69 6e 65 73 20 73 70 65 63 69 66   #defines specif
1ad0: 79 20 74 68 65 20 72 61 6e 67 65 20 6f 66 20 62  y the range of b
1ae0: 79 74 65 73 20 75 73 65 64 20 66 6f 72 20 6c 6f  ytes used for lo
1af0: 63 6b 69 6e 67 2e 0a 2a 2a 20 53 48 41 52 45 44  cking..** SHARED
1b00: 5f 53 49 5a 45 20 69 73 20 74 68 65 20 6e 75 6d  _SIZE is the num
1b10: 62 65 72 20 6f 66 20 62 79 74 65 73 20 61 76 61  ber of bytes ava
1b20: 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 70 6f  ilable in the po
1b30: 6f 6c 20 66 72 6f 6d 20 77 68 69 63 68 0a 2a 2a  ol from which.**
1b40: 20 61 20 72 61 6e 64 6f 6d 20 62 79 74 65 20 69   a random byte i
1b50: 73 20 73 65 6c 65 63 74 65 64 20 66 6f 72 20 61  s selected for a
1b60: 20 73 68 61 72 65 64 20 6c 6f 63 6b 2e 20 20 54   shared lock.  T
1b70: 68 65 20 70 6f 6f 6c 20 6f 66 20 62 79 74 65 73  he pool of bytes
1b80: 20 66 6f 72 0a 2a 2a 20 73 68 61 72 65 64 20 6c   for.** shared l
1b90: 6f 63 6b 73 20 62 65 67 69 6e 73 20 61 74 20 53  ocks begins at S
1ba0: 48 41 52 45 44 5f 46 49 52 53 54 2e 20 0a 2a 2a  HARED_FIRST. .**
1bb0: 0a 2a 2a 20 54 68 65 20 73 61 6d 65 20 6c 6f 63  .** The same loc
1bc0: 6b 69 6e 67 20 73 74 72 61 74 65 67 79 20 61 6e  king strategy an
1bd0: 64 0a 2a 2a 20 62 79 74 65 20 72 61 6e 67 65 73  d.** byte ranges
1be0: 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 55 6e   are used for Un
1bf0: 69 78 2e 20 20 54 68 69 73 20 6c 65 61 76 65 73  ix.  This leaves
1c00: 20 6f 70 65 6e 20 74 68 65 20 70 6f 73 73 69 62   open the possib
1c10: 6c 69 74 79 20 6f 66 20 68 61 76 69 6e 67 0a 2a  lity of having.*
1c20: 2a 20 63 6c 69 65 6e 74 73 20 6f 6e 20 77 69 6e  * clients on win
1c30: 39 35 2c 20 77 69 6e 4e 54 2c 20 61 6e 64 20 75  95, winNT, and u
1c40: 6e 69 78 20 61 6c 6c 20 74 61 6c 6b 69 6e 67 20  nix all talking 
1c50: 74 6f 20 74 68 65 20 73 61 6d 65 20 73 68 61 72  to the same shar
1c60: 65 64 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 61  ed file.** and a
1c70: 6c 6c 20 6c 6f 63 6b 69 6e 67 20 63 6f 72 72 65  ll locking corre
1c80: 63 74 6c 79 2e 20 20 54 6f 20 64 6f 20 73 6f 20  ctly.  To do so 
1c90: 77 6f 75 6c 64 20 72 65 71 75 69 72 65 20 74 68  would require th
1ca0: 61 74 20 73 61 6d 62 61 20 28 6f 72 20 77 68 61  at samba (or wha
1cb0: 74 65 76 65 72 0a 2a 2a 20 74 6f 6f 6c 20 69 73  tever.** tool is
1cc0: 20 62 65 69 6e 67 20 75 73 65 64 20 66 6f 72 20   being used for 
1cd0: 66 69 6c 65 20 73 68 61 72 69 6e 67 29 20 69 6d  file sharing) im
1ce0: 70 6c 65 6d 65 6e 74 73 20 6c 6f 63 6b 73 20 63  plements locks c
1cf0: 6f 72 72 65 63 74 6c 79 20 62 65 74 77 65 65 6e  orrectly between
1d00: 0a 2a 2a 20 77 69 6e 64 6f 77 73 20 61 6e 64 20  .** windows and 
1d10: 75 6e 69 78 2e 20 20 49 27 6d 20 67 75 65 73 73  unix.  I'm guess
1d20: 69 6e 67 20 74 68 61 74 20 69 73 6e 27 74 20 6c  ing that isn't l
1d30: 69 6b 65 6c 79 20 74 6f 20 68 61 70 70 65 6e 2c  ikely to happen,
1d40: 20 62 75 74 20 62 79 0a 2a 2a 20 75 73 69 6e 67   but by.** using
1d50: 20 74 68 65 20 73 61 6d 65 20 6c 6f 63 6b 69 6e   the same lockin
1d60: 67 20 72 61 6e 67 65 20 77 65 20 61 72 65 20 61  g range we are a
1d70: 74 20 6c 65 61 73 74 20 6f 70 65 6e 20 74 6f 20  t least open to 
1d80: 74 68 65 20 70 6f 73 73 69 62 69 6c 69 74 79 2e  the possibility.
1d90: 0a 2a 2a 0a 2a 2a 20 4c 6f 63 6b 69 6e 67 20 69  .**.** Locking i
1da0: 6e 20 77 69 6e 64 6f 77 73 20 69 73 20 6d 61 6e  n windows is man
1db0: 64 69 74 6f 72 79 2e 20 20 46 6f 72 20 74 68 69  ditory.  For thi
1dc0: 73 20 72 65 61 73 6f 6e 2c 20 77 65 20 63 61 6e  s reason, we can
1dd0: 6e 6f 74 20 73 74 6f 72 65 0a 2a 2a 20 61 63 74  not store.** act
1de0: 75 61 6c 20 64 61 74 61 20 69 6e 20 74 68 65 20  ual data in the 
1df0: 62 79 74 65 73 20 75 73 65 64 20 66 6f 72 20 6c  bytes used for l
1e00: 6f 63 6b 69 6e 67 2e 20 20 54 68 65 20 70 61 67  ocking.  The pag
1e10: 65 72 20 6e 65 76 65 72 20 61 6c 6c 6f 63 61 74  er never allocat
1e20: 65 73 0a 2a 2a 20 74 68 65 20 70 61 67 65 73 20  es.** the pages 
1e30: 69 6e 76 6f 6c 76 65 64 20 69 6e 20 6c 6f 63 6b  involved in lock
1e40: 69 6e 67 20 74 68 65 72 65 66 6f 72 65 2e 20 20  ing therefore.  
1e50: 53 48 41 52 45 44 5f 53 49 5a 45 20 69 73 20 73  SHARED_SIZE is s
1e60: 65 6c 65 63 74 65 64 20 73 6f 0a 2a 2a 20 74 68  elected so.** th
1e70: 61 74 20 61 6c 6c 20 6c 6f 63 6b 73 20 77 69 6c  at all locks wil
1e80: 6c 20 66 69 74 20 6f 6e 20 61 20 73 69 6e 67 6c  l fit on a singl
1e90: 65 20 70 61 67 65 20 65 76 65 6e 20 61 74 20 74  e page even at t
1ea0: 68 65 20 6d 69 6e 69 6d 75 6d 20 70 61 67 65 20  he minimum page 
1eb0: 73 69 7a 65 2e 0a 2a 2a 20 50 45 4e 44 49 4e 47  size..** PENDING
1ec0: 5f 42 59 54 45 20 64 65 66 69 6e 65 73 20 74 68  _BYTE defines th
1ed0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
1ee0: 68 65 20 6c 6f 63 6b 73 2e 20 20 42 79 20 64 65  he locks.  By de
1ef0: 66 61 75 6c 74 20 50 45 4e 44 49 4e 47 5f 42 59  fault PENDING_BY
1f00: 54 45 0a 2a 2a 20 69 73 20 73 65 74 20 68 69 67  TE.** is set hig
1f10: 68 20 73 6f 20 74 68 61 74 20 77 65 20 64 6f 6e  h so that we don
1f20: 27 74 20 68 61 76 65 20 74 6f 20 61 6c 6c 6f 63  't have to alloc
1f30: 61 74 65 20 61 6e 20 75 6e 75 73 65 64 20 70 61  ate an unused pa
1f40: 67 65 20 65 78 63 65 70 74 0a 2a 2a 20 66 6f 72  ge except.** for
1f50: 20 76 65 72 79 20 6c 61 72 67 65 20 64 61 74 61   very large data
1f60: 62 61 73 65 73 2e 20 20 42 75 74 20 6f 6e 65 20  bases.  But one 
1f70: 73 68 6f 75 6c 64 20 74 65 73 74 20 74 68 65 20  should test the 
1f80: 70 61 67 65 20 73 6b 69 70 70 69 6e 67 20 6c 6f  page skipping lo
1f90: 67 69 63 20 0a 2a 2a 20 62 79 20 73 65 74 74 69  gic .** by setti
1fa0: 6e 67 20 50 45 4e 44 49 4e 47 5f 42 59 54 45 20  ng PENDING_BYTE 
1fb0: 6c 6f 77 20 61 6e 64 20 72 75 6e 6e 69 6e 67 20  low and running 
1fc0: 74 68 65 20 65 6e 74 69 72 65 20 72 65 67 72 65  the entire regre
1fd0: 73 73 69 6f 6e 20 73 75 69 74 65 2e 0a 2a 2a 0a  ssion suite..**.
1fe0: 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 65 20  ** Changing the 
1ff0: 76 61 6c 75 65 20 6f 66 20 50 45 4e 44 49 4e 47  value of PENDING
2000: 5f 42 59 54 45 20 72 65 73 75 6c 74 73 20 69 6e  _BYTE results in
2010: 20 61 20 73 75 62 74 6c 79 20 69 6e 63 6f 6d 70   a subtly incomp
2020: 61 74 69 62 6c 65 0a 2a 2a 20 66 69 6c 65 20 66  atible.** file f
2030: 6f 72 6d 61 74 2e 20 20 44 65 70 65 6e 64 69 6e  ormat.  Dependin
2040: 67 20 6f 6e 20 68 6f 77 20 69 74 20 69 73 20 63  g on how it is c
2050: 68 61 6e 67 65 64 2c 20 79 6f 75 20 6d 69 67 68  hanged, you migh
2060: 74 20 6e 6f 74 20 6e 6f 74 69 63 65 0a 2a 2a 20  t not notice.** 
2070: 74 68 65 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c  the incompatibil
2080: 69 74 79 20 72 69 67 68 74 20 61 77 61 79 2c 20  ity right away, 
2090: 65 76 65 6e 20 72 75 6e 6e 69 6e 67 20 61 20 66  even running a f
20a0: 75 6c 6c 20 72 65 67 72 65 73 73 69 6f 6e 20 74  ull regression t
20b0: 65 73 74 2e 0a 2a 2a 20 54 68 65 20 64 65 66 61  est..** The defa
20c0: 75 6c 74 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  ult location of 
20d0: 50 45 4e 44 49 4e 47 5f 42 59 54 45 20 69 73 20  PENDING_BYTE is 
20e0: 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 70  the first byte p
20f0: 61 73 74 20 74 68 65 0a 2a 2a 20 31 47 42 20 62  ast the.** 1GB b
2100: 6f 75 6e 64 61 72 79 2e 0a 2a 2a 0a 2a 2f 0a 23  oundary..**.*/.#
2110: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
2120: 54 5f 57 53 44 0a 23 20 64 65 66 69 6e 65 20 50  T_WSD.# define P
2130: 45 4e 44 49 4e 47 5f 42 59 54 45 20 20 20 20 20  ENDING_BYTE     
2140: 28 30 78 34 30 30 30 30 30 30 30 29 0a 23 65 6c  (0x40000000).#el
2150: 73 65 0a 23 20 64 65 66 69 6e 65 20 50 45 4e 44  se.# define PEND
2160: 49 4e 47 5f 42 59 54 45 20 20 20 20 20 20 73 71  ING_BYTE      sq
2170: 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65  lite3PendingByte
2180: 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
2190: 52 45 53 45 52 56 45 44 5f 42 59 54 45 20 20 20  RESERVED_BYTE   
21a0: 20 20 28 50 45 4e 44 49 4e 47 5f 42 59 54 45 2b    (PENDING_BYTE+
21b0: 31 29 0a 23 64 65 66 69 6e 65 20 53 48 41 52 45  1).#define SHARE
21c0: 44 5f 46 49 52 53 54 20 20 20 20 20 20 28 50 45  D_FIRST      (PE
21d0: 4e 44 49 4e 47 5f 42 59 54 45 2b 32 29 0a 23 64  NDING_BYTE+2).#d
21e0: 65 66 69 6e 65 20 53 48 41 52 45 44 5f 53 49 5a  efine SHARED_SIZ
21f0: 45 20 20 20 20 20 20 20 35 31 30 0a 0a 2f 2a 0a  E       510../*.
2200: 2a 2a 20 57 72 61 70 70 65 72 20 61 72 6f 75 6e  ** Wrapper aroun
2210: 64 20 4f 53 20 73 70 65 63 69 66 69 63 20 73 71  d OS specific sq
2220: 6c 69 74 65 33 5f 6f 73 5f 69 6e 69 74 28 29 20  lite3_os_init() 
2230: 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 69 6e 74  function..*/.int
2240: 20 73 71 6c 69 74 65 33 4f 73 49 6e 69 74 28 76   sqlite3OsInit(v
2250: 6f 69 64 29 3b 0a 0a 2f 2a 20 0a 2a 2a 20 46 75  oid);../* .** Fu
2260: 6e 63 74 69 6f 6e 73 20 66 6f 72 20 61 63 63 65  nctions for acce
2270: 73 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 66 69  ssing sqlite3_fi
2280: 6c 65 20 6d 65 74 68 6f 64 73 20 0a 2a 2f 0a 69  le methods .*/.i
2290: 6e 74 20 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73  nt sqlite3OsClos
22a0: 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a 29  e(sqlite3_file*)
22b0: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 52  ;.int sqlite3OsR
22c0: 65 61 64 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ead(sqlite3_file
22d0: 2a 2c 20 76 6f 69 64 2a 2c 20 69 6e 74 20 61 6d  *, void*, int am
22e0: 74 2c 20 69 36 34 20 6f 66 66 73 65 74 29 3b 0a  t, i64 offset);.
22f0: 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 57 72 69  int sqlite3OsWri
2300: 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a  te(sqlite3_file*
2310: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
2320: 6e 74 20 61 6d 74 2c 20 69 36 34 20 6f 66 66 73  nt amt, i64 offs
2330: 65 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  et);.int sqlite3
2340: 4f 73 54 72 75 6e 63 61 74 65 28 73 71 6c 69 74  OsTruncate(sqlit
2350: 65 33 5f 66 69 6c 65 2a 2c 20 69 36 34 20 73 69  e3_file*, i64 si
2360: 7a 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ze);.int sqlite3
2370: 4f 73 53 79 6e 63 28 73 71 6c 69 74 65 33 5f 66  OsSync(sqlite3_f
2380: 69 6c 65 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ile*, int);.int 
2390: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 53 69 7a  sqlite3OsFileSiz
23a0: 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a 2c  e(sqlite3_file*,
23b0: 20 69 36 34 20 2a 70 53 69 7a 65 29 3b 0a 69 6e   i64 *pSize);.in
23c0: 74 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28  t sqlite3OsLock(
23d0: 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a 2c 20 69  sqlite3_file*, i
23e0: 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
23f0: 4f 73 55 6e 6c 6f 63 6b 28 73 71 6c 69 74 65 33  OsUnlock(sqlite3
2400: 5f 66 69 6c 65 2a 2c 20 69 6e 74 29 3b 0a 69 6e  _file*, int);.in
2410: 74 20 73 71 6c 69 74 65 33 4f 73 43 68 65 63 6b  t sqlite3OsCheck
2420: 52 65 73 65 72 76 65 64 4c 6f 63 6b 28 73 71 6c  ReservedLock(sql
2430: 69 74 65 33 5f 66 69 6c 65 20 2a 69 64 2c 20 69  ite3_file *id, i
2440: 6e 74 20 2a 70 52 65 73 4f 75 74 29 3b 0a 69 6e  nt *pResOut);.in
2450: 74 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43  t sqlite3OsFileC
2460: 6f 6e 74 72 6f 6c 28 73 71 6c 69 74 65 33 5f 66  ontrol(sqlite3_f
2470: 69 6c 65 2a 2c 69 6e 74 2c 76 6f 69 64 2a 29 3b  ile*,int,void*);
2480: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 73 46  .void sqlite3OsF
2490: 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 73  ileControlHint(s
24a0: 71 6c 69 74 65 33 5f 66 69 6c 65 2a 2c 69 6e 74  qlite3_file*,int
24b0: 2c 76 6f 69 64 2a 29 3b 0a 23 64 65 66 69 6e 65  ,void*);.#define
24c0: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 44 42   SQLITE_FCNTL_DB
24d0: 5f 55 4e 43 48 41 4e 47 45 44 20 30 78 63 61 30  _UNCHANGED 0xca0
24e0: 39 33 66 61 30 0a 69 6e 74 20 73 71 6c 69 74 65  93fa0.int sqlite
24f0: 33 4f 73 53 65 63 74 6f 72 53 69 7a 65 28 73 71  3OsSectorSize(sq
2500: 6c 69 74 65 33 5f 66 69 6c 65 20 2a 69 64 29 3b  lite3_file *id);
2510: 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 44 65  .int sqlite3OsDe
2520: 76 69 63 65 43 68 61 72 61 63 74 65 72 69 73 74  viceCharacterist
2530: 69 63 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ics(sqlite3_file
2540: 20 2a 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74   *id);.int sqlit
2550: 65 33 4f 73 53 68 6d 4d 61 70 28 73 71 6c 69 74  e3OsShmMap(sqlit
2560: 65 33 5f 66 69 6c 65 20 2a 2c 69 6e 74 2c 69 6e  e3_file *,int,in
2570: 74 2c 69 6e 74 2c 76 6f 69 64 20 76 6f 6c 61 74  t,int,void volat
2580: 69 6c 65 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  ile **);.int sql
2590: 69 74 65 33 4f 73 53 68 6d 4c 6f 63 6b 28 73 71  ite3OsShmLock(sq
25a0: 6c 69 74 65 33 5f 66 69 6c 65 20 2a 69 64 2c 20  lite3_file *id, 
25b0: 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
25c0: 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 73 53 68  void sqlite3OsSh
25d0: 6d 42 61 72 72 69 65 72 28 73 71 6c 69 74 65 33  mBarrier(sqlite3
25e0: 5f 66 69 6c 65 20 2a 69 64 29 3b 0a 69 6e 74 20  _file *id);.int 
25f0: 73 71 6c 69 74 65 33 4f 73 53 68 6d 55 6e 6d 61  sqlite3OsShmUnma
2600: 70 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  p(sqlite3_file *
2610: 69 64 2c 20 69 6e 74 29 3b 0a 0a 0a 2f 2a 20 0a  id, int);.../* .
2620: 2a 2a 20 46 75 6e 63 74 69 6f 6e 73 20 66 6f 72  ** Functions for
2630: 20 61 63 63 65 73 73 69 6e 67 20 73 71 6c 69 74   accessing sqlit
2640: 65 33 5f 76 66 73 20 6d 65 74 68 6f 64 73 20 0a  e3_vfs methods .
2650: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73  */.int sqlite3Os
2660: 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73  Open(sqlite3_vfs
2670: 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2680: 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a 2c  , sqlite3_file*,
2690: 20 69 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a 69 6e   int, int *);.in
26a0: 74 20 73 71 6c 69 74 65 33 4f 73 44 65 6c 65 74  t sqlite3OsDelet
26b0: 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  e(sqlite3_vfs *,
26c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
26d0: 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
26e0: 4f 73 41 63 63 65 73 73 28 73 71 6c 69 74 65 33  OsAccess(sqlite3
26f0: 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
2700: 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 20 2a  ar *, int, int *
2710: 70 52 65 73 4f 75 74 29 3b 0a 69 6e 74 20 73 71  pResOut);.int sq
2720: 6c 69 74 65 33 4f 73 46 75 6c 6c 50 61 74 68 6e  lite3OsFullPathn
2730: 61 6d 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20  ame(sqlite3_vfs 
2740: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2750: 20 69 6e 74 2c 20 63 68 61 72 20 2a 29 3b 0a 23   int, char *);.#
2760: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2770: 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
2780: 4e 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4f  N.void *sqlite3O
2790: 73 44 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  sDlOpen(sqlite3_
27a0: 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  vfs *, const cha
27b0: 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
27c0: 65 33 4f 73 44 6c 45 72 72 6f 72 28 73 71 6c 69  e3OsDlError(sqli
27d0: 74 65 33 5f 76 66 73 20 2a 2c 20 69 6e 74 2c 20  te3_vfs *, int, 
27e0: 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 28 2a  char *);.void (*
27f0: 73 71 6c 69 74 65 33 4f 73 44 6c 53 79 6d 28 73  sqlite3OsDlSym(s
2800: 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 76 6f  qlite3_vfs *, vo
2810: 69 64 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  id *, const char
2820: 20 2a 29 29 28 76 6f 69 64 29 3b 0a 76 6f 69 64   *))(void);.void
2830: 20 73 71 6c 69 74 65 33 4f 73 44 6c 43 6c 6f 73   sqlite3OsDlClos
2840: 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  e(sqlite3_vfs *,
2850: 20 76 6f 69 64 20 2a 29 3b 0a 23 65 6e 64 69 66   void *);.#endif
2860: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2870: 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 20 2a  LOAD_EXTENSION *
2880: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 52  /.int sqlite3OsR
2890: 61 6e 64 6f 6d 6e 65 73 73 28 73 71 6c 69 74 65  andomness(sqlite
28a0: 33 5f 76 66 73 20 2a 2c 20 69 6e 74 2c 20 63 68  3_vfs *, int, ch
28b0: 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
28c0: 65 33 4f 73 53 6c 65 65 70 28 73 71 6c 69 74 65  e3OsSleep(sqlite
28d0: 33 5f 76 66 73 20 2a 2c 20 69 6e 74 29 3b 0a 69  3_vfs *, int);.i
28e0: 6e 74 20 73 71 6c 69 74 65 33 4f 73 43 75 72 72  nt sqlite3OsCurr
28f0: 65 6e 74 54 69 6d 65 49 6e 74 36 34 28 73 71 6c  entTimeInt64(sql
2900: 69 74 65 33 5f 76 66 73 20 2a 2c 20 73 71 6c 69  ite3_vfs *, sqli
2910: 74 65 33 5f 69 6e 74 36 34 2a 29 3b 0a 0a 2f 2a  te3_int64*);../*
2920: 0a 2a 2a 20 43 6f 6e 76 65 6e 69 65 6e 63 65 20  .** Convenience 
2930: 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 6f 70  functions for op
2940: 65 6e 69 6e 67 20 61 6e 64 20 63 6c 6f 73 69 6e  ening and closin
2950: 67 20 66 69 6c 65 73 20 75 73 69 6e 67 20 0a 2a  g files using .*
2960: 2a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  * sqlite3_malloc
2970: 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61  () to obtain spa
2980: 63 65 20 66 6f 72 20 74 68 65 20 66 69 6c 65 2d  ce for the file-
2990: 68 61 6e 64 6c 65 20 73 74 72 75 63 74 75 72 65  handle structure
29a0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
29b0: 4f 73 4f 70 65 6e 4d 61 6c 6c 6f 63 28 73 71 6c  OsOpenMalloc(sql
29c0: 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73  ite3_vfs *, cons
29d0: 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65  t char *, sqlite
29e0: 33 5f 66 69 6c 65 20 2a 2a 2c 20 69 6e 74 2c 69  3_file **, int,i
29f0: 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2a00: 33 4f 73 43 6c 6f 73 65 46 72 65 65 28 73 71 6c  3OsCloseFree(sql
2a10: 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 23  ite3_file *);..#
2a20: 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45  endif /* _SQLITE
2a30: 5f 4f 53 5f 48 5f 20 2a 2f 0a                    _OS_H_ */.