/ Hex Artifact Content
Login

Artifact 6f529984a29511c7a3479cfe549c10bfa131532f:


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 43 45 20 2d 20 77 68 69 63 68 20 68  dowsCE - which h
0840: 61 73 20 61 20 6d 75 63 68 0a 2a 2a 20 72 65 64  as a much.** red
0850: 75 63 65 64 20 41 50 49 2e 0a 2a 2f 0a 23 69 66  uced API..*/.#if
0860: 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f   defined(_WIN32_
0870: 57 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 51  WCE).# define SQ
0880: 4c 49 54 45 5f 4f 53 5f 57 49 4e 43 45 20 31 0a  LITE_OS_WINCE 1.
0890: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
08a0: 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 43 45 20 30  QLITE_OS_WINCE 0
08b0: 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
08c0: 44 65 66 69 6e 65 20 74 68 65 20 6d 61 78 69 6d  Define the maxim
08d0: 75 6d 20 73 69 7a 65 20 6f 66 20 61 20 74 65 6d  um size of a tem
08e0: 70 6f 72 61 72 79 20 66 69 6c 65 6e 61 6d 65 0a  porary filename.
08f0: 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53  */.#if SQLITE_OS
0900: 5f 57 49 4e 0a 23 20 69 6e 63 6c 75 64 65 20 3c  _WIN.# include <
0910: 77 69 6e 64 6f 77 73 2e 68 3e 0a 23 20 64 65 66  windows.h>.# def
0920: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 4e  ine SQLITE_TEMPN
0930: 41 4d 45 5f 53 49 5a 45 20 28 4d 41 58 5f 50 41  AME_SIZE (MAX_PA
0940: 54 48 2b 35 30 29 0a 23 65 6c 69 66 20 53 51 4c  TH+50).#elif SQL
0950: 49 54 45 5f 4f 53 5f 4f 53 32 0a 23 20 69 66 20  ITE_OS_OS2.# if 
0960: 28 5f 5f 47 4e 55 43 5f 5f 20 3e 20 33 20 7c 7c  (__GNUC__ > 3 ||
0970: 20 5f 5f 47 4e 55 43 5f 5f 20 3d 3d 20 33 20 26   __GNUC__ == 3 &
0980: 26 20 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f  & __GNUC_MINOR__
0990: 20 3e 3d 20 33 29 20 26 26 20 64 65 66 69 6e 65   >= 3) && define
09a0: 64 28 4f 53 32 5f 48 49 47 48 5f 4d 45 4d 4f 52  d(OS2_HIGH_MEMOR
09b0: 59 29 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c 6f  Y).#  include <o
09c0: 73 32 73 61 66 65 2e 68 3e 20 2f 2a 20 68 61 73  s2safe.h> /* has
09d0: 20 74 6f 20 62 65 20 69 6e 63 6c 75 64 65 64 20   to be included 
09e0: 62 65 66 6f 72 65 20 6f 73 32 2e 68 20 66 6f 72  before os2.h for
09f0: 20 6c 69 6e 6b 69 6e 67 20 74 6f 20 77 6f 72 6b   linking to work
0a00: 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 20 64 65   */.# endif.# de
0a10: 66 69 6e 65 20 49 4e 43 4c 5f 44 4f 53 44 41 54  fine INCL_DOSDAT
0a20: 45 54 49 4d 45 0a 23 20 64 65 66 69 6e 65 20 49  ETIME.# define I
0a30: 4e 43 4c 5f 44 4f 53 46 49 4c 45 4d 47 52 0a 23  NCL_DOSFILEMGR.#
0a40: 20 64 65 66 69 6e 65 20 49 4e 43 4c 5f 44 4f 53   define INCL_DOS
0a50: 45 52 52 4f 52 53 0a 23 20 64 65 66 69 6e 65 20  ERRORS.# define 
0a60: 49 4e 43 4c 5f 44 4f 53 4d 49 53 43 0a 23 20 64  INCL_DOSMISC.# d
0a70: 65 66 69 6e 65 20 49 4e 43 4c 5f 44 4f 53 50 52  efine INCL_DOSPR
0a80: 4f 43 45 53 53 0a 23 20 64 65 66 69 6e 65 20 49  OCESS.# define I
0a90: 4e 43 4c 5f 44 4f 53 4d 4f 44 55 4c 45 4d 47 52  NCL_DOSMODULEMGR
0aa0: 0a 23 20 64 65 66 69 6e 65 20 49 4e 43 4c 5f 44  .# define INCL_D
0ab0: 4f 53 53 45 4d 41 50 48 4f 52 45 53 0a 23 20 69  OSSEMAPHORES.# i
0ac0: 6e 63 6c 75 64 65 20 3c 6f 73 32 2e 68 3e 0a 23  nclude <os2.h>.#
0ad0: 20 69 6e 63 6c 75 64 65 20 3c 75 63 6f 6e 76 2e   include <uconv.
0ae0: 68 3e 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  h>.# define SQLI
0af0: 54 45 5f 54 45 4d 50 4e 41 4d 45 5f 53 49 5a 45  TE_TEMPNAME_SIZE
0b00: 20 28 43 43 48 4d 41 58 50 41 54 48 43 4f 4d 50   (CCHMAXPATHCOMP
0b10: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0b20: 20 53 51 4c 49 54 45 5f 54 45 4d 50 4e 41 4d 45   SQLITE_TEMPNAME
0b30: 5f 53 49 5a 45 20 32 30 30 0a 23 65 6e 64 69 66  _SIZE 200.#endif
0b40: 0a 0a 2f 2a 20 49 66 20 74 68 65 20 53 45 54 5f  ../* If the SET_
0b50: 46 55 4c 4c 53 59 4e 43 20 6d 61 63 72 6f 20 69  FULLSYNC macro i
0b60: 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 20 61 62  s not defined ab
0b70: 6f 76 65 2c 20 74 68 65 6e 20 6d 61 6b 65 20 69  ove, then make i
0b80: 74 0a 2a 2a 20 61 20 6e 6f 2d 6f 70 0a 2a 2f 0a  t.** a no-op.*/.
0b90: 23 69 66 6e 64 65 66 20 53 45 54 5f 46 55 4c 4c  #ifndef SET_FULL
0ba0: 53 59 4e 43 0a 23 20 64 65 66 69 6e 65 20 53 45  SYNC.# define SE
0bb0: 54 5f 46 55 4c 4c 53 59 4e 43 28 78 2c 79 29 0a  T_FULLSYNC(x,y).
0bc0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
0bd0: 65 20 64 65 66 61 75 6c 74 20 73 69 7a 65 20 6f  e default size o
0be0: 66 20 61 20 64 69 73 6b 20 73 65 63 74 6f 72 0a  f a disk sector.
0bf0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
0c00: 45 5f 44 45 46 41 55 4c 54 5f 53 45 43 54 4f 52  E_DEFAULT_SECTOR
0c10: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
0c20: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 45  QLITE_DEFAULT_SE
0c30: 43 54 4f 52 5f 53 49 5a 45 20 35 31 32 0a 23 65  CTOR_SIZE 512.#e
0c40: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 6d 70  ndif../*.** Temp
0c50: 6f 72 61 72 79 20 66 69 6c 65 73 20 61 72 65 20  orary files are 
0c60: 6e 61 6d 65 64 20 73 74 61 72 74 69 6e 67 20 77  named starting w
0c70: 69 74 68 20 74 68 69 73 20 70 72 65 66 69 78 20  ith this prefix 
0c80: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 31 36 20 72  followed by 16 r
0c90: 61 6e 64 6f 6d 0a 2a 2a 20 61 6c 70 68 61 6e 75  andom.** alphanu
0ca0: 6d 65 72 69 63 20 63 68 61 72 61 63 74 65 72 73  meric characters
0cb0: 2c 20 61 6e 64 20 6e 6f 20 66 69 6c 65 20 65 78  , and no file ex
0cc0: 74 65 6e 73 69 6f 6e 2e 20 54 68 65 79 20 61 72  tension. They ar
0cd0: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 0a  e stored in the.
0ce0: 2a 2a 20 4f 53 27 73 20 73 74 61 6e 64 61 72 64  ** OS's standard
0cf0: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 20   temporary file 
0d00: 64 69 72 65 63 74 6f 72 79 2c 20 61 6e 64 20 61  directory, and a
0d10: 72 65 20 64 65 6c 65 74 65 64 20 70 72 69 6f 72  re deleted prior
0d20: 20 74 6f 20 65 78 69 74 2e 0a 2a 2a 20 49 66 20   to exit..** If 
0d30: 73 71 6c 69 74 65 20 69 73 20 62 65 69 6e 67 20  sqlite is being 
0d40: 65 6d 62 65 64 64 65 64 20 69 6e 20 61 6e 6f 74  embedded in anot
0d50: 68 65 72 20 70 72 6f 67 72 61 6d 2c 20 79 6f 75  her program, you
0d60: 20 6d 61 79 20 77 69 73 68 20 74 6f 20 63 68 61   may wish to cha
0d70: 6e 67 65 20 74 68 65 0a 2a 2a 20 70 72 65 66 69  nge the.** prefi
0d80: 78 20 74 6f 20 72 65 66 6c 65 63 74 20 79 6f 75  x to reflect you
0d90: 72 20 70 72 6f 67 72 61 6d 27 73 20 6e 61 6d 65  r program's name
0da0: 2c 20 73 6f 20 74 68 61 74 20 69 66 20 79 6f 75  , so that if you
0db0: 72 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a  r program exits.
0dc0: 2a 2a 20 70 72 65 6d 61 74 75 72 65 6c 79 2c 20  ** prematurely, 
0dd0: 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 66 69  old temporary fi
0de0: 6c 65 73 20 63 61 6e 20 62 65 20 65 61 73 69 6c  les can be easil
0df0: 79 20 69 64 65 6e 74 69 66 69 65 64 2e 20 54 68  y identified. Th
0e00: 69 73 20 63 61 6e 20 62 65 20 64 6f 6e 65 0a 2a  is can be done.*
0e10: 2a 20 75 73 69 6e 67 20 2d 44 53 51 4c 49 54 45  * using -DSQLITE
0e20: 5f 54 45 4d 50 5f 46 49 4c 45 5f 50 52 45 46 49  _TEMP_FILE_PREFI
0e30: 58 3d 6d 79 70 72 65 66 69 78 5f 20 6f 6e 20 74  X=myprefix_ on t
0e40: 68 65 20 63 6f 6d 70 69 6c 65 72 20 63 6f 6d 6d  he compiler comm
0e50: 61 6e 64 20 6c 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20  and line..**.** 
0e60: 32 30 30 36 2d 31 30 2d 33 31 3a 20 20 54 68 65  2006-10-31:  The
0e70: 20 64 65 66 61 75 6c 74 20 70 72 65 66 69 78 20   default prefix 
0e80: 75 73 65 64 20 74 6f 20 62 65 20 22 73 71 6c 69  used to be "sqli
0e90: 74 65 5f 22 2e 20 20 42 75 74 20 74 68 65 6e 0a  te_".  But then.
0ea0: 2a 2a 20 4d 63 61 66 65 65 20 73 74 61 72 74 65  ** Mcafee starte
0eb0: 64 20 75 73 69 6e 67 20 53 51 4c 69 74 65 20 69  d using SQLite i
0ec0: 6e 20 74 68 65 69 72 20 61 6e 74 69 2d 76 69 72  n their anti-vir
0ed0: 75 73 20 70 72 6f 64 75 63 74 20 61 6e 64 20 69  us product and i
0ee0: 74 0a 2a 2a 20 73 74 61 72 74 65 64 20 70 75 74  t.** started put
0ef0: 74 69 6e 67 20 66 69 6c 65 73 20 77 69 74 68 20  ting files with 
0f00: 74 68 65 20 22 73 71 6c 69 74 65 22 20 6e 61 6d  the "sqlite" nam
0f10: 65 20 69 6e 20 74 68 65 20 63 3a 2f 74 65 6d 70  e in the c:/temp
0f20: 20 66 6f 6c 64 65 72 2e 0a 2a 2a 20 54 68 69 73   folder..** This
0f30: 20 61 6e 6e 6f 79 65 64 20 6d 61 6e 79 20 77 69   annoyed many wi
0f40: 6e 64 6f 77 73 20 75 73 65 72 73 2e 20 20 54 68  ndows users.  Th
0f50: 6f 73 65 20 75 73 65 72 73 20 77 6f 75 6c 64 20  ose users would 
0f60: 74 68 65 6e 20 64 6f 20 61 20 0a 2a 2a 20 47 6f  then do a .** Go
0f70: 6f 67 6c 65 20 73 65 61 72 63 68 20 66 6f 72 20  ogle search for 
0f80: 22 73 71 6c 69 74 65 22 2c 20 66 69 6e 64 20 74  "sqlite", find t
0f90: 68 65 20 74 65 6c 65 70 68 6f 6e 65 20 6e 75 6d  he telephone num
0fa0: 62 65 72 73 20 6f 66 20 74 68 65 0a 2a 2a 20 64  bers of the.** d
0fb0: 65 76 65 6c 6f 70 65 72 73 20 61 6e 64 20 63 61  evelopers and ca
0fc0: 6c 6c 20 74 6f 20 77 61 6b 65 20 74 68 65 6d 20  ll to wake them 
0fd0: 75 70 20 61 74 20 6e 69 67 68 74 20 61 6e 64 20  up at night and 
0fe0: 63 6f 6d 70 6c 61 69 6e 2e 0a 2a 2a 20 46 6f 72  complain..** For
0ff0: 20 74 68 69 73 20 72 65 61 73 6f 6e 2c 20 74 68   this reason, th
1000: 65 20 64 65 66 61 75 6c 74 20 6e 61 6d 65 20 70  e default name p
1010: 72 65 66 69 78 20 69 73 20 63 68 61 6e 67 65 64  refix is changed
1020: 20 74 6f 20 62 65 20 22 73 71 6c 69 74 65 22 20   to be "sqlite" 
1030: 0a 2a 2a 20 73 70 65 6c 6c 65 64 20 62 61 63 6b  .** spelled back
1040: 77 61 72 64 73 2e 20 20 53 6f 20 74 68 65 20 74  wards.  So the t
1050: 65 6d 70 20 66 69 6c 65 73 20 61 72 65 20 73 74  emp files are st
1060: 69 6c 6c 20 69 64 65 6e 74 69 66 69 65 64 2c 20  ill identified, 
1070: 62 75 74 0a 2a 2a 20 61 6e 79 62 6f 64 79 20 73  but.** anybody s
1080: 6d 61 72 74 20 65 6e 6f 75 67 68 20 74 6f 20 66  mart enough to f
1090: 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 63 6f  igure out the co
10a0: 64 65 20 69 73 20 61 6c 73 6f 20 6c 69 6b 65 6c  de is also likel
10b0: 79 20 73 6d 61 72 74 0a 2a 2a 20 65 6e 6f 75 67  y smart.** enoug
10c0: 68 20 74 6f 20 6b 6e 6f 77 20 74 68 61 74 20 63  h to know that c
10d0: 61 6c 6c 69 6e 67 20 74 68 65 20 64 65 76 65 6c  alling the devel
10e0: 6f 70 65 72 20 77 69 6c 6c 20 6e 6f 74 20 68 65  oper will not he
10f0: 6c 70 20 67 65 74 20 72 69 64 0a 2a 2a 20 6f 66  lp get rid.** of
1100: 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2f 0a 23 69   the file..*/.#i
1110: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d  fndef SQLITE_TEM
1120: 50 5f 46 49 4c 45 5f 50 52 45 46 49 58 0a 23 20  P_FILE_PREFIX.# 
1130: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45  define SQLITE_TE
1140: 4d 50 5f 46 49 4c 45 5f 50 52 45 46 49 58 20 22  MP_FILE_PREFIX "
1150: 65 74 69 6c 71 73 5f 22 0a 23 65 6e 64 69 66 0a  etilqs_".#endif.
1160: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1170: 77 69 6e 67 20 76 61 6c 75 65 73 20 6d 61 79 20  wing values may 
1180: 62 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65  be passed as the
1190: 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74   second argument
11a0: 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 4f 73   to.** sqlite3Os
11b0: 4c 6f 63 6b 28 29 2e 20 54 68 65 20 76 61 72 69  Lock(). The vari
11c0: 6f 75 73 20 6c 6f 63 6b 73 20 65 78 68 69 62 69  ous locks exhibi
11d0: 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  t the following 
11e0: 73 65 6d 61 6e 74 69 63 73 3a 0a 2a 2a 0a 2a 2a  semantics:.**.**
11f0: 20 53 48 41 52 45 44 3a 20 20 20 20 41 6e 79 20   SHARED:    Any 
1200: 6e 75 6d 62 65 72 20 6f 66 20 70 72 6f 63 65 73  number of proces
1210: 73 65 73 20 6d 61 79 20 68 6f 6c 64 20 61 20 53  ses may hold a S
1220: 48 41 52 45 44 20 6c 6f 63 6b 20 73 69 6d 75 6c  HARED lock simul
1230: 74 61 6e 65 6f 75 73 6c 79 2e 0a 2a 2a 20 52 45  taneously..** RE
1240: 53 45 52 56 45 44 3a 20 20 41 20 73 69 6e 67 6c  SERVED:  A singl
1250: 65 20 70 72 6f 63 65 73 73 20 6d 61 79 20 68 6f  e process may ho
1260: 6c 64 20 61 20 52 45 53 45 52 56 45 44 20 6c 6f  ld a RESERVED lo
1270: 63 6b 20 6f 6e 20 61 20 66 69 6c 65 20 61 74 0a  ck on a file at.
1280: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 61 6e  **            an
1290: 79 20 74 69 6d 65 2e 20 4f 74 68 65 72 20 70 72  y time. Other pr
12a0: 6f 63 65 73 73 65 73 20 6d 61 79 20 68 6f 6c 64  ocesses may hold
12b0: 20 61 6e 64 20 6f 62 74 61 69 6e 20 6e 65 77 20   and obtain new 
12c0: 53 48 41 52 45 44 20 6c 6f 63 6b 73 2e 0a 2a 2a  SHARED locks..**
12d0: 20 50 45 4e 44 49 4e 47 3a 20 20 20 41 20 73 69   PENDING:   A si
12e0: 6e 67 6c 65 20 70 72 6f 63 65 73 73 20 6d 61 79  ngle process may
12f0: 20 68 6f 6c 64 20 61 20 50 45 4e 44 49 4e 47 20   hold a PENDING 
1300: 6c 6f 63 6b 20 6f 6e 20 61 20 66 69 6c 65 20 61  lock on a file a
1310: 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1320: 61 6e 79 20 6f 6e 65 20 74 69 6d 65 2e 20 45 78  any one time. Ex
1330: 69 73 74 69 6e 67 20 53 48 41 52 45 44 20 6c 6f  isting SHARED lo
1340: 63 6b 73 20 6d 61 79 20 70 65 72 73 69 73 74 2c  cks may persist,
1350: 20 62 75 74 20 6e 6f 20 6e 65 77 0a 2a 2a 20 20   but no new.**  
1360: 20 20 20 20 20 20 20 20 20 20 53 48 41 52 45 44            SHARED
1370: 20 6c 6f 63 6b 73 20 6d 61 79 20 62 65 20 6f 62   locks may be ob
1380: 74 61 69 6e 65 64 20 62 79 20 6f 74 68 65 72 20  tained by other 
1390: 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2a 20 45 58  processes..** EX
13a0: 43 4c 55 53 49 56 45 3a 20 41 6e 20 45 58 43 4c  CLUSIVE: An EXCL
13b0: 55 53 49 56 45 20 6c 6f 63 6b 20 70 72 65 63 6c  USIVE lock precl
13c0: 75 64 65 73 20 61 6c 6c 20 6f 74 68 65 72 20 6c  udes all other l
13d0: 6f 63 6b 73 2e 0a 2a 2a 0a 2a 2a 20 50 45 4e 44  ocks..**.** PEND
13e0: 49 4e 47 5f 4c 4f 43 4b 20 6d 61 79 20 6e 6f 74  ING_LOCK may not
13f0: 20 62 65 20 70 61 73 73 65 64 20 64 69 72 65 63   be passed direc
1400: 74 6c 79 20 74 6f 20 73 71 6c 69 74 65 33 4f 73  tly to sqlite3Os
1410: 4c 6f 63 6b 28 29 2e 20 49 6e 73 74 65 61 64 2c  Lock(). Instead,
1420: 20 61 0a 2a 2a 20 70 72 6f 63 65 73 73 20 74 68   a.** process th
1430: 61 74 20 72 65 71 75 65 73 74 73 20 61 6e 20 45  at requests an E
1440: 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61  XCLUSIVE lock ma
1450: 79 20 61 63 74 75 61 6c 6c 79 20 6f 62 74 61 69  y actually obtai
1460: 6e 20 61 20 50 45 4e 44 49 4e 47 0a 2a 2a 20 6c  n a PENDING.** l
1470: 6f 63 6b 2e 20 54 68 69 73 20 63 61 6e 20 62 65  ock. This can be
1480: 20 75 70 67 72 61 64 65 64 20 74 6f 20 61 6e 20   upgraded to an 
1490: 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 62  EXCLUSIVE lock b
14a0: 79 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 63  y a subsequent c
14b0: 61 6c 6c 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  all to.** sqlite
14c0: 33 4f 73 4c 6f 63 6b 28 29 2e 0a 2a 2f 0a 23 64  3OsLock()..*/.#d
14d0: 65 66 69 6e 65 20 4e 4f 5f 4c 4f 43 4b 20 20 20  efine NO_LOCK   
14e0: 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
14f0: 53 48 41 52 45 44 5f 4c 4f 43 4b 20 20 20 20 20  SHARED_LOCK     
1500: 31 0a 23 64 65 66 69 6e 65 20 52 45 53 45 52 56  1.#define RESERV
1510: 45 44 5f 4c 4f 43 4b 20 20 20 32 0a 23 64 65 66  ED_LOCK   2.#def
1520: 69 6e 65 20 50 45 4e 44 49 4e 47 5f 4c 4f 43 4b  ine PENDING_LOCK
1530: 20 20 20 20 33 0a 23 64 65 66 69 6e 65 20 45 58      3.#define EX
1540: 43 4c 55 53 49 56 45 5f 4c 4f 43 4b 20 20 34 0a  CLUSIVE_LOCK  4.
1550: 0a 2f 2a 0a 2a 2a 20 46 69 6c 65 20 4c 6f 63 6b  ./*.** File Lock
1560: 69 6e 67 20 4e 6f 74 65 73 3a 20 20 28 4d 6f 73  ing Notes:  (Mos
1570: 74 6c 79 20 61 62 6f 75 74 20 77 69 6e 64 6f 77  tly about window
1580: 73 20 62 75 74 20 61 6c 73 6f 20 73 6f 6d 65 20  s but also some 
1590: 69 6e 66 6f 20 66 6f 72 20 55 6e 69 78 29 0a 2a  info for Unix).*
15a0: 2a 0a 2a 2a 20 57 65 20 63 61 6e 6e 6f 74 20 75  *.** We cannot u
15b0: 73 65 20 4c 6f 63 6b 46 69 6c 65 45 78 28 29 20  se LockFileEx() 
15c0: 6f 72 20 55 6e 6c 6f 63 6b 46 69 6c 65 45 78 28  or UnlockFileEx(
15d0: 29 20 6f 6e 20 57 69 6e 39 35 2f 39 38 2f 4d 45  ) on Win95/98/ME
15e0: 20 62 65 63 61 75 73 65 0a 2a 2a 20 74 68 6f 73   because.** thos
15f0: 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
1600: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 2e 20 20  not available.  
1610: 53 6f 20 77 65 20 75 73 65 20 6f 6e 6c 79 20 4c  So we use only L
1620: 6f 63 6b 46 69 6c 65 28 29 20 61 6e 64 0a 2a 2a  ockFile() and.**
1630: 20 55 6e 6c 6f 63 6b 46 69 6c 65 28 29 2e 0a 2a   UnlockFile()..*
1640: 2a 0a 2a 2a 20 4c 6f 63 6b 46 69 6c 65 28 29 20  *.** LockFile() 
1650: 70 72 65 76 65 6e 74 73 20 6e 6f 74 20 6a 75 73  prevents not jus
1660: 74 20 77 72 69 74 69 6e 67 20 62 75 74 20 61 6c  t writing but al
1670: 73 6f 20 72 65 61 64 69 6e 67 20 62 79 20 6f 74  so reading by ot
1680: 68 65 72 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a  her processes..*
1690: 2a 20 41 20 53 48 41 52 45 44 5f 4c 4f 43 4b 20  * A SHARED_LOCK 
16a0: 69 73 20 6f 62 74 61 69 6e 65 64 20 62 79 20 6c  is obtained by l
16b0: 6f 63 6b 69 6e 67 20 61 20 73 69 6e 67 6c 65 20  ocking a single 
16c0: 72 61 6e 64 6f 6d 6c 79 2d 63 68 6f 73 65 6e 20  randomly-chosen 
16d0: 0a 2a 2a 20 62 79 74 65 20 6f 75 74 20 6f 66 20  .** byte out of 
16e0: 61 20 73 70 65 63 69 66 69 63 20 72 61 6e 67 65  a specific range
16f0: 20 6f 66 20 62 79 74 65 73 2e 20 54 68 65 20 6c   of bytes. The l
1700: 6f 63 6b 20 62 79 74 65 20 69 73 20 6f 62 74 61  ock byte is obta
1710: 69 6e 65 64 20 61 74 20 0a 2a 2a 20 72 61 6e 64  ined at .** rand
1720: 6f 6d 20 73 6f 20 74 77 6f 20 73 65 70 61 72 61  om so two separa
1730: 74 65 20 72 65 61 64 65 72 73 20 63 61 6e 20 70  te readers can p
1740: 72 6f 62 61 62 6c 79 20 61 63 63 65 73 73 20 74  robably access t
1750: 68 65 20 66 69 6c 65 20 61 74 20 74 68 65 20 0a  he file at the .
1760: 2a 2a 20 73 61 6d 65 20 74 69 6d 65 2c 20 75 6e  ** same time, un
1770: 6c 65 73 73 20 74 68 65 79 20 61 72 65 20 75 6e  less they are un
1780: 6c 75 63 6b 79 20 61 6e 64 20 63 68 6f 6f 73 65  lucky and choose
1790: 20 74 68 65 20 73 61 6d 65 20 6c 6f 63 6b 20 62   the same lock b
17a0: 79 74 65 2e 0a 2a 2a 20 41 6e 20 45 58 43 4c 55  yte..** An EXCLU
17b0: 53 49 56 45 5f 4c 4f 43 4b 20 69 73 20 6f 62 74  SIVE_LOCK is obt
17c0: 61 69 6e 65 64 20 62 79 20 6c 6f 63 6b 69 6e 67  ained by locking
17d0: 20 61 6c 6c 20 62 79 74 65 73 20 69 6e 20 74 68   all bytes in th
17e0: 65 20 72 61 6e 67 65 2e 0a 2a 2a 20 54 68 65 72  e range..** Ther
17f0: 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 6f 6e  e can only be on
1800: 65 20 77 72 69 74 65 72 2e 20 20 41 20 52 45 53  e writer.  A RES
1810: 45 52 56 45 44 5f 4c 4f 43 4b 20 69 73 20 6f 62  ERVED_LOCK is ob
1820: 74 61 69 6e 65 64 20 62 79 20 6c 6f 63 6b 69 6e  tained by lockin
1830: 67 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 79  g.** a single by
1840: 74 65 20 6f 66 20 74 68 65 20 66 69 6c 65 20 74  te of the file t
1850: 68 61 74 20 69 73 20 64 65 73 69 67 6e 61 74 65  hat is designate
1860: 64 20 61 73 20 74 68 65 20 72 65 73 65 72 76 65  d as the reserve
1870: 64 20 6c 6f 63 6b 20 62 79 74 65 2e 0a 2a 2a 20  d lock byte..** 
1880: 41 20 50 45 4e 44 49 4e 47 5f 4c 4f 43 4b 20 69  A PENDING_LOCK i
1890: 73 20 6f 62 74 61 69 6e 65 64 20 62 79 20 6c 6f  s obtained by lo
18a0: 63 6b 69 6e 67 20 61 20 64 65 73 69 67 6e 61 74  cking a designat
18b0: 65 64 20 62 79 74 65 20 64 69 66 66 65 72 65 6e  ed byte differen
18c0: 74 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 52 45  t from.** the RE
18d0: 53 45 52 56 45 44 5f 4c 4f 43 4b 20 62 79 74 65  SERVED_LOCK byte
18e0: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 4e 54  ..**.** On WinNT
18f0: 2f 32 4b 2f 58 50 20 73 79 73 74 65 6d 73 2c 20  /2K/XP systems, 
1900: 4c 6f 63 6b 46 69 6c 65 45 78 28 29 20 61 6e 64  LockFileEx() and
1910: 20 55 6e 6c 6f 63 6b 46 69 6c 65 45 78 28 29 20   UnlockFileEx() 
1920: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 2c 0a 2a  are available,.*
1930: 2a 20 77 68 69 63 68 20 6d 65 61 6e 73 20 77 65  * which means we
1940: 20 63 61 6e 20 75 73 65 20 72 65 61 64 65 72 2f   can use reader/
1950: 77 72 69 74 65 72 20 6c 6f 63 6b 73 2e 20 20 57  writer locks.  W
1960: 68 65 6e 20 72 65 61 64 65 72 2f 77 72 69 74 65  hen reader/write
1970: 72 20 6c 6f 63 6b 73 0a 2a 2a 20 61 72 65 20 75  r locks.** are u
1980: 73 65 64 2c 20 74 68 65 20 6c 6f 63 6b 20 69 73  sed, the lock is
1990: 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 73   placed on the s
19a0: 61 6d 65 20 72 61 6e 67 65 20 6f 66 20 62 79 74  ame range of byt
19b0: 65 73 20 74 68 61 74 20 69 73 20 75 73 65 64 0a  es that is used.
19c0: 2a 2a 20 66 6f 72 20 70 72 6f 62 61 62 69 6c 69  ** for probabili
19d0: 73 74 69 63 20 6c 6f 63 6b 69 6e 67 20 69 6e 20  stic locking in 
19e0: 57 69 6e 39 35 2f 39 38 2f 4d 45 2e 20 20 48 65  Win95/98/ME.  He
19f0: 6e 63 65 2c 20 74 68 65 20 6c 6f 63 6b 69 6e 67  nce, the locking
1a00: 20 73 63 68 65 6d 65 0a 2a 2a 20 77 69 6c 6c 20   scheme.** will 
1a10: 73 75 70 70 6f 72 74 20 74 77 6f 20 6f 72 20 6d  support two or m
1a20: 6f 72 65 20 57 69 6e 39 35 20 72 65 61 64 65 72  ore Win95 reader
1a30: 73 20 6f 72 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s or two or more
1a40: 20 57 69 6e 4e 54 20 72 65 61 64 65 72 73 2e 0a   WinNT readers..
1a50: 2a 2a 20 42 75 74 20 61 20 73 69 6e 67 6c 65 20  ** But a single 
1a60: 57 69 6e 39 35 20 72 65 61 64 65 72 20 77 69 6c  Win95 reader wil
1a70: 6c 20 6c 6f 63 6b 20 6f 75 74 20 61 6c 6c 20 57  l lock out all W
1a80: 69 6e 4e 54 20 72 65 61 64 65 72 73 20 61 6e 64  inNT readers and
1a90: 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 57 69 6e   a single.** Win
1aa0: 4e 54 20 72 65 61 64 65 72 20 77 69 6c 6c 20 6c  NT reader will l
1ab0: 6f 63 6b 20 6f 75 74 20 61 6c 6c 20 6f 74 68 65  ock out all othe
1ac0: 72 20 57 69 6e 39 35 20 72 65 61 64 65 72 73 2e  r Win95 readers.
1ad0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  .**.** The follo
1ae0: 77 69 6e 67 20 23 64 65 66 69 6e 65 73 20 73 70  wing #defines sp
1af0: 65 63 69 66 79 20 74 68 65 20 72 61 6e 67 65 20  ecify the range 
1b00: 6f 66 20 62 79 74 65 73 20 75 73 65 64 20 66 6f  of bytes used fo
1b10: 72 20 6c 6f 63 6b 69 6e 67 2e 0a 2a 2a 20 53 48  r locking..** SH
1b20: 41 52 45 44 5f 53 49 5a 45 20 69 73 20 74 68 65  ARED_SIZE is the
1b30: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
1b40: 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68   available in th
1b50: 65 20 70 6f 6f 6c 20 66 72 6f 6d 20 77 68 69 63  e pool from whic
1b60: 68 0a 2a 2a 20 61 20 72 61 6e 64 6f 6d 20 62 79  h.** a random by
1b70: 74 65 20 69 73 20 73 65 6c 65 63 74 65 64 20 66  te is selected f
1b80: 6f 72 20 61 20 73 68 61 72 65 64 20 6c 6f 63 6b  or a shared lock
1b90: 2e 20 20 54 68 65 20 70 6f 6f 6c 20 6f 66 20 62  .  The pool of b
1ba0: 79 74 65 73 20 66 6f 72 0a 2a 2a 20 73 68 61 72  ytes for.** shar
1bb0: 65 64 20 6c 6f 63 6b 73 20 62 65 67 69 6e 73 20  ed locks begins 
1bc0: 61 74 20 53 48 41 52 45 44 5f 46 49 52 53 54 2e  at SHARED_FIRST.
1bd0: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 61 6d 65   .**.** The same
1be0: 20 6c 6f 63 6b 69 6e 67 20 73 74 72 61 74 65 67   locking strateg
1bf0: 79 20 61 6e 64 0a 2a 2a 20 62 79 74 65 20 72 61  y and.** byte ra
1c00: 6e 67 65 73 20 61 72 65 20 75 73 65 64 20 66 6f  nges are used fo
1c10: 72 20 55 6e 69 78 2e 20 20 54 68 69 73 20 6c 65  r Unix.  This le
1c20: 61 76 65 73 20 6f 70 65 6e 20 74 68 65 20 70 6f  aves open the po
1c30: 73 73 69 62 6c 69 74 79 20 6f 66 20 68 61 76 69  ssiblity of havi
1c40: 6e 67 0a 2a 2a 20 63 6c 69 65 6e 74 73 20 6f 6e  ng.** clients on
1c50: 20 77 69 6e 39 35 2c 20 77 69 6e 4e 54 2c 20 61   win95, winNT, a
1c60: 6e 64 20 75 6e 69 78 20 61 6c 6c 20 74 61 6c 6b  nd unix all talk
1c70: 69 6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20  ing to the same 
1c80: 73 68 61 72 65 64 20 66 69 6c 65 0a 2a 2a 20 61  shared file.** a
1c90: 6e 64 20 61 6c 6c 20 6c 6f 63 6b 69 6e 67 20 63  nd all locking c
1ca0: 6f 72 72 65 63 74 6c 79 2e 20 20 54 6f 20 64 6f  orrectly.  To do
1cb0: 20 73 6f 20 77 6f 75 6c 64 20 72 65 71 75 69 72   so would requir
1cc0: 65 20 74 68 61 74 20 73 61 6d 62 61 20 28 6f 72  e that samba (or
1cd0: 20 77 68 61 74 65 76 65 72 0a 2a 2a 20 74 6f 6f   whatever.** too
1ce0: 6c 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 20  l is being used 
1cf0: 66 6f 72 20 66 69 6c 65 20 73 68 61 72 69 6e 67  for file sharing
1d00: 29 20 69 6d 70 6c 65 6d 65 6e 74 73 20 6c 6f 63  ) implements loc
1d10: 6b 73 20 63 6f 72 72 65 63 74 6c 79 20 62 65 74  ks correctly bet
1d20: 77 65 65 6e 0a 2a 2a 20 77 69 6e 64 6f 77 73 20  ween.** windows 
1d30: 61 6e 64 20 75 6e 69 78 2e 20 20 49 27 6d 20 67  and unix.  I'm g
1d40: 75 65 73 73 69 6e 67 20 74 68 61 74 20 69 73 6e  uessing that isn
1d50: 27 74 20 6c 69 6b 65 6c 79 20 74 6f 20 68 61 70  't likely to hap
1d60: 70 65 6e 2c 20 62 75 74 20 62 79 0a 2a 2a 20 75  pen, but by.** u
1d70: 73 69 6e 67 20 74 68 65 20 73 61 6d 65 20 6c 6f  sing the same lo
1d80: 63 6b 69 6e 67 20 72 61 6e 67 65 20 77 65 20 61  cking range we a
1d90: 72 65 20 61 74 20 6c 65 61 73 74 20 6f 70 65 6e  re at least open
1da0: 20 74 6f 20 74 68 65 20 70 6f 73 73 69 62 69 6c   to the possibil
1db0: 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 63 6b 69  ity..**.** Locki
1dc0: 6e 67 20 69 6e 20 77 69 6e 64 6f 77 73 20 69 73  ng in windows is
1dd0: 20 6d 61 6e 64 69 74 6f 72 79 2e 20 20 46 6f 72   manditory.  For
1de0: 20 74 68 69 73 20 72 65 61 73 6f 6e 2c 20 77 65   this reason, we
1df0: 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 0a 2a 2a   cannot store.**
1e00: 20 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e 20   actual data in 
1e10: 74 68 65 20 62 79 74 65 73 20 75 73 65 64 20 66  the bytes used f
1e20: 6f 72 20 6c 6f 63 6b 69 6e 67 2e 20 20 54 68 65  or locking.  The
1e30: 20 70 61 67 65 72 20 6e 65 76 65 72 20 61 6c 6c   pager never all
1e40: 6f 63 61 74 65 73 0a 2a 2a 20 74 68 65 20 70 61  ocates.** the pa
1e50: 67 65 73 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20  ges involved in 
1e60: 6c 6f 63 6b 69 6e 67 20 74 68 65 72 65 66 6f 72  locking therefor
1e70: 65 2e 20 20 53 48 41 52 45 44 5f 53 49 5a 45 20  e.  SHARED_SIZE 
1e80: 69 73 20 73 65 6c 65 63 74 65 64 20 73 6f 0a 2a  is selected so.*
1e90: 2a 20 74 68 61 74 20 61 6c 6c 20 6c 6f 63 6b 73  * that all locks
1ea0: 20 77 69 6c 6c 20 66 69 74 20 6f 6e 20 61 20 73   will fit on a s
1eb0: 69 6e 67 6c 65 20 70 61 67 65 20 65 76 65 6e 20  ingle page even 
1ec0: 61 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 70  at the minimum p
1ed0: 61 67 65 20 73 69 7a 65 2e 0a 2a 2a 20 50 45 4e  age size..** PEN
1ee0: 44 49 4e 47 5f 42 59 54 45 20 64 65 66 69 6e 65  DING_BYTE define
1ef0: 73 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  s the beginning 
1f00: 6f 66 20 74 68 65 20 6c 6f 63 6b 73 2e 20 20 42  of the locks.  B
1f10: 79 20 64 65 66 61 75 6c 74 20 50 45 4e 44 49 4e  y default PENDIN
1f20: 47 5f 42 59 54 45 0a 2a 2a 20 69 73 20 73 65 74  G_BYTE.** is set
1f30: 20 68 69 67 68 20 73 6f 20 74 68 61 74 20 77 65   high so that we
1f40: 20 64 6f 6e 27 74 20 68 61 76 65 20 74 6f 20 61   don't have to a
1f50: 6c 6c 6f 63 61 74 65 20 61 6e 20 75 6e 75 73 65  llocate an unuse
1f60: 64 20 70 61 67 65 20 65 78 63 65 70 74 0a 2a 2a  d page except.**
1f70: 20 66 6f 72 20 76 65 72 79 20 6c 61 72 67 65 20   for very large 
1f80: 64 61 74 61 62 61 73 65 73 2e 20 20 42 75 74 20  databases.  But 
1f90: 6f 6e 65 20 73 68 6f 75 6c 64 20 74 65 73 74 20  one should test 
1fa0: 74 68 65 20 70 61 67 65 20 73 6b 69 70 70 69 6e  the page skippin
1fb0: 67 20 6c 6f 67 69 63 20 0a 2a 2a 20 62 79 20 73  g logic .** by s
1fc0: 65 74 74 69 6e 67 20 50 45 4e 44 49 4e 47 5f 42  etting PENDING_B
1fd0: 59 54 45 20 6c 6f 77 20 61 6e 64 20 72 75 6e 6e  YTE low and runn
1fe0: 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20 72  ing the entire r
1ff0: 65 67 72 65 73 73 69 6f 6e 20 73 75 69 74 65 2e  egression suite.
2000: 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20  .**.** Changing 
2010: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 45 4e  the value of PEN
2020: 44 49 4e 47 5f 42 59 54 45 20 72 65 73 75 6c 74  DING_BYTE result
2030: 73 20 69 6e 20 61 20 73 75 62 74 6c 79 20 69 6e  s in a subtly in
2040: 63 6f 6d 70 61 74 69 62 6c 65 0a 2a 2a 20 66 69  compatible.** fi
2050: 6c 65 20 66 6f 72 6d 61 74 2e 20 20 44 65 70 65  le format.  Depe
2060: 6e 64 69 6e 67 20 6f 6e 20 68 6f 77 20 69 74 20  nding on how it 
2070: 69 73 20 63 68 61 6e 67 65 64 2c 20 79 6f 75 20  is changed, you 
2080: 6d 69 67 68 74 20 6e 6f 74 20 6e 6f 74 69 63 65  might not notice
2090: 0a 2a 2a 20 74 68 65 20 69 6e 63 6f 6d 70 61 74  .** the incompat
20a0: 69 62 69 6c 69 74 79 20 72 69 67 68 74 20 61 77  ibility right aw
20b0: 61 79 2c 20 65 76 65 6e 20 72 75 6e 6e 69 6e 67  ay, even running
20c0: 20 61 20 66 75 6c 6c 20 72 65 67 72 65 73 73 69   a full regressi
20d0: 6f 6e 20 74 65 73 74 2e 0a 2a 2a 20 54 68 65 20  on test..** The 
20e0: 64 65 66 61 75 6c 74 20 6c 6f 63 61 74 69 6f 6e  default location
20f0: 20 6f 66 20 50 45 4e 44 49 4e 47 5f 42 59 54 45   of PENDING_BYTE
2100: 20 69 73 20 74 68 65 20 66 69 72 73 74 20 62 79   is the first by
2110: 74 65 20 70 61 73 74 20 74 68 65 0a 2a 2a 20 31  te past the.** 1
2120: 47 42 20 62 6f 75 6e 64 61 72 79 2e 0a 2a 2a 0a  GB boundary..**.
2130: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2140: 5f 4f 4d 49 54 5f 57 53 44 0a 23 20 64 65 66 69  _OMIT_WSD.# defi
2150: 6e 65 20 50 45 4e 44 49 4e 47 5f 42 59 54 45 20  ne PENDING_BYTE 
2160: 20 20 20 20 28 30 78 34 30 30 30 30 30 30 30 29      (0x40000000)
2170: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2180: 50 45 4e 44 49 4e 47 5f 42 59 54 45 20 20 20 20  PENDING_BYTE    
2190: 20 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67    sqlite3Pending
21a0: 42 79 74 65 0a 23 65 6e 64 69 66 0a 23 64 65 66  Byte.#endif.#def
21b0: 69 6e 65 20 52 45 53 45 52 56 45 44 5f 42 59 54  ine RESERVED_BYT
21c0: 45 20 20 20 20 20 28 50 45 4e 44 49 4e 47 5f 42  E     (PENDING_B
21d0: 59 54 45 2b 31 29 0a 23 64 65 66 69 6e 65 20 53  YTE+1).#define S
21e0: 48 41 52 45 44 5f 46 49 52 53 54 20 20 20 20 20  HARED_FIRST     
21f0: 20 28 50 45 4e 44 49 4e 47 5f 42 59 54 45 2b 32   (PENDING_BYTE+2
2200: 29 0a 23 64 65 66 69 6e 65 20 53 48 41 52 45 44  ).#define SHARED
2210: 5f 53 49 5a 45 20 20 20 20 20 20 20 35 31 30 0a  _SIZE       510.
2220: 0a 2f 2a 0a 2a 2a 20 57 72 61 70 70 65 72 20 61  ./*.** Wrapper a
2230: 72 6f 75 6e 64 20 4f 53 20 73 70 65 63 69 66 69  round OS specifi
2240: 63 20 73 71 6c 69 74 65 33 5f 6f 73 5f 69 6e 69  c sqlite3_os_ini
2250: 74 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  t() function..*/
2260: 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 49 6e  .int sqlite3OsIn
2270: 69 74 28 76 6f 69 64 29 3b 0a 0a 2f 2a 20 0a 2a  it(void);../* .*
2280: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20  * Functions for 
2290: 61 63 63 65 73 73 69 6e 67 20 73 71 6c 69 74 65  accessing sqlite
22a0: 33 5f 66 69 6c 65 20 6d 65 74 68 6f 64 73 20 0a  3_file methods .
22b0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73  */.int sqlite3Os
22c0: 43 6c 6f 73 65 28 73 71 6c 69 74 65 33 5f 66 69  Close(sqlite3_fi
22d0: 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
22e0: 33 4f 73 52 65 61 64 28 73 71 6c 69 74 65 33 5f  3OsRead(sqlite3_
22f0: 66 69 6c 65 2a 2c 20 76 6f 69 64 2a 2c 20 69 6e  file*, void*, in
2300: 74 20 61 6d 74 2c 20 69 36 34 20 6f 66 66 73 65  t amt, i64 offse
2310: 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
2320: 73 57 72 69 74 65 28 73 71 6c 69 74 65 33 5f 66  sWrite(sqlite3_f
2330: 69 6c 65 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  ile*, const void
2340: 2a 2c 20 69 6e 74 20 61 6d 74 2c 20 69 36 34 20  *, int amt, i64 
2350: 6f 66 66 73 65 74 29 3b 0a 69 6e 74 20 73 71 6c  offset);.int sql
2360: 69 74 65 33 4f 73 54 72 75 6e 63 61 74 65 28 73  ite3OsTruncate(s
2370: 71 6c 69 74 65 33 5f 66 69 6c 65 2a 2c 20 69 36  qlite3_file*, i6
2380: 34 20 73 69 7a 65 29 3b 0a 69 6e 74 20 73 71 6c  4 size);.int sql
2390: 69 74 65 33 4f 73 53 79 6e 63 28 73 71 6c 69 74  ite3OsSync(sqlit
23a0: 65 33 5f 66 69 6c 65 2a 2c 20 69 6e 74 29 3b 0a  e3_file*, int);.
23b0: 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 46 69 6c  int sqlite3OsFil
23c0: 65 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 66 69  eSize(sqlite3_fi
23d0: 6c 65 2a 2c 20 69 36 34 20 2a 70 53 69 7a 65 29  le*, i64 *pSize)
23e0: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 4c  ;.int sqlite3OsL
23f0: 6f 63 6b 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ock(sqlite3_file
2400: 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2410: 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 28 73 71 6c  ite3OsUnlock(sql
2420: 69 74 65 33 5f 66 69 6c 65 2a 2c 20 69 6e 74 29  ite3_file*, int)
2430: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 43  ;.int sqlite3OsC
2440: 68 65 63 6b 52 65 73 65 72 76 65 64 4c 6f 63 6b  heckReservedLock
2450: 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 69  (sqlite3_file *i
2460: 64 2c 20 69 6e 74 20 2a 70 52 65 73 4f 75 74 29  d, int *pResOut)
2470: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 46  ;.int sqlite3OsF
2480: 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 71 6c 69 74  ileControl(sqlit
2490: 65 33 5f 66 69 6c 65 2a 2c 69 6e 74 2c 76 6f 69  e3_file*,int,voi
24a0: 64 2a 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  d*);.#define SQL
24b0: 49 54 45 5f 46 43 4e 54 4c 5f 44 42 5f 55 4e 43  ITE_FCNTL_DB_UNC
24c0: 48 41 4e 47 45 44 20 30 78 63 61 30 39 33 66 61  HANGED 0xca093fa
24d0: 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 53  0.int sqlite3OsS
24e0: 65 63 74 6f 72 53 69 7a 65 28 73 71 6c 69 74 65  ectorSize(sqlite
24f0: 33 5f 66 69 6c 65 20 2a 69 64 29 3b 0a 69 6e 74  3_file *id);.int
2500: 20 73 71 6c 69 74 65 33 4f 73 44 65 76 69 63 65   sqlite3OsDevice
2510: 43 68 61 72 61 63 74 65 72 69 73 74 69 63 73 28  Characteristics(
2520: 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 69 64  sqlite3_file *id
2530: 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73  );.int sqlite3Os
2540: 53 68 6d 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  ShmOpen(sqlite3_
2550: 66 69 6c 65 20 2a 69 64 29 3b 0a 69 6e 74 20 73  file *id);.int s
2560: 71 6c 69 74 65 33 4f 73 53 68 6d 53 69 7a 65 28  qlite3OsShmSize(
2570: 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 69 64  sqlite3_file *id
2580: 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e  , int, int*);.in
2590: 74 20 73 71 6c 69 74 65 33 4f 73 53 68 6d 47 65  t sqlite3OsShmGe
25a0: 74 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  t(sqlite3_file *
25b0: 69 64 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 76  id, int, int*, v
25c0: 6f 69 64 20 76 6f 6c 61 74 69 6c 65 2a 2a 29 3b  oid volatile**);
25d0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 53 68  .int sqlite3OsSh
25e0: 6d 52 65 6c 65 61 73 65 28 73 71 6c 69 74 65 33  mRelease(sqlite3
25f0: 5f 66 69 6c 65 20 2a 69 64 29 3b 0a 69 6e 74 20  _file *id);.int 
2600: 73 71 6c 69 74 65 33 4f 73 53 68 6d 4c 6f 63 6b  sqlite3OsShmLock
2610: 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 69  (sqlite3_file *i
2620: 64 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  d, int, int, int
2630: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
2640: 73 53 68 6d 42 61 72 72 69 65 72 28 73 71 6c 69  sShmBarrier(sqli
2650: 74 65 33 5f 66 69 6c 65 20 2a 69 64 29 3b 0a 69  te3_file *id);.i
2660: 6e 74 20 73 71 6c 69 74 65 33 4f 73 53 68 6d 43  nt sqlite3OsShmC
2670: 6c 6f 73 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  lose(sqlite3_fil
2680: 65 20 2a 69 64 2c 20 69 6e 74 29 3b 0a 0a 2f 2a  e *id, int);../*
2690: 20 0a 2a 2a 20 46 75 6e 63 74 69 6f 6e 73 20 66   .** Functions f
26a0: 6f 72 20 61 63 63 65 73 73 69 6e 67 20 73 71 6c  or accessing sql
26b0: 69 74 65 33 5f 76 66 73 20 6d 65 74 68 6f 64 73  ite3_vfs methods
26c0: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
26d0: 4f 73 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76  OsOpen(sqlite3_v
26e0: 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  fs *, const char
26f0: 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65   *, sqlite3_file
2700: 2a 2c 20 69 6e 74 2c 20 69 6e 74 20 2a 29 3b 0a  *, int, int *);.
2710: 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 44 65 6c  int sqlite3OsDel
2720: 65 74 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20  ete(sqlite3_vfs 
2730: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2740: 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2750: 65 33 4f 73 41 63 63 65 73 73 28 73 71 6c 69 74  e3OsAccess(sqlit
2760: 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
2770: 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
2780: 20 2a 70 52 65 73 4f 75 74 29 3b 0a 69 6e 74 20   *pResOut);.int 
2790: 73 71 6c 69 74 65 33 4f 73 46 75 6c 6c 50 61 74  sqlite3OsFullPat
27a0: 68 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 76 66  hname(sqlite3_vf
27b0: 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  s *, const char 
27c0: 2a 2c 20 69 6e 74 2c 20 63 68 61 72 20 2a 29 3b  *, int, char *);
27d0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27e0: 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
27f0: 49 4f 4e 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  ION.void *sqlite
2800: 33 4f 73 44 6c 4f 70 65 6e 28 73 71 6c 69 74 65  3OsDlOpen(sqlite
2810: 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
2820: 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har *);.void sql
2830: 69 74 65 33 4f 73 44 6c 45 72 72 6f 72 28 73 71  ite3OsDlError(sq
2840: 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 69 6e 74  lite3_vfs *, int
2850: 2c 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  , char *);.void 
2860: 28 2a 73 71 6c 69 74 65 33 4f 73 44 6c 53 79 6d  (*sqlite3OsDlSym
2870: 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20  (sqlite3_vfs *, 
2880: 76 6f 69 64 20 2a 2c 20 63 6f 6e 73 74 20 63 68  void *, const ch
2890: 61 72 20 2a 29 29 28 76 6f 69 64 29 3b 0a 76 6f  ar *))(void);.vo
28a0: 69 64 20 73 71 6c 69 74 65 33 4f 73 44 6c 43 6c  id sqlite3OsDlCl
28b0: 6f 73 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20  ose(sqlite3_vfs 
28c0: 2a 2c 20 76 6f 69 64 20 2a 29 3b 0a 23 65 6e 64  *, void *);.#end
28d0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
28e0: 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
28f0: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f   */.int sqlite3O
2900: 73 52 61 6e 64 6f 6d 6e 65 73 73 28 73 71 6c 69  sRandomness(sqli
2910: 74 65 33 5f 76 66 73 20 2a 2c 20 69 6e 74 2c 20  te3_vfs *, int, 
2920: 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
2930: 69 74 65 33 4f 73 53 6c 65 65 70 28 73 71 6c 69  ite3OsSleep(sqli
2940: 74 65 33 5f 76 66 73 20 2a 2c 20 69 6e 74 29 3b  te3_vfs *, int);
2950: 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 73 43 75  .int sqlite3OsCu
2960: 72 72 65 6e 74 54 69 6d 65 49 6e 74 36 34 28 73  rrentTimeInt64(s
2970: 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 73 71  qlite3_vfs *, sq
2980: 6c 69 74 65 33 5f 69 6e 74 36 34 2a 29 3b 0a 0a  lite3_int64*);..
2990: 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 6e 69 65 6e 63  /*.** Convenienc
29a0: 65 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20  e functions for 
29b0: 6f 70 65 6e 69 6e 67 20 61 6e 64 20 63 6c 6f 73  opening and clos
29c0: 69 6e 67 20 66 69 6c 65 73 20 75 73 69 6e 67 20  ing files using 
29d0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  .** sqlite3_mall
29e0: 6f 63 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73  oc() to obtain s
29f0: 70 61 63 65 20 66 6f 72 20 74 68 65 20 66 69 6c  pace for the fil
2a00: 65 2d 68 61 6e 64 6c 65 20 73 74 72 75 63 74 75  e-handle structu
2a10: 72 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  re..*/.int sqlit
2a20: 65 33 4f 73 4f 70 65 6e 4d 61 6c 6c 6f 63 28 73  e3OsOpenMalloc(s
2a30: 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
2a40: 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
2a50: 74 65 33 5f 66 69 6c 65 20 2a 2a 2c 20 69 6e 74  te3_file **, int
2a60: 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,int*);.int sqli
2a70: 74 65 33 4f 73 43 6c 6f 73 65 46 72 65 65 28 73  te3OsCloseFree(s
2a80: 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
2a90: 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49  .#endif /* _SQLI
2aa0: 54 45 5f 4f 53 5f 48 5f 20 2a 2f 0a              TE_OS_H_ */.