/ Hex Artifact Content
Login

Artifact 38aabd5e3ecd4162332076f55bb09cec02165cca:


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 23 69 66 20 53 51 4c 49 54 45  ndif..#if SQLITE
0810: 5f 4f 53 5f 57 49 4e 0a 23 20 69 6e 63 6c 75 64  _OS_WIN.# includ
0820: 65 20 3c 77 69 6e 64 6f 77 73 2e 68 3e 0a 23 65  e <windows.h>.#e
0830: 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45  ndif..#if SQLITE
0840: 5f 4f 53 5f 4f 53 32 0a 23 20 69 66 20 28 5f 5f  _OS_OS2.# if (__
0850: 47 4e 55 43 5f 5f 20 3e 20 33 20 7c 7c 20 5f 5f  GNUC__ > 3 || __
0860: 47 4e 55 43 5f 5f 20 3d 3d 20 33 20 26 26 20 5f  GNUC__ == 3 && _
0870: 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 20 3e 3d  _GNUC_MINOR__ >=
0880: 20 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 4f   3) && defined(O
0890: 53 32 5f 48 49 47 48 5f 4d 45 4d 4f 52 59 29 0a  S2_HIGH_MEMORY).
08a0: 23 20 20 69 6e 63 6c 75 64 65 20 3c 6f 73 32 73  #  include <os2s
08b0: 61 66 65 2e 68 3e 20 2f 2a 20 68 61 73 20 74 6f  afe.h> /* has to
08c0: 20 62 65 20 69 6e 63 6c 75 64 65 64 20 62 65 66   be included bef
08d0: 6f 72 65 20 6f 73 32 2e 68 20 66 6f 72 20 6c 69  ore os2.h for li
08e0: 6e 6b 69 6e 67 20 74 6f 20 77 6f 72 6b 20 2a 2f  nking to work */
08f0: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
0900: 65 20 49 4e 43 4c 5f 44 4f 53 44 41 54 45 54 49  e INCL_DOSDATETI
0910: 4d 45 0a 23 20 64 65 66 69 6e 65 20 49 4e 43 4c  ME.# define INCL
0920: 5f 44 4f 53 46 49 4c 45 4d 47 52 0a 23 20 64 65  _DOSFILEMGR.# de
0930: 66 69 6e 65 20 49 4e 43 4c 5f 44 4f 53 45 52 52  fine INCL_DOSERR
0940: 4f 52 53 0a 23 20 64 65 66 69 6e 65 20 49 4e 43  ORS.# define INC
0950: 4c 5f 44 4f 53 4d 49 53 43 0a 23 20 64 65 66 69  L_DOSMISC.# defi
0960: 6e 65 20 49 4e 43 4c 5f 44 4f 53 50 52 4f 43 45  ne INCL_DOSPROCE
0970: 53 53 0a 23 20 64 65 66 69 6e 65 20 49 4e 43 4c  SS.# define INCL
0980: 5f 44 4f 53 4d 4f 44 55 4c 45 4d 47 52 0a 23 20  _DOSMODULEMGR.# 
0990: 64 65 66 69 6e 65 20 49 4e 43 4c 5f 44 4f 53 53  define INCL_DOSS
09a0: 45 4d 41 50 48 4f 52 45 53 0a 23 20 69 6e 63 6c  EMAPHORES.# incl
09b0: 75 64 65 20 3c 6f 73 32 2e 68 3e 0a 23 20 69 6e  ude <os2.h>.# in
09c0: 63 6c 75 64 65 20 3c 75 63 6f 6e 76 2e 68 3e 0a  clude <uconv.h>.
09d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
09e0: 74 65 72 6d 69 6e 65 20 69 66 20 77 65 20 61 72  termine if we ar
09f0: 65 20 64 65 61 6c 69 6e 67 20 77 69 74 68 20 57  e dealing with W
0a00: 69 6e 64 6f 77 73 20 4e 54 2e 0a 2a 2a 0a 2a 2a  indows NT..**.**
0a10: 20 57 65 20 6f 75 67 68 74 20 74 6f 20 62 65 20   We ought to be 
0a20: 61 62 6c 65 20 74 6f 20 64 65 74 65 72 6d 69 6e  able to determin
0a30: 65 20 69 66 20 77 65 20 61 72 65 20 63 6f 6d 70  e if we are comp
0a40: 69 6c 69 6e 67 20 66 6f 72 20 77 69 6e 39 38 20  iling for win98 
0a50: 6f 72 20 77 69 6e 4e 54 0a 2a 2a 20 75 73 69 6e  or winNT.** usin
0a60: 67 20 74 68 65 20 5f 57 49 4e 33 32 5f 57 49 4e  g the _WIN32_WIN
0a70: 4e 54 20 6d 61 63 72 6f 20 61 73 20 66 6f 6c 6c  NT macro as foll
0a80: 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20 23 69 66 20 64  ows:.**.** #if d
0a90: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 49  efined(_WIN32_WI
0aa0: 4e 4e 54 29 0a 2a 2a 20 23 20 64 65 66 69 6e 65  NNT).** # define
0ab0: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 4e 54   SQLITE_OS_WINNT
0ac0: 20 31 0a 2a 2a 20 23 65 6c 73 65 0a 2a 2a 20 23   1.** #else.** #
0ad0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f   define SQLITE_O
0ae0: 53 5f 57 49 4e 4e 54 20 30 0a 2a 2a 20 23 65 6e  S_WINNT 0.** #en
0af0: 64 69 66 0a 2a 2a 0a 2a 2a 20 48 6f 77 65 76 65  dif.**.** Howeve
0b00: 72 2c 20 76 73 32 30 30 35 20 64 6f 65 73 20 6e  r, vs2005 does n
0b10: 6f 74 20 73 65 74 20 5f 57 49 4e 33 32 5f 57 49  ot set _WIN32_WI
0b20: 4e 4e 54 20 62 79 20 64 65 66 61 75 6c 74 2c 20  NNT by default, 
0b30: 61 73 20 69 74 20 6f 75 67 68 74 20 74 6f 2c 0a  as it ought to,.
0b40: 2a 2a 20 73 6f 20 74 68 65 20 61 62 6f 76 65 20  ** so the above 
0b50: 74 65 73 74 20 64 6f 65 73 20 6e 6f 74 20 77 6f  test does not wo
0b60: 72 6b 2e 20 20 57 65 27 6c 6c 20 6a 75 73 74 20  rk.  We'll just 
0b70: 61 73 73 75 6d 65 20 74 68 61 74 20 65 76 65 72  assume that ever
0b80: 79 74 68 69 6e 67 20 69 73 0a 2a 2a 20 77 69 6e  ything is.** win
0b90: 4e 54 20 75 6e 6c 65 73 73 20 74 68 65 20 70 72  NT unless the pr
0ba0: 6f 67 72 61 6d 6d 65 72 20 65 78 70 6c 69 63 69  ogrammer explici
0bb0: 74 6c 79 20 73 61 79 73 20 6f 74 68 65 72 77 69  tly says otherwi
0bc0: 73 65 20 62 79 20 73 65 74 74 69 6e 67 0a 2a 2a  se by setting.**
0bd0: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 4e 54   SQLITE_OS_WINNT
0be0: 20 74 6f 20 30 2e 0a 2a 2f 0a 23 69 66 20 53 51   to 0..*/.#if SQ
0bf0: 4c 49 54 45 5f 4f 53 5f 57 49 4e 20 26 26 20 21  LITE_OS_WIN && !
0c00: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0c10: 53 5f 57 49 4e 4e 54 29 0a 23 20 64 65 66 69 6e  S_WINNT).# defin
0c20: 65 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 4e  e SQLITE_OS_WINN
0c30: 54 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  T 1.#endif../*.*
0c40: 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 77  * Determine if w
0c50: 65 20 61 72 65 20 64 65 61 6c 69 6e 67 20 77 69  e are dealing wi
0c60: 74 68 20 57 69 6e 64 6f 77 73 43 45 20 2d 20 77  th WindowsCE - w
0c70: 68 69 63 68 20 68 61 73 20 61 20 6d 75 63 68 0a  hich has a much.
0c80: 2a 2a 20 72 65 64 75 63 65 64 20 41 50 49 2e 0a  ** reduced API..
0c90: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
0ca0: 57 49 4e 33 32 5f 57 43 45 29 0a 23 20 64 65 66  WIN32_WCE).# def
0cb0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49  ine SQLITE_OS_WI
0cc0: 4e 43 45 20 31 0a 23 65 6c 73 65 0a 23 20 64 65  NCE 1.#else.# de
0cd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 53 5f 57  fine SQLITE_OS_W
0ce0: 49 4e 43 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  INCE 0.#endif../
0cf0: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
0d00: 66 20 77 65 20 61 72 65 20 64 65 61 6c 69 6e 67  f we are dealing
0d10: 20 77 69 74 68 20 57 69 6e 64 6f 77 73 52 54 20   with WindowsRT 
0d20: 28 4d 65 74 72 6f 29 20 61 73 20 74 68 69 73 20  (Metro) as this 
0d30: 68 61 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  has a different 
0d40: 61 6e 64 0a 2a 2a 20 69 6e 63 6f 6d 70 61 74 69  and.** incompati
0d50: 62 6c 65 20 41 50 49 20 66 72 6f 6d 20 77 69 6e  ble API from win
0d60: 33 32 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  32..*/.#if !defi
0d70: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 53 5f 57 49  ned(SQLITE_OS_WI
0d80: 4e 52 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51  NRT).# define SQ
0d90: 4c 49 54 45 5f 4f 53 5f 57 49 4e 52 54 20 30 0a  LITE_OS_WINRT 0.
0da0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68  #endif../*.** Wh
0db0: 65 6e 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  en compiled for 
0dc0: 57 69 6e 43 45 20 6f 72 20 57 69 6e 52 54 2c 20  WinCE or WinRT, 
0dd0: 74 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 63  there is no conc
0de0: 65 70 74 20 6f 66 20 74 68 65 20 63 75 72 72 65  ept of the curre
0df0: 6e 74 0a 2a 2a 20 64 69 72 65 63 74 6f 72 79 2e  nt.** directory.
0e00: 0a 20 2a 2f 0a 23 69 66 20 21 53 51 4c 49 54 45  . */.#if !SQLITE
0e10: 5f 4f 53 5f 57 49 4e 43 45 20 26 26 20 21 53 51  _OS_WINCE && !SQ
0e20: 4c 49 54 45 5f 4f 53 5f 57 49 4e 52 54 0a 23 20  LITE_OS_WINRT.# 
0e30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 55  define SQLITE_CU
0e40: 52 44 49 52 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  RDIR 1.#endif../
0e50: 2a 20 49 66 20 74 68 65 20 53 45 54 5f 46 55 4c  * If the SET_FUL
0e60: 4c 53 59 4e 43 20 6d 61 63 72 6f 20 69 73 20 6e  LSYNC macro is n
0e70: 6f 74 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65  ot defined above
0e80: 2c 20 74 68 65 6e 20 6d 61 6b 65 20 69 74 0a 2a  , then make it.*
0e90: 2a 20 61 20 6e 6f 2d 6f 70 0a 2a 2f 0a 23 69 66  * a no-op.*/.#if
0ea0: 6e 64 65 66 20 53 45 54 5f 46 55 4c 4c 53 59 4e  ndef SET_FULLSYN
0eb0: 43 0a 23 20 64 65 66 69 6e 65 20 53 45 54 5f 46  C.# define SET_F
0ec0: 55 4c 4c 53 59 4e 43 28 78 2c 79 29 0a 23 65 6e  ULLSYNC(x,y).#en
0ed0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
0ee0: 65 66 61 75 6c 74 20 73 69 7a 65 20 6f 66 20 61  efault size of a
0ef0: 20 64 69 73 6b 20 73 65 63 74 6f 72 0a 2a 2f 0a   disk sector.*/.
0f00: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
0f10: 45 46 41 55 4c 54 5f 53 45 43 54 4f 52 5f 53 49  EFAULT_SECTOR_SI
0f20: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
0f30: 54 45 5f 44 45 46 41 55 4c 54 5f 53 45 43 54 4f  TE_DEFAULT_SECTO
0f40: 52 5f 53 49 5a 45 20 34 30 39 36 0a 23 65 6e 64  R_SIZE 4096.#end
0f50: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 6d 70 6f 72  if../*.** Tempor
0f60: 61 72 79 20 66 69 6c 65 73 20 61 72 65 20 6e 61  ary files are na
0f70: 6d 65 64 20 73 74 61 72 74 69 6e 67 20 77 69 74  med starting wit
0f80: 68 20 74 68 69 73 20 70 72 65 66 69 78 20 66 6f  h this prefix fo
0f90: 6c 6c 6f 77 65 64 20 62 79 20 31 36 20 72 61 6e  llowed by 16 ran
0fa0: 64 6f 6d 0a 2a 2a 20 61 6c 70 68 61 6e 75 6d 65  dom.** alphanume
0fb0: 72 69 63 20 63 68 61 72 61 63 74 65 72 73 2c 20  ric characters, 
0fc0: 61 6e 64 20 6e 6f 20 66 69 6c 65 20 65 78 74 65  and no file exte
0fd0: 6e 73 69 6f 6e 2e 20 54 68 65 79 20 61 72 65 20  nsion. They are 
0fe0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 0a 2a 2a  stored in the.**
0ff0: 20 4f 53 27 73 20 73 74 61 6e 64 61 72 64 20 74   OS's standard t
1000: 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 20 64 69  emporary file di
1010: 72 65 63 74 6f 72 79 2c 20 61 6e 64 20 61 72 65  rectory, and are
1020: 20 64 65 6c 65 74 65 64 20 70 72 69 6f 72 20 74   deleted prior t
1030: 6f 20 65 78 69 74 2e 0a 2a 2a 20 49 66 20 73 71  o exit..** If sq
1040: 6c 69 74 65 20 69 73 20 62 65 69 6e 67 20 65 6d  lite is being em
1050: 62 65 64 64 65 64 20 69 6e 20 61 6e 6f 74 68 65  bedded in anothe
1060: 72 20 70 72 6f 67 72 61 6d 2c 20 79 6f 75 20 6d  r program, you m
1070: 61 79 20 77 69 73 68 20 74 6f 20 63 68 61 6e 67  ay wish to chang
1080: 65 20 74 68 65 0a 2a 2a 20 70 72 65 66 69 78 20  e the.** prefix 
1090: 74 6f 20 72 65 66 6c 65 63 74 20 79 6f 75 72 20  to reflect your 
10a0: 70 72 6f 67 72 61 6d 27 73 20 6e 61 6d 65 2c 20  program's name, 
10b0: 73 6f 20 74 68 61 74 20 69 66 20 79 6f 75 72 20  so that if your 
10c0: 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a  program exits.**
10d0: 20 70 72 65 6d 61 74 75 72 65 6c 79 2c 20 6f 6c   prematurely, ol
10e0: 64 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  d temporary file
10f0: 73 20 63 61 6e 20 62 65 20 65 61 73 69 6c 79 20  s can be easily 
1100: 69 64 65 6e 74 69 66 69 65 64 2e 20 54 68 69 73  identified. This
1110: 20 63 61 6e 20 62 65 20 64 6f 6e 65 0a 2a 2a 20   can be done.** 
1120: 75 73 69 6e 67 20 2d 44 53 51 4c 49 54 45 5f 54  using -DSQLITE_T
1130: 45 4d 50 5f 46 49 4c 45 5f 50 52 45 46 49 58 3d  EMP_FILE_PREFIX=
1140: 6d 79 70 72 65 66 69 78 5f 20 6f 6e 20 74 68 65  myprefix_ on the
1150: 20 63 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e   compiler comman
1160: 64 20 6c 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 32 30  d line..**.** 20
1170: 30 36 2d 31 30 2d 33 31 3a 20 20 54 68 65 20 64  06-10-31:  The d
1180: 65 66 61 75 6c 74 20 70 72 65 66 69 78 20 75 73  efault prefix us
1190: 65 64 20 74 6f 20 62 65 20 22 73 71 6c 69 74 65  ed to be "sqlite
11a0: 5f 22 2e 20 20 42 75 74 20 74 68 65 6e 0a 2a 2a  _".  But then.**
11b0: 20 4d 63 61 66 65 65 20 73 74 61 72 74 65 64 20   Mcafee started 
11c0: 75 73 69 6e 67 20 53 51 4c 69 74 65 20 69 6e 20  using SQLite in 
11d0: 74 68 65 69 72 20 61 6e 74 69 2d 76 69 72 75 73  their anti-virus
11e0: 20 70 72 6f 64 75 63 74 20 61 6e 64 20 69 74 0a   product and it.
11f0: 2a 2a 20 73 74 61 72 74 65 64 20 70 75 74 74 69  ** started putti
1200: 6e 67 20 66 69 6c 65 73 20 77 69 74 68 20 74 68  ng files with th
1210: 65 20 22 73 71 6c 69 74 65 22 20 6e 61 6d 65 20  e "sqlite" name 
1220: 69 6e 20 74 68 65 20 63 3a 2f 74 65 6d 70 20 66  in the c:/temp f
1230: 6f 6c 64 65 72 2e 0a 2a 2a 20 54 68 69 73 20 61  older..** This a
1240: 6e 6e 6f 79 65 64 20 6d 61 6e 79 20 77 69 6e 64  nnoyed many wind
1250: 6f 77 73 20 75 73 65 72 73 2e 20 20 54 68 6f 73  ows users.  Thos
1260: 65 20 75 73 65 72 73 20 77 6f 75 6c 64 20 74 68  e users would th
1270: 65 6e 20 64 6f 20 61 20 0a 2a 2a 20 47 6f 6f 67  en do a .** Goog
1280: 6c 65 20 73 65 61 72 63 68 20 66 6f 72 20 22 73  le search for "s
1290: 71 6c 69 74 65 22 2c 20 66 69 6e 64 20 74 68 65  qlite", find the
12a0: 20 74 65 6c 65 70 68 6f 6e 65 20 6e 75 6d 62 65   telephone numbe
12b0: 72 73 20 6f 66 20 74 68 65 0a 2a 2a 20 64 65 76  rs of the.** dev
12c0: 65 6c 6f 70 65 72 73 20 61 6e 64 20 63 61 6c 6c  elopers and call
12d0: 20 74 6f 20 77 61 6b 65 20 74 68 65 6d 20 75 70   to wake them up
12e0: 20 61 74 20 6e 69 67 68 74 20 61 6e 64 20 63 6f   at night and co
12f0: 6d 70 6c 61 69 6e 2e 0a 2a 2a 20 46 6f 72 20 74  mplain..** For t
1300: 68 69 73 20 72 65 61 73 6f 6e 2c 20 74 68 65 20  his reason, the 
1310: 64 65 66 61 75 6c 74 20 6e 61 6d 65 20 70 72 65  default name pre
1320: 66 69 78 20 69 73 20 63 68 61 6e 67 65 64 20 74  fix is changed t
1330: 6f 20 62 65 20 22 73 71 6c 69 74 65 22 20 0a 2a  o be "sqlite" .*
1340: 2a 20 73 70 65 6c 6c 65 64 20 62 61 63 6b 77 61  * spelled backwa
1350: 72 64 73 2e 20 20 53 6f 20 74 68 65 20 74 65 6d  rds.  So the tem
1360: 70 20 66 69 6c 65 73 20 61 72 65 20 73 74 69 6c  p files are stil
1370: 6c 20 69 64 65 6e 74 69 66 69 65 64 2c 20 62 75  l identified, bu
1380: 74 0a 2a 2a 20 61 6e 79 62 6f 64 79 20 73 6d 61  t.** anybody sma
1390: 72 74 20 65 6e 6f 75 67 68 20 74 6f 20 66 69 67  rt enough to fig
13a0: 75 72 65 20 6f 75 74 20 74 68 65 20 63 6f 64 65  ure out the code
13b0: 20 69 73 20 61 6c 73 6f 20 6c 69 6b 65 6c 79 20   is also likely 
13c0: 73 6d 61 72 74 0a 2a 2a 20 65 6e 6f 75 67 68 20  smart.** enough 
13d0: 74 6f 20 6b 6e 6f 77 20 74 68 61 74 20 63 61 6c  to know that cal
13e0: 6c 69 6e 67 20 74 68 65 20 64 65 76 65 6c 6f 70  ling the develop
13f0: 65 72 20 77 69 6c 6c 20 6e 6f 74 20 68 65 6c 70  er will not help
1400: 20 67 65 74 20 72 69 64 0a 2a 2a 20 6f 66 20 74   get rid.** of t
1410: 68 65 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69 66 6e  he file..*/.#ifn
1420: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  def SQLITE_TEMP_
1430: 46 49 4c 45 5f 50 52 45 46 49 58 0a 23 20 64 65  FILE_PREFIX.# de
1440: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
1450: 5f 46 49 4c 45 5f 50 52 45 46 49 58 20 22 65 74  _FILE_PREFIX "et
1460: 69 6c 71 73 5f 22 0a 23 65 6e 64 69 66 0a 0a 2f  ilqs_".#endif../
1470: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1480: 6e 67 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65  ng values may be
1490: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 73   passed as the s
14a0: 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 74  econd argument t
14b0: 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 4f 73 4c 6f  o.** sqlite3OsLo
14c0: 63 6b 28 29 2e 20 54 68 65 20 76 61 72 69 6f 75  ck(). The variou
14d0: 73 20 6c 6f 63 6b 73 20 65 78 68 69 62 69 74 20  s locks exhibit 
14e0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65  the following se
14f0: 6d 61 6e 74 69 63 73 3a 0a 2a 2a 0a 2a 2a 20 53  mantics:.**.** S
1500: 48 41 52 45 44 3a 20 20 20 20 41 6e 79 20 6e 75  HARED:    Any nu
1510: 6d 62 65 72 20 6f 66 20 70 72 6f 63 65 73 73 65  mber of processe
1520: 73 20 6d 61 79 20 68 6f 6c 64 20 61 20 53 48 41  s may hold a SHA
1530: 52 45 44 20 6c 6f 63 6b 20 73 69 6d 75 6c 74 61  RED lock simulta
1540: 6e 65 6f 75 73 6c 79 2e 0a 2a 2a 20 52 45 53 45  neously..** RESE
1550: 52 56 45 44 3a 20 20 41 20 73 69 6e 67 6c 65 20  RVED:  A single 
1560: 70 72 6f 63 65 73 73 20 6d 61 79 20 68 6f 6c 64  process may hold
1570: 20 61 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b   a RESERVED lock
1580: 20 6f 6e 20 61 20 66 69 6c 65 20 61 74 0a 2a 2a   on a file at.**
1590: 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 79 20              any 
15a0: 74 69 6d 65 2e 20 4f 74 68 65 72 20 70 72 6f 63  time. Other proc
15b0: 65 73 73 65 73 20 6d 61 79 20 68 6f 6c 64 20 61  esses may hold a
15c0: 6e 64 20 6f 62 74 61 69 6e 20 6e 65 77 20 53 48  nd obtain new SH
15d0: 41 52 45 44 20 6c 6f 63 6b 73 2e 0a 2a 2a 20 50  ARED locks..** P
15e0: 45 4e 44 49 4e 47 3a 20 20 20 41 20 73 69 6e 67  ENDING:   A sing
15f0: 6c 65 20 70 72 6f 63 65 73 73 20 6d 61 79 20 68  le process may h
1600: 6f 6c 64 20 61 20 50 45 4e 44 49 4e 47 20 6c 6f  old a PENDING lo
1610: 63 6b 20 6f 6e 20 61 20 66 69 6c 65 20 61 74 0a  ck on a file at.
1620: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 61 6e  **            an
1630: 79 20 6f 6e 65 20 74 69 6d 65 2e 20 45 78 69 73  y one time. Exis
1640: 74 69 6e 67 20 53 48 41 52 45 44 20 6c 6f 63 6b  ting SHARED lock
1650: 73 20 6d 61 79 20 70 65 72 73 69 73 74 2c 20 62  s may persist, b
1660: 75 74 20 6e 6f 20 6e 65 77 0a 2a 2a 20 20 20 20  ut no new.**    
1670: 20 20 20 20 20 20 20 20 53 48 41 52 45 44 20 6c          SHARED l
1680: 6f 63 6b 73 20 6d 61 79 20 62 65 20 6f 62 74 61  ocks may be obta
1690: 69 6e 65 64 20 62 79 20 6f 74 68 65 72 20 70 72  ined by other pr
16a0: 6f 63 65 73 73 65 73 2e 0a 2a 2a 20 45 58 43 4c  ocesses..** EXCL
16b0: 55 53 49 56 45 3a 20 41 6e 20 45 58 43 4c 55 53  USIVE: An EXCLUS
16c0: 49 56 45 20 6c 6f 63 6b 20 70 72 65 63 6c 75 64  IVE lock preclud
16d0: 65 73 20 61 6c 6c 20 6f 74 68 65 72 20 6c 6f 63  es all other loc
16e0: 6b 73 2e 0a 2a 2a 0a 2a 2a 20 50 45 4e 44 49 4e  ks..**.** PENDIN
16f0: 47 5f 4c 4f 43 4b 20 6d 61 79 20 6e 6f 74 20 62  G_LOCK may not b
1700: 65 20 70 61 73 73 65 64 20 64 69 72 65 63 74 6c  e passed directl
1710: 79 20 74 6f 20 73 71 6c 69 74 65 33 4f 73 4c 6f  y to sqlite3OsLo
1720: 63 6b 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 61  ck(). Instead, a
1730: 0a 2a 2a 20 70 72 6f 63 65 73 73 20 74 68 61 74  .** process that
1740: 20 72 65 71 75 65 73 74 73 20 61 6e 20 45 58 43   requests an EXC
1750: 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20  LUSIVE lock may 
1760: 61 63 74 75 61 6c 6c 79 20 6f 62 74 61 69 6e 20  actually obtain 
1770: 61 20 50 45 4e 44 49 4e 47 0a 2a 2a 20 6c 6f 63  a PENDING.** loc
1780: 6b 2e 20 54 68 69 73 20 63 61 6e 20 62 65 20 75  k. This can be u
1790: 70 67 72 61 64 65 64 20 74 6f 20 61 6e 20 45 58  pgraded to an EX
17a0: 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 62 79 20  CLUSIVE lock by 
17b0: 61 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c  a subsequent cal
17c0: 6c 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 4f  l to.** sqlite3O
17d0: 73 4c 6f 63 6b 28 29 2e 0a 2a 2f 0a 23 64 65 66  sLock()..*/.#def
17e0: 69 6e 65 20 4e 4f 5f 4c 4f 43 4b 20 20 20 20 20  ine NO_LOCK     
17f0: 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 48      0.#define SH
1800: 41 52 45 44 5f 4c 4f 43 4b 20 20 20 20 20 31 0a  ARED_LOCK     1.
1810: 23 64 65 66 69 6e 65 20 52 45 53 45 52 56 45 44  #define RESERVED
1820: 5f 4c 4f 43 4b 20 20 20 32 0a 23 64 65 66 69 6e  _LOCK   2.#defin
1830: 65 20 50 45 4e 44 49 4e 47 5f 4c 4f 43 4b 20 20  e PENDING_LOCK  
1840: 20 20 33 0a 23 64 65 66 69 6e 65 20 45 58 43 4c    3.#define EXCL
1850: 55 53 49 56 45 5f 4c 4f 43 4b 20 20 34 0a 0a 2f  USIVE_LOCK  4../
1860: 2a 0a 2a 2a 20 46 69 6c 65 20 4c 6f 63 6b 69 6e  *.** File Lockin
1870: 67 20 4e 6f 74 65 73 3a 20 20 28 4d 6f 73 74 6c  g Notes:  (Mostl
1880: 79 20 61 62 6f 75 74 20 77 69 6e 64 6f 77 73 20  y about windows 
1890: 62 75 74 20 61 6c 73 6f 20 73 6f 6d 65 20 69 6e  but also some in
18a0: 66 6f 20 66 6f 72 20 55 6e 69 78 29 0a 2a 2a 0a  fo for Unix).**.
18b0: 2a 2a 20 57 65 20 63 61 6e 6e 6f 74 20 75 73 65  ** We cannot use
18c0: 20 4c 6f 63 6b 46 69 6c 65 45 78 28 29 20 6f 72   LockFileEx() or
18d0: 20 55 6e 6c 6f 63 6b 46 69 6c 65 45 78 28 29 20   UnlockFileEx() 
18e0: 6f 6e 20 57 69 6e 39 35 2f 39 38 2f 4d 45 20 62  on Win95/98/ME b
18f0: 65 63 61 75 73 65 0a 2a 2a 20 74 68 6f 73 65 20  ecause.** those 
1900: 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f  functions are no
1910: 74 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 6f  t available.  So
1920: 20 77 65 20 75 73 65 20 6f 6e 6c 79 20 4c 6f 63   we use only Loc
1930: 6b 46 69 6c 65 28 29 20 61 6e 64 0a 2a 2a 20 55  kFile() and.** U
1940: 6e 6c 6f 63 6b 46 69 6c 65 28 29 2e 0a 2a 2a 0a  nlockFile()..**.
1950: 2a 2a 20 4c 6f 63 6b 46 69 6c 65 28 29 20 70 72  ** LockFile() pr
1960: 65 76 65 6e 74 73 20 6e 6f 74 20 6a 75 73 74 20  events not just 
1970: 77 72 69 74 69 6e 67 20 62 75 74 20 61 6c 73 6f  writing but also
1980: 20 72 65 61 64 69 6e 67 20 62 79 20 6f 74 68 65   reading by othe
1990: 72 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2a 20  r processes..** 
19a0: 41 20 53 48 41 52 45 44 5f 4c 4f 43 4b 20 69 73  A SHARED_LOCK is
19b0: 20 6f 62 74 61 69 6e 65 64 20 62 79 20 6c 6f 63   obtained by loc
19c0: 6b 69 6e 67 20 61 20 73 69 6e 67 6c 65 20 72 61  king a single ra
19d0: 6e 64 6f 6d 6c 79 2d 63 68 6f 73 65 6e 20 0a 2a  ndomly-chosen .*
19e0: 2a 20 62 79 74 65 20 6f 75 74 20 6f 66 20 61 20  * byte out of a 
19f0: 73 70 65 63 69 66 69 63 20 72 61 6e 67 65 20 6f  specific range o
1a00: 66 20 62 79 74 65 73 2e 20 54 68 65 20 6c 6f 63  f bytes. The loc
1a10: 6b 20 62 79 74 65 20 69 73 20 6f 62 74 61 69 6e  k byte is obtain
1a20: 65 64 20 61 74 20 0a 2a 2a 20 72 61 6e 64 6f 6d  ed at .** random
1a30: 20 73 6f 20 74 77 6f 20 73 65 70 61 72 61 74 65   so two separate
1a40: 20 72 65 61 64 65 72 73 20 63 61 6e 20 70 72 6f   readers can pro
1a50: 62 61 62 6c 79 20 61 63 63 65 73 73 20 74 68 65  bably access the
1a60: 20 66 69 6c 65 20 61 74 20 74 68 65 20 0a 2a 2a   file at the .**
1a70: 20 73 61 6d 65 20 74 69 6d 65 2c 20 75 6e 6c 65   same time, unle
1a80: 73 73 20 74 68 65 79 20 61 72 65 20 75 6e 6c 75  ss they are unlu
1a90: 63 6b 79 20 61 6e 64 20 63 68 6f 6f 73 65 20 74  cky and choose t
1aa0: 68 65 20 73 61 6d 65 20 6c 6f 63 6b 20 62 79 74  he same lock byt
1ab0: 65 2e 0a 2a 2a 20 41 6e 20 45 58 43 4c 55 53 49  e..** An EXCLUSI
1ac0: 56 45 5f 4c 4f 43 4b 20 69 73 20 6f 62 74 61 69  VE_LOCK is obtai
1ad0: 6e 65 64 20 62 79 20 6c 6f 63 6b 69 6e 67 20 61  ned by locking a
1ae0: 6c 6c 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  ll bytes in the 
1af0: 72 61 6e 67 65 2e 0a 2a 2a 20 54 68 65 72 65 20  range..** There 
1b00: 63 61 6e 20 6f 6e 6c 79 20 62 65 20 6f 6e 65 20  can only be one 
1b10: 77 72 69 74 65 72 2e 20 20 41 20 52 45 53 45 52  writer.  A RESER
1b20: 56 45 44 5f 4c 4f 43 4b 20 69 73 20 6f 62 74 61  VED_LOCK is obta
1b30: 69 6e 65 64 20 62 79 20 6c 6f 63 6b 69 6e 67 0a  ined by locking.
1b40: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  ** a single byte
1b50: 20 6f 66 20 74 68 65 20 66 69 6c 65 20 74 68 61   of the file tha
1b60: 74 20 69 73 20 64 65 73 69 67 6e 61 74 65 64 20  t is designated 
1b70: 61 73 20 74 68 65 20 72 65 73 65 72 76 65 64 20  as the reserved 
1b80: 6c 6f 63 6b 20 62 79 74 65 2e 0a 2a 2a 20 41 20  lock byte..** A 
1b90: 50 45 4e 44 49 4e 47 5f 4c 4f 43 4b 20 69 73 20  PENDING_LOCK is 
1ba0: 6f 62 74 61 69 6e 65 64 20 62 79 20 6c 6f 63 6b  obtained by lock
1bb0: 69 6e 67 20 61 20 64 65 73 69 67 6e 61 74 65 64  ing a designated
1bc0: 20 62 79 74 65 20 64 69 66 66 65 72 65 6e 74 20   byte different 
1bd0: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 52 45 53 45  from.** the RESE
1be0: 52 56 45 44 5f 4c 4f 43 4b 20 62 79 74 65 2e 0a  RVED_LOCK byte..
1bf0: 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 4e 54 2f 32  **.** On WinNT/2
1c00: 4b 2f 58 50 20 73 79 73 74 65 6d 73 2c 20 4c 6f  K/XP systems, Lo
1c10: 63 6b 46 69 6c 65 45 78 28 29 20 61 6e 64 20 55  ckFileEx() and U
1c20: 6e 6c 6f 63 6b 46 69 6c 65 45 78 28 29 20 61 72  nlockFileEx() ar
1c30: 65 20 61 76 61 69 6c 61 62 6c 65 2c 0a 2a 2a 20  e available,.** 
1c40: 77 68 69 63 68 20 6d 65 61 6e 73 20 77 65 20 63  which means we c
1c50: 61 6e 20 75 73 65 20 72 65 61 64 65 72 2f 77 72  an use reader/wr
1c60: 69 74 65 72 20 6c 6f 63 6b 73 2e 20 20 57 68 65  iter locks.  Whe
1c70: 6e 20 72 65 61 64 65 72 2f 77 72 69 74 65 72 20  n reader/writer 
1c80: 6c 6f 63 6b 73 0a 2a 2a 20 61 72 65 20 75 73 65  locks.** are use
1c90: 64 2c 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 70  d, the lock is p
1ca0: 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 73 61 6d  laced on the sam
1cb0: 65 20 72 61 6e 67 65 20 6f 66 20 62 79 74 65 73  e range of bytes
1cc0: 20 74 68 61 74 20 69 73 20 75 73 65 64 0a 2a 2a   that is used.**
1cd0: 20 66 6f 72 20 70 72 6f 62 61 62 69 6c 69 73 74   for probabilist
1ce0: 69 63 20 6c 6f 63 6b 69 6e 67 20 69 6e 20 57 69  ic locking in Wi
1cf0: 6e 39 35 2f 39 38 2f 4d 45 2e 20 20 48 65 6e 63  n95/98/ME.  Henc
1d00: 65 2c 20 74 68 65 20 6c 6f 63 6b 69 6e 67 20 73  e, the locking s
1d10: 63 68 65 6d 65 0a 2a 2a 20 77 69 6c 6c 20 73 75  cheme.** will su
1d20: 70 70 6f 72 74 20 74 77 6f 20 6f 72 20 6d 6f 72  pport two or mor
1d30: 65 20 57 69 6e 39 35 20 72 65 61 64 65 72 73 20  e Win95 readers 
1d40: 6f 72 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 57  or two or more W
1d50: 69 6e 4e 54 20 72 65 61 64 65 72 73 2e 0a 2a 2a  inNT readers..**
1d60: 20 42 75 74 20 61 20 73 69 6e 67 6c 65 20 57 69   But a single Wi
1d70: 6e 39 35 20 72 65 61 64 65 72 20 77 69 6c 6c 20  n95 reader will 
1d80: 6c 6f 63 6b 20 6f 75 74 20 61 6c 6c 20 57 69 6e  lock out all Win
1d90: 4e 54 20 72 65 61 64 65 72 73 20 61 6e 64 20 61  NT readers and a
1da0: 20 73 69 6e 67 6c 65 0a 2a 2a 20 57 69 6e 4e 54   single.** WinNT
1db0: 20 72 65 61 64 65 72 20 77 69 6c 6c 20 6c 6f 63   reader will loc
1dc0: 6b 20 6f 75 74 20 61 6c 6c 20 6f 74 68 65 72 20  k out all other 
1dd0: 57 69 6e 39 35 20 72 65 61 64 65 72 73 2e 0a 2a  Win95 readers..*
1de0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1df0: 6e 67 20 23 64 65 66 69 6e 65 73 20 73 70 65 63  ng #defines spec
1e00: 69 66 79 20 74 68 65 20 72 61 6e 67 65 20 6f 66  ify the range of
1e10: 20 62 79 74 65 73 20 75 73 65 64 20 66 6f 72 20   bytes used for 
1e20: 6c 6f 63 6b 69 6e 67 2e 0a 2a 2a 20 53 48 41 52  locking..** SHAR
1e30: 45 44 5f 53 49 5a 45 20 69 73 20 74 68 65 20 6e  ED_SIZE is the n
1e40: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 61  umber of bytes a
1e50: 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20  vailable in the 
1e60: 70 6f 6f 6c 20 66 72 6f 6d 20 77 68 69 63 68 0a  pool from which.
1e70: 2a 2a 20 61 20 72 61 6e 64 6f 6d 20 62 79 74 65  ** a random byte
1e80: 20 69 73 20 73 65 6c 65 63 74 65 64 20 66 6f 72   is selected for
1e90: 20 61 20 73 68 61 72 65 64 20 6c 6f 63 6b 2e 20   a shared lock. 
1ea0: 20 54 68 65 20 70 6f 6f 6c 20 6f 66 20 62 79 74   The pool of byt
1eb0: 65 73 20 66 6f 72 0a 2a 2a 20 73 68 61 72 65 64  es for.** shared
1ec0: 20 6c 6f 63 6b 73 20 62 65 67 69 6e 73 20 61 74   locks begins at
1ed0: 20 53 48 41 52 45 44 5f 46 49 52 53 54 2e 20 0a   SHARED_FIRST. .
1ee0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 61 6d 65 20 6c  **.** The same l
1ef0: 6f 63 6b 69 6e 67 20 73 74 72 61 74 65 67 79 20  ocking strategy 
1f00: 61 6e 64 0a 2a 2a 20 62 79 74 65 20 72 61 6e 67  and.** byte rang
1f10: 65 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  es are used for 
1f20: 55 6e 69 78 2e 20 20 54 68 69 73 20 6c 65 61 76  Unix.  This leav
1f30: 65 73 20 6f 70 65 6e 20 74 68 65 20 70 6f 73 73  es open the poss
1f40: 69 62 6c 69 74 79 20 6f 66 20 68 61 76 69 6e 67  iblity of having
1f50: 0a 2a 2a 20 63 6c 69 65 6e 74 73 20 6f 6e 20 77  .** clients on w
1f60: 69 6e 39 35 2c 20 77 69 6e 4e 54 2c 20 61 6e 64  in95, winNT, and
1f70: 20 75 6e 69 78 20 61 6c 6c 20 74 61 6c 6b 69 6e   unix all talkin
1f80: 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20 73 68  g to the same sh
1f90: 61 72 65 64 20 66 69 6c 65 0a 2a 2a 20 61 6e 64  ared file.** and
1fa0: 20 61 6c 6c 20 6c 6f 63 6b 69 6e 67 20 63 6f 72   all locking cor
1fb0: 72 65 63 74 6c 79 2e 20 20 54 6f 20 64 6f 20 73  rectly.  To do s
1fc0: 6f 20 77 6f 75 6c 64 20 72 65 71 75 69 72 65 20  o would require 
1fd0: 74 68 61 74 20 73 61 6d 62 61 20 28 6f 72 20 77  that samba (or w
1fe0: 68 61 74 65 76 65 72 0a 2a 2a 20 74 6f 6f 6c 20  hatever.** tool 
1ff0: 69 73 20 62 65 69 6e 67 20 75 73 65 64 20 66 6f  is being used fo
2000: 72 20 66 69 6c 65 20 73 68 61 72 69 6e 67 29 20  r file sharing) 
2010: 69 6d 70 6c 65 6d 65 6e 74 73 20 6c 6f 63 6b 73  implements locks
2020: 20 63 6f 72 72 65 63 74 6c 79 20 62 65 74 77 65   correctly betwe
2030: 65 6e 0a 2a 2a 20 77 69 6e 64 6f 77 73 20 61 6e  en.** windows an
2040: 64 20 75 6e 69 78 2e 20 20 49 27 6d 20 67 75 65  d unix.  I'm gue
2050: 73 73 69 6e 67 20 74 68 61 74 20 69 73 6e 27 74  ssing that isn't
2060: 20 6c 69 6b 65 6c 79 20 74 6f 20 68 61 70 70 65   likely to happe
2070: 6e 2c 20 62 75 74 20 62 79 0a 2a 2a 20 75 73 69  n, but by.** usi
2080: 6e 67 20 74 68 65 20 73 61 6d 65 20 6c 6f 63 6b  ng the same lock
2090: 69 6e 67 20 72 61 6e 67 65 20 77 65 20 61 72 65  ing range we are
20a0: 20 61 74 20 6c 65 61 73 74 20 6f 70 65 6e 20 74   at least open t
20b0: 6f 20 74 68 65 20 70 6f 73 73 69 62 69 6c 69 74  o the possibilit
20c0: 79 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 63 6b 69 6e 67  y..**.** Locking
20d0: 20 69 6e 20 77 69 6e 64 6f 77 73 20 69 73 20 6d   in windows is m
20e0: 61 6e 64 69 74 6f 72 79 2e 20 20 46 6f 72 20 74  anditory.  For t
20f0: 68 69 73 20 72 65 61 73 6f 6e 2c 20 77 65 20 63  his reason, we c
2100: 61 6e 6e 6f 74 20 73 74 6f 72 65 0a 2a 2a 20 61  annot store.** a
2110: 63 74 75 61 6c 20 64 61 74 61 20 69 6e 20 74 68  ctual data in th
2120: 65 20 62 79 74 65 73 20 75 73 65 64 20 66 6f 72  e bytes used for
2130: 20 6c 6f 63 6b 69 6e 67 2e 20 20 54 68 65 20 70   locking.  The p
2140: 61 67 65 72 20 6e 65 76 65 72 20 61 6c 6c 6f 63  ager never alloc
2150: 61 74 65 73 0a 2a 2a 20 74 68 65 20 70 61 67 65  ates.** the page
2160: 73 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20 6c 6f  s involved in lo
2170: 63 6b 69 6e 67 20 74 68 65 72 65 66 6f 72 65 2e  cking therefore.
2180: 20 20 53 48 41 52 45 44 5f 53 49 5a 45 20 69 73    SHARED_SIZE is
2190: 20 73 65 6c 65 63 74 65 64 20 73 6f 0a 2a 2a 20   selected so.** 
21a0: 74 68 61 74 20 61 6c 6c 20 6c 6f 63 6b 73 20 77  that all locks w
21b0: 69 6c 6c 20 66 69 74 20 6f 6e 20 61 20 73 69 6e  ill fit on a sin
21c0: 67 6c 65 20 70 61 67 65 20 65 76 65 6e 20 61 74  gle page even at
21d0: 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 70 61 67   the minimum pag
21e0: 65 20 73 69 7a 65 2e 0a 2a 2a 20 50 45 4e 44 49  e size..** PENDI
21f0: 4e 47 5f 42 59 54 45 20 64 65 66 69 6e 65 73 20  NG_BYTE defines 
2200: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
2210: 20 74 68 65 20 6c 6f 63 6b 73 2e 20 20 42 79 20   the locks.  By 
2220: 64 65 66 61 75 6c 74 20 50 45 4e 44 49 4e 47 5f  default PENDING_
2230: 42 59 54 45 0a 2a 2a 20 69 73 20 73 65 74 20 68  BYTE.** is set h
2240: 69 67 68 20 73 6f 20 74 68 61 74 20 77 65 20 64  igh so that we d
2250: 6f 6e 27 74 20 68 61 76 65 20 74 6f 20 61 6c 6c  on't have to all
2260: 6f 63 61 74 65 20 61 6e 20 75 6e 75 73 65 64 20  ocate an unused 
2270: 70 61 67 65 20 65 78 63 65 70 74 0a 2a 2a 20 66  page except.** f
2280: 6f 72 20 76 65 72 79 20 6c 61 72 67 65 20 64 61  or very large da
2290: 74 61 62 61 73 65 73 2e 20 20 42 75 74 20 6f 6e  tabases.  But on
22a0: 65 20 73 68 6f 75 6c 64 20 74 65 73 74 20 74 68  e should test th
22b0: 65 20 70 61 67 65 20 73 6b 69 70 70 69 6e 67 20  e page skipping 
22c0: 6c 6f 67 69 63 20 0a 2a 2a 20 62 79 20 73 65 74  logic .** by set
22d0: 74 69 6e 67 20 50 45 4e 44 49 4e 47 5f 42 59 54  ting PENDING_BYT
22e0: 45 20 6c 6f 77 20 61 6e 64 20 72 75 6e 6e 69 6e  E low and runnin
22f0: 67 20 74 68 65 20 65 6e 74 69 72 65 20 72 65 67  g the entire reg
2300: 72 65 73 73 69 6f 6e 20 73 75 69 74 65 2e 0a 2a  ression suite..*
2310: 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68  *.** Changing th
2320: 65 20 76 61 6c 75 65 20 6f 66 20 50 45 4e 44 49  e value of PENDI
2330: 4e 47 5f 42 59 54 45 20 72 65 73 75 6c 74 73 20  NG_BYTE results 
2340: 69 6e 20 61 20 73 75 62 74 6c 79 20 69 6e 63 6f  in a subtly inco
2350: 6d 70 61 74 69 62 6c 65 0a 2a 2a 20 66 69 6c 65  mpatible.** file
2360: 20 66 6f 72 6d 61 74 2e 20 20 44 65 70 65 6e 64   format.  Depend
2370: 69 6e 67 20 6f 6e 20 68 6f 77 20 69 74 20 69 73  ing on how it is
2380: 20 63 68 61 6e 67 65 64 2c 20 79 6f 75 20 6d 69   changed, you mi
2390: 67 68 74 20 6e 6f 74 20 6e 6f 74 69 63 65 0a 2a  ght not notice.*
23a0: 2a 20 74 68 65 20 69 6e 63 6f 6d 70 61 74 69 62  * the incompatib
23b0: 69 6c 69 74 79 20 72 69 67 68 74 20 61 77 61 79  ility right away
23c0: 2c 20 65 76 65 6e 20 72 75 6e 6e 69 6e 67 20 61  , even running a
23d0: 20 66 75 6c 6c 20 72 65 67 72 65 73 73 69 6f 6e   full regression
23e0: 20 74 65 73 74 2e 0a 2a 2a 20 54 68 65 20 64 65   test..** The de
23f0: 66 61 75 6c 74 20 6c 6f 63 61 74 69 6f 6e 20 6f  fault location o
2400: 66 20 50 45 4e 44 49 4e 47 5f 42 59 54 45 20 69  f PENDING_BYTE i
2410: 73 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  s the first byte
2420: 20 70 61 73 74 20 74 68 65 0a 2a 2a 20 31 47 42   past the.** 1GB
2430: 20 62 6f 75 6e 64 61 72 79 2e 0a 2a 2a 0a 2a 2f   boundary..**.*/
2440: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2450: 4d 49 54 5f 57 53 44 0a 23 20 64 65 66 69 6e 65  MIT_WSD.# define
2460: 20 50 45 4e 44 49 4e 47 5f 42 59 54 45 20 20 20   PENDING_BYTE   
2470: 20 20 28 30 78 34 30 30 30 30 30 30 30 29 0a 23    (0x40000000).#
2480: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 50 45  else.# define PE
2490: 4e 44 49 4e 47 5f 42 59 54 45 20 20 20 20 20 20  NDING_BYTE      
24a0: 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79  sqlite3PendingBy
24b0: 74 65 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e  te.#endif.#defin
24c0: 65 20 52 45 53 45 52 56 45 44 5f 42 59 54 45 20  e RESERVED_BYTE 
24d0: 20 20 20 20 28 50 45 4e 44 49 4e 47 5f 42 59 54      (PENDING_BYT
24e0: 45 2b 31 29 0a 23 64 65 66 69 6e 65 20 53 48 41  E+1).#define SHA
24f0: 52 45 44 5f 46 49 52 53 54 20 20 20 20 20 20 28  RED_FIRST      (
2500: 50 45 4e 44 49 4e 47 5f 42 59 54 45 2b 32 29 0a  PENDING_BYTE+2).
2510: 23 64 65 66 69 6e 65 20 53 48 41 52 45 44 5f 53  #define SHARED_S
2520: 49 5a 45 20 20 20 20 20 20 20 35 31 30 0a 0a 2f  IZE       510../
2530: 2a 0a 2a 2a 20 57 72 61 70 70 65 72 20 61 72 6f  *.** Wrapper aro
2540: 75 6e 64 20 4f 53 20 73 70 65 63 69 66 69 63 20  und OS specific 
2550: 73 71 6c 69 74 65 33 5f 6f 73 5f 69 6e 69 74 28  sqlite3_os_init(
2560: 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 69  ) function..*/.i
2570: 6e 74 20 73 71 6c 69 74 65 33 4f 73 49 6e 69 74  nt sqlite3OsInit
2580: 28 76 6f 69 64 29 3b 0a 0a 2f 2a 20 0a 2a 2a 20  (void);../* .** 
2590: 46 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 61 63  Functions for ac
25a0: 63 65 73 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  cessing sqlite3_
25b0: 66 69 6c 65 20 6d 65 74 68 6f 64 73 20 0a 2a 2f  file methods .*/
25c0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 43 6c  .int sqlite3OsCl
25d0: 6f 73 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ose(sqlite3_file
25e0: 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  *);.int sqlite3O
25f0: 73 52 65 61 64 28 73 71 6c 69 74 65 33 5f 66 69  sRead(sqlite3_fi
2600: 6c 65 2a 2c 20 76 6f 69 64 2a 2c 20 69 6e 74 20  le*, void*, int 
2610: 61 6d 74 2c 20 69 36 34 20 6f 66 66 73 65 74 29  amt, i64 offset)
2620: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 57  ;.int sqlite3OsW
2630: 72 69 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  rite(sqlite3_fil
2640: 65 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  e*, const void*,
2650: 20 69 6e 74 20 61 6d 74 2c 20 69 36 34 20 6f 66   int amt, i64 of
2660: 66 73 65 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  fset);.int sqlit
2670: 65 33 4f 73 54 72 75 6e 63 61 74 65 28 73 71 6c  e3OsTruncate(sql
2680: 69 74 65 33 5f 66 69 6c 65 2a 2c 20 69 36 34 20  ite3_file*, i64 
2690: 73 69 7a 65 29 3b 0a 69 6e 74 20 73 71 6c 69 74  size);.int sqlit
26a0: 65 33 4f 73 53 79 6e 63 28 73 71 6c 69 74 65 33  e3OsSync(sqlite3
26b0: 5f 66 69 6c 65 2a 2c 20 69 6e 74 29 3b 0a 69 6e  _file*, int);.in
26c0: 74 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 53  t sqlite3OsFileS
26d0: 69 7a 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ize(sqlite3_file
26e0: 2a 2c 20 69 36 34 20 2a 70 53 69 7a 65 29 3b 0a  *, i64 *pSize);.
26f0: 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63  int sqlite3OsLoc
2700: 6b 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a 2c  k(sqlite3_file*,
2710: 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2720: 65 33 4f 73 55 6e 6c 6f 63 6b 28 73 71 6c 69 74  e3OsUnlock(sqlit
2730: 65 33 5f 66 69 6c 65 2a 2c 20 69 6e 74 29 3b 0a  e3_file*, int);.
2740: 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 43 68 65  int sqlite3OsChe
2750: 63 6b 52 65 73 65 72 76 65 64 4c 6f 63 6b 28 73  ckReservedLock(s
2760: 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 69 64 2c  qlite3_file *id,
2770: 20 69 6e 74 20 2a 70 52 65 73 4f 75 74 29 3b 0a   int *pResOut);.
2780: 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 46 69 6c  int sqlite3OsFil
2790: 65 43 6f 6e 74 72 6f 6c 28 73 71 6c 69 74 65 33  eControl(sqlite3
27a0: 5f 66 69 6c 65 2a 2c 69 6e 74 2c 76 6f 69 64 2a  _file*,int,void*
27b0: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
27c0: 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74  sFileControlHint
27d0: 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 2a 2c 69  (sqlite3_file*,i
27e0: 6e 74 2c 76 6f 69 64 2a 29 3b 0a 23 64 65 66 69  nt,void*);.#defi
27f0: 6e 65 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  ne SQLITE_FCNTL_
2800: 44 42 5f 55 4e 43 48 41 4e 47 45 44 20 30 78 63  DB_UNCHANGED 0xc
2810: 61 30 39 33 66 61 30 0a 69 6e 74 20 73 71 6c 69  a093fa0.int sqli
2820: 74 65 33 4f 73 53 65 63 74 6f 72 53 69 7a 65 28  te3OsSectorSize(
2830: 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 69 64  sqlite3_file *id
2840: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73  );.int sqlite3Os
2850: 44 65 76 69 63 65 43 68 61 72 61 63 74 65 72 69  DeviceCharacteri
2860: 73 74 69 63 73 28 73 71 6c 69 74 65 33 5f 66 69  stics(sqlite3_fi
2870: 6c 65 20 2a 69 64 29 3b 0a 69 6e 74 20 73 71 6c  le *id);.int sql
2880: 69 74 65 33 4f 73 53 68 6d 4d 61 70 28 73 71 6c  ite3OsShmMap(sql
2890: 69 74 65 33 5f 66 69 6c 65 20 2a 2c 69 6e 74 2c  ite3_file *,int,
28a0: 69 6e 74 2c 69 6e 74 2c 76 6f 69 64 20 76 6f 6c  int,int,void vol
28b0: 61 74 69 6c 65 20 2a 2a 29 3b 0a 69 6e 74 20 73  atile **);.int s
28c0: 71 6c 69 74 65 33 4f 73 53 68 6d 4c 6f 63 6b 28  qlite3OsShmLock(
28d0: 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 69 64  sqlite3_file *id
28e0: 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
28f0: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 73  ;.void sqlite3Os
2900: 53 68 6d 42 61 72 72 69 65 72 28 73 71 6c 69 74  ShmBarrier(sqlit
2910: 65 33 5f 66 69 6c 65 20 2a 69 64 29 3b 0a 69 6e  e3_file *id);.in
2920: 74 20 73 71 6c 69 74 65 33 4f 73 53 68 6d 55 6e  t sqlite3OsShmUn
2930: 6d 61 70 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  map(sqlite3_file
2940: 20 2a 69 64 2c 20 69 6e 74 29 3b 0a 0a 0a 2f 2a   *id, int);.../*
2950: 20 0a 2a 2a 20 46 75 6e 63 74 69 6f 6e 73 20 66   .** Functions f
2960: 6f 72 20 61 63 63 65 73 73 69 6e 67 20 73 71 6c  or accessing sql
2970: 69 74 65 33 5f 76 66 73 20 6d 65 74 68 6f 64 73  ite3_vfs methods
2980: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
2990: 4f 73 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76  OsOpen(sqlite3_v
29a0: 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  fs *, const char
29b0: 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65   *, sqlite3_file
29c0: 2a 2c 20 69 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a  *, int, int *);.
29d0: 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 44 65 6c  int sqlite3OsDel
29e0: 65 74 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20  ete(sqlite3_vfs 
29f0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2a00: 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2a10: 65 33 4f 73 41 63 63 65 73 73 28 73 71 6c 69 74  e3OsAccess(sqlit
2a20: 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
2a30: 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
2a40: 20 2a 70 52 65 73 4f 75 74 29 3b 0a 69 6e 74 20   *pResOut);.int 
2a50: 73 71 6c 69 74 65 33 4f 73 46 75 6c 6c 50 61 74  sqlite3OsFullPat
2a60: 68 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 76 66  hname(sqlite3_vf
2a70: 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  s *, const char 
2a80: 2a 2c 20 69 6e 74 2c 20 63 68 61 72 20 2a 29 3b  *, int, char *);
2a90: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2aa0: 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
2ab0: 49 4f 4e 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  ION.void *sqlite
2ac0: 33 4f 73 44 6c 4f 70 65 6e 28 73 71 6c 69 74 65  3OsDlOpen(sqlite
2ad0: 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
2ae0: 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har *);.void sql
2af0: 69 74 65 33 4f 73 44 6c 45 72 72 6f 72 28 73 71  ite3OsDlError(sq
2b00: 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 69 6e 74  lite3_vfs *, int
2b10: 2c 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  , char *);.void 
2b20: 28 2a 73 71 6c 69 74 65 33 4f 73 44 6c 53 79 6d  (*sqlite3OsDlSym
2b30: 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20  (sqlite3_vfs *, 
2b40: 76 6f 69 64 20 2a 2c 20 63 6f 6e 73 74 20 63 68  void *, const ch
2b50: 61 72 20 2a 29 29 28 76 6f 69 64 29 3b 0a 76 6f  ar *))(void);.vo
2b60: 69 64 20 73 71 6c 69 74 65 33 4f 73 44 6c 43 6c  id sqlite3OsDlCl
2b70: 6f 73 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20  ose(sqlite3_vfs 
2b80: 2a 2c 20 76 6f 69 64 20 2a 29 3b 0a 23 65 6e 64  *, void *);.#end
2b90: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2ba0: 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
2bb0: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f   */.int sqlite3O
2bc0: 73 52 61 6e 64 6f 6d 6e 65 73 73 28 73 71 6c 69  sRandomness(sqli
2bd0: 74 65 33 5f 76 66 73 20 2a 2c 20 69 6e 74 2c 20  te3_vfs *, int, 
2be0: 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
2bf0: 69 74 65 33 4f 73 53 6c 65 65 70 28 73 71 6c 69  ite3OsSleep(sqli
2c00: 74 65 33 5f 76 66 73 20 2a 2c 20 69 6e 74 29 3b  te3_vfs *, int);
2c10: 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 43 75  .int sqlite3OsCu
2c20: 72 72 65 6e 74 54 69 6d 65 49 6e 74 36 34 28 73  rrentTimeInt64(s
2c30: 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 73 71  qlite3_vfs *, sq
2c40: 6c 69 74 65 33 5f 69 6e 74 36 34 2a 29 3b 0a 0a  lite3_int64*);..
2c50: 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 6e 69 65 6e 63  /*.** Convenienc
2c60: 65 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20  e functions for 
2c70: 6f 70 65 6e 69 6e 67 20 61 6e 64 20 63 6c 6f 73  opening and clos
2c80: 69 6e 67 20 66 69 6c 65 73 20 75 73 69 6e 67 20  ing files using 
2c90: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  .** sqlite3_mall
2ca0: 6f 63 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73  oc() to obtain s
2cb0: 70 61 63 65 20 66 6f 72 20 74 68 65 20 66 69 6c  pace for the fil
2cc0: 65 2d 68 61 6e 64 6c 65 20 73 74 72 75 63 74 75  e-handle structu
2cd0: 72 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  re..*/.int sqlit
2ce0: 65 33 4f 73 4f 70 65 6e 4d 61 6c 6c 6f 63 28 73  e3OsOpenMalloc(s
2cf0: 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
2d00: 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
2d10: 74 65 33 5f 66 69 6c 65 20 2a 2a 2c 20 69 6e 74  te3_file **, int
2d20: 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,int*);.int sqli
2d30: 74 65 33 4f 73 43 6c 6f 73 65 46 72 65 65 28 73  te3OsCloseFree(s
2d40: 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
2d50: 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
2d60: 54 45 5f 4f 53 5f 48 5f 20 2a 2f 0a              TE_OS_H_ */.